我正在从firebase向我的Android应用程序发送推送通知。但是当我的应用程序处于后台时,不会调用firebase onMessageReceived方法而是调用firebase向系统发送通知,以便在系统托盘中显示通知。通知出现在系统托盘中但没有通知声音,即使我已在系统设置中允许我的应用程序发出通知声音。 这是我的通知代码 谢谢
private void sendNotification(String msg, String title) {
NotificationManager mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
Intent i = new Intent(this,MainActivity.class);
i.putExtra("","");
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg);
//Vibration
mBuilder.setVibrate(new long[] { 200, 400, 600, 800, 1000 });
//LED
mBuilder.setLights(Color.MAGENTA, 1000, 1000);
//Ton
mBuilder.setSound(Uri.parse("android.resource://"
+ getApplicationContext().getPackageName() + "/" + R.raw.circles_notif));
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(0, mBuilder.build());
}
答案 0 :(得分:3)
转到通知>新消息>来自firebase控制台的高级选项,并将通知作为自定义数据发送。使用'标题'和'身体'作为键并将其值设置为您希望在通知中显示它们。当你的应用程序处于后台或被杀时,这应该调用onMessageReceived()。
如果您要从自己的服务器发送通知,请参阅以下示例:
{
"data": {
"title": "notification_title",
"body": "notification_body"
},
"to" : "jh578_gsh....jhHGFJ76FH"
}
答案 1 :(得分:2)
它写在override sample of onMessageReceived(),第二条评论专栏说:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
...
Not getting messages here? See why this may be: ...goo.gl/39bRNJ
...
}
解决方案与相关问题的答案How to handle notification when app in background in Firebase一样,可以在Messages with both notification and data payloads部分的文档中找到:
接收包含通知和数据有效负载的消息时的应用行为取决于应用是在后台还是在前台 - 本质上是否在接收时是否处于活动状态。
- 在后台时,应用会在通知托盘中收到通知有效内容,并仅在用户点击通知时处理数据有效内容。
- 在前台时,您的应用会收到一个消息对象,其中包含两个有效负载。
答案 2 :(得分:1)
这似乎对我有用 YMMV
{
"notification": {
"title": "notification_title",
"body": "notification_body",
"sound": "default"
},
"to" : "device....id"
}
这是不会,如果后台会唤醒您的应用,而被接受的答案会。