Firebase onMessageReceived no llamado cuando la aplicación está inactiva
Estoy utilizando Firebase Cloud Messaging en Android.
- Puedo recibir con éxito mensajes de notificación y datos cuando la aplicación está en primer plano.
- La documentación indica que si se recibe un mensaje de notificación mientras la aplicación está en segundo plano , Firebase enviará una notificación a la bandeja del sistema en nombre de la aplicación . Esto no funciona para mí.
- Si se envía un mensaje de datos y la aplicación está en segundo plano, el método onMessageReceived se llama correctamente.
- El escenario más preocupante es cuando obligo a detener la aplicación y luego intentar enviar una notificación o un mensaje de datos. El método onMessageReceived no se llama en esta situación.
- He visto una serie de artículos sobre SO discutir el caso de uso de fondo, pero todavía no he visto ninguna explicación de por qué no se reciben mensajes cuando la aplicación se detiene por completo .
Tengo lo siguiente en mi manifiesto:
- Añadir acción a la notificación Firebase
- ¿Cuántos temas podemos hacer en Firebase Cloud Messaging?
- Android - Notificaciones Azure Push de Google FCM
- IncompatibleClassChangeError después de actualizar a Android Build Tools 25.1.6 GCM / FCM
- Mensajería en la nube Firebase no recibida cuando la aplicación está en segundo plano
<service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name=".MyInstanceIdService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service>
Esto es lo que la documentación tiene que decir sobre la extensión de FirebaseMessagingService:
Esto es necesario si desea realizar cualquier tratamiento de mensajes más allá de recibir notificaciones en aplicaciones en segundo plano.
No está del todo claro lo que significan "manejo de mensajes más allá de recibir notificaciones en aplicaciones en segundo plano". Sólo puedo asumir que están hablando de manejar mensajes cuando la aplicación está cerrada.
Cualquier ayuda sería muy apreciada.
- Aplicación abierta en la notificación de firebase recibida (FCM)
- Mensajería en la nube de FireBase (FCM) suscribiéndose / darse de baja del tema Cuando OFFLINE
- ¿Cómo migrar el centro de notificación Azure a Firebase Cloud Messaging?
- Firebase onTokenRefresh () no se llama
- Empujar no recibido cuando se mata la aplicación
- Firebase Cloud Messaging (FCM): inicia la actividad cuando el usuario hace clic en la notificación con extras
- ¿Cómo puedo enviar una notificación de Firebase Cloud Messaging sin utilizar Firebase Console?
- Firebase (FCM): activa la actividad y pasa los datos al hacer clic en la notificación. androide
Si obligas a detener una aplicación, no recibirás ninguna notificación hasta que se reinicie la aplicación . Ninguno de los códigos funcionará hasta que se reinicie la aplicación.
Todos los servicios de la aplicación también se detendrán hasta que el usuario vuelva a iniciarla manualmente
El problema está en su backend. Vea esta respuesta. Cuando el mensaje contiene un objeto de notification
, onMessageReceived se llama sólo cuando la aplicación es en primer plano. Así que usted tiene que utilizar sólo objeto de data
. P.ej:
var message = { to: user.deviceId, // required collapse_key: 'key', data: { title: 'Hello', body: 'Body' } };
Esto funciona para cada escenario.
Para enviar un mensaje utilizando API, puede utilizar una herramienta llamada AdvancedREST Client.
{ "data": { "image": "https://ibin.co/2t1lLdpfS06F.png", "message": "Firebase Push Message Using API" "AnotherActivity": "True" },"to" : "f25gYF3***********************HLI"}
Añade acción en tu actividad de manifiesto como a continuación:
<activity android:name=".ActivityFCM" android:screenOrientation="sensor" android:windowSoftInputMode="stateHidden"> <intent-filter> <action android:name="AnyNameYouWant" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Y agrega click_action en tu servidor de notificaciones de envío (mi ejemplo es PHP)
$notification= array( 'title' => '快訊', "body" => "市場大特價", 'tickerText' => 'Ticker text here', 'vibrate' => 1, 'sound' => 1, 'largeIcon' => 'large_icon', 'smallIcon' => 'small_icon', 'click_action' => 'AnyNameYouWant');
Utilice este método onCreate de su MainActivity
if (getIntent().getExtras() != null) { // I Wrote here. Intent intent = new Intent(MainActivity.this, NotificationActivity.class); startActivity(intent); }