Las notificaciones de envío de GCM no funcionan si la aplicación está cerrada en algunos dispositivos

He seguido la guía de configuración de GCM de Google y su ejemplo en Github para crear una aplicación que reciba notificaciones.

¿Cuándo funciona:

  • Aplicación abierta (todos los dispositivos)
  • Aplicación en segundo plano (todos los dispositivos)
  • Aplicación cerrada (todas excepto una)

El teléfono que no funciona:

  • Huawei P8 lite
  • Android 5.1
  • Servicios de Google Play 8.3.01

Este teléfono funciona bien, puede recibir mensajes de WhatsApp o cualquier otro tipo incluso si el usuario mata la aplicación.

Me temo que esto podría suceder en muchos otros dispositivos que no tengo prueba. Así que quiero mostrar algún código para ver si hay algún problema.

Aquí mi AndroidManifest.xml :

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.presentation" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.example.presentation.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.presentation.permission.C2D_MESSAGE" /> <application android:name=".AndroidApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.example.presentation" /> <!-- If you want to support pre-4.4 KitKat devices. --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> </intent-filter> </receiver> <service android:name="com.example.data.gcm.RegistrationIntentService" android:exported="false" /> <service android:name="com.example.data.gcm.MyGcmListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> <service android:name="com.example.data.gcm.MyInstanceIDListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service> </application> </manifest> 

Se agregó esta dependencia en el nivel de proyecto build.gradle :

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' classpath 'com.google.gms:google-services:1.4.0-beta3' } } 

Agregó esta dependencia en el nivel de la aplicación build.gradle :

 compile "com.google.android.gms:play-services-gcm:8.1.0" 

Y las clases Java son las mismas del ejemplo de Github .

¿Por qué este dispositivo no funciona cuando el usuario cierra la aplicación pero funciona en todos los demás dispositivos que he probado?

Es un "bug / feature" de los dispositivos Huawei.

Android – GCM – No recibe notificaciones push en segundo plano

Una vez que usted mata la aplicación en xiaomi, huawei estos teléfonos desregistrar receptores de difusión, los servicios de la aplicación.

En caso de notificación, su receptor de difusión GCM no se registra al matar> la aplicación, que es probablemente la razón de esto.

El usuario tiene que agregar su aplicación en una lista de tiempo en el administrador de la batería

https://www.forbes.com/sites/bensin/2016/07/04/push-notifications-not-coming-through-to-your-huawei-phone-heres-how-to-fix-it/#578f42bd1ccc

Probado en Huawei Gra-L09 con Android 5.0.1

EDITADO:

Puede advertir al usuario e iniciar el Administrador de aplicaciones protegidas.

Configuración de "Aplicaciones protegidas" en los teléfonos Huawei y cómo manejarlo

Ahora un día, Xiaomi y LeEcho y algún nuevo sistema operativo personalizado para fines de seguridad deshabilita la notificación para cada aplicación. Siga estos pasos para recibir mensajes en segundo plano una vez que salgan de la aplicación utilizando el limpiador.

Settings -> Permissions (Just add your app here and done).

  • Uso de Java gcm-server para enviar mensajes al tema
  • Actualización de token de Firebase
  • Error en el registro de Google Cloud Messaging
  • ¿Puedo usar el servicio técnico con socket-io?
  • Cómo manejar toque de notificación en Android si se muestra automáticamente por GCM
  • No se pueden recibir mensajes con Google Cloud Messaging para Android (no la biblioteca de ayuda)
  • Android Google Services nuevo archivo de configuración preguntas
  • Notificaciones push de Android: cómo obtener la identificación del dispositivo
  • Administrar el ID de registro de GCM en el servidor
  • Proyecto de API carece de ID de proyecto en Google Developers Console
  • Problema al recibir notificación push en el cliente de GCM
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.