我正在使用新的FCM将消息从我的服务器推送到我的Android应用程序。
{ "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", "data" : { "Nick" : "Mario", "Room" : "PortugalVSDenmark" } }
我可以使用新的FCM将消息推送到我的应用程序但是,当我杀死应用程序时(长按主页按钮然后将应用程序向左滑动),推送消息不再提供。
为什么呢?
答案 0 :(得分:2)
检查原始有效负载,从服务器接收的内容。当应用关闭时,body
和title
密钥必须在notification
密钥下才能获得推送通知。虽然您只会在应用关闭时在通知托盘中收到通知。样本有效负载:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
答案 1 :(得分:2)
我注意到,在我将应用程序关闭之前,我会根据应用程序的启动方式获得不同的行为,这听起来很奇怪。
如果我使用调试器启动应用程序,并将其滑动,那么我将不再收到FCM通知。如果我然后从启动器图标启动应用程序,我会收到FCM通知,如果我从启动器启动了“#”;应用程序,我继续收到FCM通知。我在Galaxy S4和Sony Xperia Z2上得到了这种行为。
鉴于我在手机上将最新版本的应用程序放到应用程序上的最简单方法是点击调试,这是我必须记住的事情:
当您将其滑动关闭时,再次从启动器图标启动它,然后再次将其滑动关闭。 (至少如果您在应用未运行时测试FCM通知行为)。
答案 2 :(得分:1)
此问题的关键是您必须创建完全相同的json格式:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "You have a new message",
"title" : "",
"icon" : "myicon" // Here you can put your app icon name
}
}
我错过了“icon”标签,这使我只能在应用程序处于后台时收到通知。一旦你有了正确的json格式,你就可以在应用程序被杀死时收到通知。
答案 3 :(得分:0)
您的通知JSON应包括
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
在应用程序关闭时使用firebase的默认功能在通知栏中显示消息。查看this了解详情
可替换地
onMessageReceived
应该在所有情况下触发,因此您可以使用
private void sendNotification(String messageBody) {
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_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("FCM Message")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}