La notification Android ne montre pas son contenu lorsque l’application n’est pas en cours d’exécution

Voici mon problème intéressant. La notification Android provenant de GCM n’affiche pas le titre et le contenu (affiche uniquement le nom de l’application et, lorsque vous cliquez dessus, ouvrez MainActivity) lorsque l’application n’est pas en cours d’exécution.

Mais lorsque l’application est ouverte, le titre et le contenu s’affichent correctement . Quel peut être le problème? Il tournait sans problème et je n’ai rien changé.

Manifeste:

           

              

GcmService.java:

 import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; import com.google.android.gms.gcm.GcmListenerService; import com.package.xxx.Activity.ReadNormal; import com.package.xxx.R; public class GcmService extends GcmListenerService { public GcmService() { } @Override public void onMessageReceived(Ssortingng from, Bundle data) { Log.d("GCMService", data.toSsortingng()); Ssortingng type = data.getSsortingng("type", ""); if(type.equals("news")) { showNewsNotification(data); } } private void showNewsNotification(Bundle data) { Ssortingng neId = data.getSsortingng("neId"); if(TextUtils.isEmpty(neId)) { return; } int id = Integer.valueOf(neId); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setContentTitle(data.getSsortingng("neTi")) .setContentText("Click to read more.") .setSmallIcon(R.drawable.ic_launcher) .setAutoCancel(true); Intent i = new Intent(); i.putExtra("neSi", data.getSsortingng("neSi")); i.putExtra("neUr", data.getSsortingng("neUr")); i.putExtra("neTi", data.getSsortingng("neTi")); i.putExtra("neIm", data.getSsortingng("neIm")); i.putExtra("neId", id); i.setClass(this, ReadNormal.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); /***/ PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(pi); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build()); } @Override public void onDeletedMessages() { } @Override public void onMessageSent(Ssortingng msgId) { } @Override public void onSendError(Ssortingng msgId, Ssortingng error) { } 

Je vous remercie.

Enregistre lorsque l’application est en cours d’exécution.

  D/GCMService: Bundle[{neId=4663755, neIm=http://icdn.posta.com.tr/editor/HD/30/1/2016/fft2mm7549077.jpg, neSi=Posta, neTi=Erdoğan: Rusya sonucuna katlanır, neUr=http://www.posta.com.tr/turkiye/HaberDetay/Erdogan--Rusya-sonucuna-katlanir.htm?ArticleID=324647, type=news, notification=Bundle[{e=1}], collapse_key=com.tekmobil.guncelhaber}] 

Enregistre lorsque l’application n’est pas en cours d’exécution.

 (empty, there is no log) 

Trouvé le problème. J’utilisais la version 8.4.0 (à jour) des services de jeu.

 comstack 'com.google.android.gms:play-services-gcm:8.4.0' //GCM 

J’ai réduit la version à 8.3.0 . Cela fonctionne comme prévu.

Au lieu de

  NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build()); 

essayez d’utiliser

 NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(0, mBuilder.build()); 

En bref: essayez de définir content_available=false lors de la génération du push du côté serveur. L’explication suit.

Cela se produit depuis la version 8.4.0 des services de lecture. La documentation indique que si vous envoyez un message en aval avec à la fois des data notification et des data notification , le comportement change si l’application est en avant-plan ou en arrière-plan:

  • au premier plan, le listener onMessageReceived est appelé et vous pouvez gérer manuellement votre notification
  • en arrière-plan, la notification est automatiquement créée par le système en prenant le title et le body de la charge utile de notification. Si vous ne les spécifiez pas, le title est rempli avec le nom de l’application et le body est laissé vide (et cela semble être votre cas).

Dans votre cas, j’ai vu, dans le paquet de messages, cette chose étrange notification=Bundle[{e=1}] J’ai rencontré le même problème. Cette charge de notification est générée automatiquement. J’ai réussi à le supprimer en définissant content_available=false lors de la construction du côté serveur. C’est un problème si vous travaillez également avec iOS, mais je n’ai pas trouvé de meilleure solution … essayez-le.

Voici le document que j’ai cité: https://developers.google.com/cloud-messaging/concept-options#notifications_and_data_messages

J’espère que ça aide, au revoir

Je pense que votre problème est dans cette ligne:

vous n’avez pas inclus ceci:

      

Lollipop change légèrement cela en créant une petite fenêtre en haut de la fenêtre de l’appareil lorsqu’une notification est créée.

Voici une documentation officielle: setFullScreenIntent

En utilisant cette méthode, vous pouvez créer une nouvelle activité avec n’importe quelle disposition personnalisée souhaitée et la lancer au lieu de placer la notification dans la barre d’état.

Le problème est avec la version GCM 8.4.0, il envoie une charge utile de notification même si vous ne l’envoyez pas sur votre serveur.

 notification=Bundle[{e=1} 

Mais si vous ajoutez ce champ e avec la valeur zero sur votre serveur, cela fonctionnera.

Pour plus de détails, voyez ma réponse ici .