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:

<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.

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); } 
  • Notificación de envío de FCM que muestra el icono cuadrado blanco en lugar del icono de la aplicación cuando la aplicación está en el fondo
  • Actualizar la interfaz de usuario de Android desde la devolución de llamada de firebase
  • Firebase Cloud Messaging: mejores prácticas
  • Recibir mensajes GCM incluso cuando la aplicación esté cerrada (deslizar / deslizar)
  • ¿Es necesaria la migración de GCM a FCM?
  • Qué es "serviceAccountKey.json" que se refiere en el tutorial de notificaciones de dispositivo a dispositivo de Firebase
  • Migración de gcm a fcm en android
  • ¿Cómo iniciar FCM ID Service sólo después de que se desencadene una actividad en particular?
  • ¿Cómo dirigir la queja de la pelusa del android sobre las implementaciones exportadas del servicio de la mensajería de Firebase?
  • FCM - onTokenRefresh () nunca se llama
  • Notificaciones de Firebase (FCM) no aparecen cuando se ha eliminado la aplicación de Android de la bandeja reciente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.