Firebase Messaging - 在应用程序处于后台时创建抬头显示
Firebase Messaging - Create Heads-Up display when app in background
使用 FCM,无论应用程序是否在后台,我都会在系统托盘中收到推送通知 运行。当应用程序在前台时,我可以覆盖 onMessageReceived 并使用 NotificationCompat
.
创建我自己的提醒通知
有没有办法在我的应用是否在后台时创建提示通知运行?
谢谢
编辑: 作为参考,这里是我通过 curl 到 https://fcm.googleapis.com/fcm/send
的消息负载
{
"to":"push-token",
"content_available": true,
"priority": "high",
"notification": {
"title": "Test",
"body": "Mary sent you a message!",
"sound": "default"
},
"data": {
"message": "Mary sent you a Message!",
"notificationKey":"userID/notification_type",
"priority": "high",
"sound": "default"
}
}
只有在您的应用程序处于后台或不在后台使用其他应用程序时,您才会收到提示通知运行。如果您的 phone 未被使用,您将收到系统托盘通知或锁屏通知。
如果您使用应用服务器通过 http 协议发送推送通知,那么您甚至可以在发送到 fcm 端点的 json 数据中将优先级设置为高。
如果您使用的是 firebase 控制台,请在高级通知部分设置下确保优先级高。
在大多数情况下,高优先级将确保您收到提醒通知。
编辑:这是您编辑的 json 成功测试的样子 -
{
"to":"push-token",
"priority": "high",
"notification": {
"title": "Test",
"body": "Mary sent you a message!",
"sound": "default",
"icon": "youriconname"
}
}
youriconname 是您要设置为通知图标的可绘制资源的名称。
出于测试目的,我省略了数据。就这么多应该给你提醒通知。
我找到了解决方案:
我只是从我们的本地服务器发送到 firebase 服务器的 json 中删除通知标记,然后我在 MyFirebaseMessagingService 中生成回调:onMessageReceived() 方法。在这种方法中,我使用 NotificationCompat.Builder class 生成本地通知。这是 android 的代码:
private void sendNotification(RemoteMessage remoteMessage) {
Intent intent = new Intent(this, SplashActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(AppConstant.PUSH_CATEGORY, remoteMessage.getData().get("category"));
intent.putExtra(AppConstant.PUSH_METADATA, remoteMessage.getData().get("metaData"));
intent.putExtra(AppConstant.PUSH_ACTIVITY, remoteMessage.getData().get("activity"));
intent.putExtra(AppConstant.PUSH_ID_KEY, remoteMessage.getData().get("_id"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(remoteMessage.getData().get("title"))
.setContentText(remoteMessage.getData().get("body"))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
使用 FCM,无论应用程序是否在后台,我都会在系统托盘中收到推送通知 运行。当应用程序在前台时,我可以覆盖 onMessageReceived 并使用 NotificationCompat
.
有没有办法在我的应用是否在后台时创建提示通知运行?
谢谢
编辑: 作为参考,这里是我通过 curl 到 https://fcm.googleapis.com/fcm/send
{
"to":"push-token",
"content_available": true,
"priority": "high",
"notification": {
"title": "Test",
"body": "Mary sent you a message!",
"sound": "default"
},
"data": {
"message": "Mary sent you a Message!",
"notificationKey":"userID/notification_type",
"priority": "high",
"sound": "default"
}
}
只有在您的应用程序处于后台或不在后台使用其他应用程序时,您才会收到提示通知运行。如果您的 phone 未被使用,您将收到系统托盘通知或锁屏通知。
如果您使用应用服务器通过 http 协议发送推送通知,那么您甚至可以在发送到 fcm 端点的 json 数据中将优先级设置为高。
如果您使用的是 firebase 控制台,请在高级通知部分设置下确保优先级高。
在大多数情况下,高优先级将确保您收到提醒通知。
编辑:这是您编辑的 json 成功测试的样子 -
{
"to":"push-token",
"priority": "high",
"notification": {
"title": "Test",
"body": "Mary sent you a message!",
"sound": "default",
"icon": "youriconname"
}
}
youriconname 是您要设置为通知图标的可绘制资源的名称。
出于测试目的,我省略了数据。就这么多应该给你提醒通知。
我找到了解决方案: 我只是从我们的本地服务器发送到 firebase 服务器的 json 中删除通知标记,然后我在 MyFirebaseMessagingService 中生成回调:onMessageReceived() 方法。在这种方法中,我使用 NotificationCompat.Builder class 生成本地通知。这是 android 的代码:
private void sendNotification(RemoteMessage remoteMessage) {
Intent intent = new Intent(this, SplashActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(AppConstant.PUSH_CATEGORY, remoteMessage.getData().get("category"));
intent.putExtra(AppConstant.PUSH_METADATA, remoteMessage.getData().get("metaData"));
intent.putExtra(AppConstant.PUSH_ACTIVITY, remoteMessage.getData().get("activity"));
intent.putExtra(AppConstant.PUSH_ID_KEY, remoteMessage.getData().get("_id"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(remoteMessage.getData().get("title"))
.setContentText(remoteMessage.getData().get("body"))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}