receive - La aplicación de Android no recibe la notificación de Firebase cuando la aplicación se detiene desde la bandeja de tareas múltiples
push notifications android (6)
¿Has intentado usar el atributo stopWithTask en tu clase de servicio?
<service
android:name="com.yourapp.YourPushService"
android:stopWithTask="false" />
Si se establece en verdadero, este servicio se detendrá automáticamente cuando el usuario elimine una tarea arraigada en una actividad propiedad de la aplicación. El valor predeterminado es falso.
Si el indicador es falso, hay una devolución de llamada
onTaskRemoved
en su clase de servicio.
En el caso de que pueda detectar el evento "deslizar" y puede implementar una solución alternativa.
He leído una pregunta similar sobre SO, sin embargo, no pude obtener la respuesta correcta.
Tengo un sistema en el que enviamos notificaciones a alrededor de 500 dispositivos.
Desafortunadamente, muchos de estos dispositivos no reciben la notificación. He descubierto que los teléfonos de la serie OPPO F1 particularmente no reciben la notificación.
He observado que esto ocurre si la aplicación se detiene desde la bandeja de tareas múltiples. ¿Cómo resuelvo esto?
Actualización: He observado que cuando cierro la aplicación desde la bandeja de tareas, mi aplicación se detiene forzosamente en el administrador de aplicaciones. Si bien cuando cierro Whatsapp desde la bandeja de tareas, todavía no se fuerza la detención. ¿Cómo lo maneja Whatsapp?
Actualización 03/2017 - Incluyendo una parte de mi respuesta here .
Para el tema con respecto a deslizar cerrado / asesinado / fuerza detenida , este tema se ha discutido durante bastante tiempo y no parece haber una respuesta definitiva. Durante una de mis pruebas, aún puedo recibir un mensaje (probado con una carga útil de mensajes de solo datos) si deslizo mi aplicación para cerrarla . Pero cuando forcé el cierre desde el menú Configuración, no pude recibir ningún mensaje . Tenga en cuenta que este no es siempre el comportamiento.
Hay algunos dispositivos que fueron diseñados para que cuando deslices la aplicación, sea lo mismo que forzarlos a detenerlos (mira mi respuesta here ).
También hay dispositivos en los que, incluso si la aplicación simplemente se desliza , aunque no se cierra por la fuerza , el propio dispositivo impide que reciba mensajes. Otros dicen que este no puede ser el caso porque aplicaciones como WhatsApp pudieron hacerlo. La razón por la que he aprendido hasta ahora es porque los fabricantes de dispositivos han incluido en la lista blanca la mayoría de las aplicaciones conocidas para que sea posible.
Esto no está documentado en ninguna parte porque (IMO), este es un tema que depende también del dispositivo y sobre el que FCM no tiene control total .
Respuesta original
Dado que es específico del dispositivo ( como mencionó en su publicación: teléfonos de la serie OPPO F1 ), es muy posible que cuando una aplicación se detenga de la bandeja de tareas múltiples en ese dispositivo, en realidad está matando la aplicación, causando los servicios y otros procesos de fondo asociados con él también se destruirán. Vea esta here para tener una idea un poco más de lo que estoy tratando de decir.
Si busca en la comunidad, lo que comúnmente se sugiere aquí es utilizar el indicador
START_STICKY
.
Sin embargo, he visto que se mencionó anteriormente para
FirebaseMessagingService
(vea esta
post
, comentario de @ArthurThompson):
Estos servicios serán iniciados por los servicios de Google Play, que siempre se ejecutan en el dispositivo. No es necesario y no debe iniciar / detener estos servicios usted mismo.
Dicho esto, también existe la posibilidad de (nuevamente de los comentarios):
Puede haber una configuración en el dispositivo que permita / no permita esto.
Sugiero hacer más pruebas si el dispositivo mismo está matando los servicios o ver si hay configuraciones que bloquean las notificaciones.
Cuando se cierra la aplicación, se cierra el servicio. Debe reiniciar el servicio. Ver here
He pasado por lo mismo, pero en mi caso, fueron los teléfonos Xiaomi en lugar de los teléfonos Oppo.
Lo que realmente sucede es que cuando cierras la aplicación desde la bandeja del sistema, el sistema la mata por completo.
Lo que eso significa es que su aplicación no podrá recibir notificaciones a través de GCM / FCM.
WAKE_LOCK
permiso
WAKE_LOCK
tampoco ayuda.
Eso NO significa que el teléfono no esté recibiendo la notificación. Es. Simplemente no permitirá que las aplicaciones lo muestren. Puede verificar esto enviando una transmisión desde adb y mirando su logcat.
Una posible solución a este problema es usar
SyncAdapter
.
Aunque NO se recomienda, he visto algunas aplicaciones que lo usan.
Otras posibles soluciones son utilizar algún tipo de servicio en segundo plano que siempre se está ejecutando.
Algunas personas también usan
AlarmManager
ya que casi nunca mueren.
Mi punto es: no puede confiar en GCM / FCM para sus notificaciones.
Hablemos ahora de WhatsApp:
En los teléfonos Xiaomi, ponen en la lista blanca o en la lista negra una aplicación basada en ciertos criterios. Si descarga una aplicación y está en su lista blanca, permitirán que la aplicación muestre notificaciones. Si no, ya sabes lo que sucede. Pero lo bueno es que puede cambiar esta configuración. Busque una aplicación llamada Seguridad. Si revoca los permisos correctos, incluso WhatsApp dejará de mostrar notificaciones.
La respuesta fue encontrada here
No hay forma de enviar mensajes de datos desde la consola de notificaciones.
¡Pero hay otra forma de enviar notificaciones a los dispositivos y estos quedarán atrapados en el mensaje recibido!
Puede usar la terminal (Mac o Linux) o algún servicio como Postman para enviar la solicitud de publicación en este enlace: https://fcm.googleapis.com/fcm/send
con el siguiente cuerpo:
{
"to": "/topics/your_topic_here",
"data": {
"text":"text",
"text1":"text1",
...
}
}
También necesita agregar 2 encabezados:
- Autorización - clave = your_server_key_here
- Tipo de contenido - aplicación / json
Para obtener su clave de servidor, puede encontrarla en la consola de Firebase: su proyecto -> configuración -> configuración de proyecto -> mensajería en la nube -> clave de servidor
También estaba enfrentando el mismo problema, pero luego me di cuenta después de muchas depuraciones de que estaba deteniendo los servicios que reciben las notificaciones de
Firebase
en el método de detención de una de las actividades.
- Compruebe si está deteniendo estos servicios en cualquier lugar de la aplicación.
- Asegúrese de utilizar el servicio y no el servicio intencional.
- Deslizar la aplicación nunca detendrá los servicios. Intenta depurar la aplicación para los primeros dos puntos.