La aplicación de Android no recibe la notificación de FCM cuando se cierra

Estoy comprobando que Firebase Cloud Messaging envíe una notificación. Han implementado ya y su notificación de recepción cuando la aplicación está en estado abierto. Pero si cierro la aplicación, ya no da notificación. Hay alguna solución para esto.

Código:

WebRequest wRequest; wRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); wRequest.Method = "post"; wRequest.ContentType = " application/json;charset=UTF-8"; wRequest.Headers.Add(string.Format("Authorization: key={0}", AppId)); wRequest.Headers.Add(string.Format("Sender: id={0}", SenderId)); string postData = "{\"registration_ids\":[\"" + regIds + "\"], \"data\": "+ value +"}"; Byte[] bytes = Encoding.UTF8.GetBytes(postData); wRequest.ContentLength = bytes.Length; Stream stream = wRequest.GetRequestStream(); stream.Write(bytes, 0, bytes.Length); stream.Close(); WebResponse wResponse = wRequest.GetResponse(); 

Servicio de mensajería:

 public class MessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); sendNotification(data); } public void showMessage(Map<String, String> serverData) { Intent i = new Intent(this,MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setAutoCancel(true) .setContentTitle(serverData.get("Title")) .setContentText(serverData.get("Message")) .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) .setContentIntent(pendingIntent); NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(Integer.parseInt(serverData.get("ItemId")),builder.build()); } private void sendNotification(Map<String, String> serverData) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this,0 /* request code */, intent,PendingIntent.FLAG_UPDATE_CURRENT); long[] pattern = {500,500,500,500,500}; Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) .setContentTitle(serverData.get("Title")) .setContentText(serverData.get("Message")) .setAutoCancel(true) .setVibrate(pattern) .setLights(Color.BLUE,1,1) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(Integer.parseInt(serverData.get("ItemId")), notificationBuilder.build()); } } 

Actividad principal-

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseMessaging.getInstance().subscribeToTopic("test"); FirebaseInstanceId.getInstance().getToken(); } } 

Manifiesto-

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.com.firebasenotify"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name=".InstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter> </service> </application> </manifest> 

No hubo ningún problema con el código. Yo estaba usando Mi nota 4, y de alguna manera no se muestra la notificación en Mi4 cuando la aplicación está cerrada. He probado con otro dispositivo android y su funcionamiento bien.

Gracias a Tim Castelijns y Frank van Puffelen por participar en la conversación.

Agregando la clave time_to_live en su POST Payload resolverá este problema. El valor de este parámetro debe ser una duración de 0 a 2.419.200 segundos, y corresponde al período máximo de tiempo durante el cual FCM almacena e intenta entregar el mensaje. "Time_to_live": 3 Referencia de Documentos de Firebase

Según FCM, los documentos onMessageReceived () no se llamarán cuando la aplicación esté en segundo plano . Debe enviar un objeto de notificación en orden para que aparezca en la bandeja del sistema y cuando el usuario haga clic en la actividad del lanzador se abrirá con datos como extras con la intención . Para cargas útiles debe utilizar el objeto de datos . Ver documentos y recibir mensajes en una aplicación para Android

  • Borrar notificación en la barra de estado después de que la aplicación se estrelló
  • Notificaciones diarias a ciertas horas
  • Android remove notification (creada por mNotifyBuilder) al hacer clic
  • Notificaciones locales en Android?
  • Notificación de sonido, vibración y LED no funcionan
  • El comportamiento anormal de la aplicación no inicia la actividad mencionada en la intención
  • Manera fiable de recuperar los detalles de StatusbarNotification (título, texto de notificación)
  • Los extras de intento se duplican cuando se utiliza FLAG_UPDATE_CURRENT en PendingIntent al crear notificaciones de android
  • Android lolipop notificación blanco círculo vacío
  • La notificación de Android no desaparece después de hacer clic en la notificación
  • Fondo de notificación en Android Lollipop es blanco. ¿Cómo puedo cambiarlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.