EDIT3: Ok je trouve le problème: Si l'application est tué, l'envoi à la fois data
etnotification
ne se déclenche pas onMessageReceived
. notification
doit être défini sur null si le périphérique cible est android.FirebaseMessagingService: intent.putExtra() ne fonctionne pas si l'application ne fonctionne pas
C'est vraiment un comportement stupide.
Original post:
je peux récupérer avec succès le paquet de l'intention adoptée par le notificationBuilder
à l'activité lorsque l'application est lancée.
Cependant, si je tue l'application, la notification fonctionne toujours mais le GetExtras()
de l'intention est null.
Dans ma FirebaseMessagingService
classe enfant:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("key_1","value");
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//also tried with PendingIntent.FLAG_CANCEL_CURRENT
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("title")
.setContentText("messageBody")
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
Lorsque l'application est tué, le firebaseMessagingService
ne peut pas écrire même un fichier. Il ne plante pas, il construit et affiche la notification, mais tout ce qui est fait sur le disque ne fonctionne pas.
EDIT: J'ai remplacé le contenu de la méthode onMessageReceived
comme suit:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
// Do nothing
}
Lorsque l'application est en cours d'exécution ne se passe-t -comme prévu- mais quand l'application est tué une notification est affichée cinque la app nom comme un titre et remoteMessage.getNotification().getBody()
comme texte de contenu.
Il semble que onMessageReceived
ne soit pas utilisé. Au lieu de cela une autre fonction magique est appelée ...
EDIT2: Comme l'a demandé, voici ce qui est envoyé à partir du serveur:
{
"data":
{
"form_id":"33882606580812",
"recipientUserId":10500
}
,
"to":"e0bU2jIVO9g:APA91bHsS-s3G1gQLcTFtRUC77pJUWcZvD7h9NfUgFLD-bFam1S0dddngVcmrQlXR5i6DfTsc69T8JbIrSuzyF1iv0c4ac1gmkwvGVMwZo_yA4KwOh82Nx-weYeL79r79si4qH3QBEgs",
"notification":
{
"body":"you have a new notification",
"badge":"1",
"sound":"default"
},
"delay_while_idle":false
}
S'il vous plaît pouvez-vous partager le JSON de votre fcm que vous utilisez pour envoyer des données et des notifications? –
Également mettez-vous tout ce code ici? '// Vérifie si le message contient une charge utile de données. if (remoteMessage.getData(). Size()> 0) { Log.d (TAG, "Données du message payload:" + remoteMessage.getData()); // et votre autre code i.e intentions et tous } ' –
Pouvez-vous me dire le fabricant ou le modèle de téléphone que vous tester sur. Parce que de nombreux fabricants ** (spécialement ceux basés en Chine) ** ont un service de fond bizarre tuent les applications dans leur architecture qui causent beaucoup de problèmes avec les applications de fond de services et plus encore. Juste un léger souci que même cela pourrait être un problème ici. –