我正在使用新的 FCM 将消息从我的服务器推送到我的 android 应用程序。
{ "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", “数据” : { “尼克”:“马里奥”, “房间”:“葡萄牙VS丹麦” } }
我可以使用新的 FCM 将消息推送到我的应用程序,但是,当我终止应用程序(长按主页按钮然后将应用程序向左滑动)时,不再发送推送消息。
为什么?
我正在使用新的 FCM 将消息从我的服务器推送到我的 android 应用程序。
{ "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", “数据” : { “尼克”:“马里奥”, “房间”:“葡萄牙VS丹麦” } }
我可以使用新的 FCM 将消息推送到我的应用程序,但是,当我终止应用程序(长按主页按钮然后将应用程序向左滑动)时,不再发送推送消息。
为什么?
我注意到在我关闭应用程序之前启动应用程序的方式不同,我会得到不同的行为,这听起来很奇怪。
如果我使用调试器启动应用程序并将其关闭,则我不再收到 FCM 通知。如果我随后从启动器图标启动应用程序,我会收到 FCM 通知,如果我刷掉“从启动器启动”应用程序,我会继续收到 FCM 通知。我在 Galaxy S4 和 Sony Xperia Z2 上得到了这种行为。
鉴于我将手机上最新版本的应用程序安装到应用程序上的最简单方法是进行调试,这是我必须牢记的:
滑动关闭时,再次从启动器图标启动它,然后再次滑动关闭。(至少如果您在应用未运行时测试 FCM 通知行为)。
取自:https ://github.com/firebase/quickstart-android/issues/41
检查原始有效负载,从服务器接收到的内容。body
并且title
密钥必须在notification
密钥下才能在应用程序关闭时获得推送通知。虽然您只会在应用程序关闭时在通知托盘中收到通知。样本有效载荷:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
这个问题的关键是你必须创建完全相同的 json 格式:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "You have a new message",
"title" : "",
"icon" : "myicon" // Here you can put your app icon name
}
}
我过去常常错过“图标”标签,这使我只能在应用程序处于后台时收到通知。一旦您拥有正确的 json 格式,您将能够在应用程序被终止时收到通知。
您的通知 JSON 应包括
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
在应用程序关闭时使用 firebase 的默认功能在通知栏中显示消息。看看这个了解更多信息
交替
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());
}