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:
- GCM no recibe mensajes en android 2.3.6 pero funciona en android 4.1.2
- ¿Por qué GCM devuelve ID de registro vacío para algunos dispositivos Android?
- usando la daga para inyectar la base de datos junto con el gcm que recuperará datos de la base de datos
- ¿Cómo eliminar una notificación push de Android desde el centro de notificaciones cuando la aplicación se inicia con su icono de lanzador?
- GCM: MulticastResult - ¿cuál es el resultado de qué dispositivo?
- 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?
- Se ha cambiado el ID de registro de GCM
- Instancia de Google GCMIntentService
- ¿Qué significa "si el dispositivo está conectado a GCM"
- Pasar parámetros a GcmTaskService
- ¿Google Cloud Messaging envía mensajes a dispositivos que están en modo de espera?
- GCM FC / ID de remitente no establecido en el constructor
- OnRegistered () de GCMIntentService nunca llamado
- Enviar notificaciones con django y GCM
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
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).
- ¿Utilizando SlidingPaneLayout desde el lado derecho?
- OnCreate () se llama cuando se vuelve a abrir desde una tarea reciente después de cambiar la configuración del permiso