我有一个应用程序,它使用firebase消息传递服务来接收推送通知。
我已经搜索了使用"通知"之间的差异或"数据"将通知信息发送给FCM发送服务器时。
当应用被销毁时,我的通知不会显示,只有当它在前台或后台时才会显示。
我需要这样做,以便我的服务器偶尔会每隔一段时间(大约每周两次)向设备发送推送通知,但应用程序应该能够在关闭时显示通知。
知道我怎么能这样做吗?这是我发送给FCM发送服务器的通知json编码字符串:
{
"to":"d_kQKDkq5V4:APA91bG4hIyqbr2a_24nUIe6jVbySS90FMnVKwwuTfG1dV3OooeAc_555XkB2e_h_oWzEOMde8uIt2ESvv_Thl1J1sEXDHWPsLCE7EdMXkZ_AS6xlVq8uJIjVojz1WPxqiUjWZm65Ypf",
"data":{
"title":"App in background again",
"body":"asdsad"
}
}
因此,当应用在背景或前景时会显示通知,但在销毁时不会显示通知。我如何制作它以便它可以在应用程序被销毁时仍然收到并显示通知?
这是我的onMessageRecieved()方法:
public void onMessageReceived(RemoteMessage remoteMessage) {
/*String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
*/
Log.e("REG_TOKEN",remoteMessage.getData().get("title"));
Map<String,String> data = remoteMessage.getData();
String title = data.get("title");
String message = data.get("body");
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
notificationBuilder.setContentTitle(title)
.setContentText(message)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
答案 0 :(得分:0)
我看到这种方法不适用于自定义OS手机。
答案 1 :(得分:0)
当您收到消息时,您所看到的行为可能是由于您的设备处于打盹或待机模式。由于您要发送数据信息,如果您希望立即唤醒设备以接收信息,则需要按照the documentation中的说明高优先级发送设备:
默认情况下,通知消息以高优先级发送,并且 数据消息以正常优先级发送。普通优先级优化 客户端应用程序的电池消耗,应该使用,除非 需要立即交货。对于具有正常优先级的消息, 应用程序可能会收到未指定延迟的邮件。
这是您的消息的一行补充:
{
"to": "d_kQKDkq5V4:APA91bG4hIy...qiUjWZm65Ypf",
"priority": "high",
"data":{
"title":"App in background again",
"body":"asdsad"
}
}
如果发送具有高优先级的消息没有帮助,那么您可能正在测试其中一种型号的手机,这些手机会以某种方式将应用程序置于Stopped State内(例如从最近的任务清单)。有关详细信息,请参阅this answer。