我一直在开发Android应用程序,所有这些应用程序都集成了FCM并且运行正常。
我有这个应用程序,除非打开应用程序,否则不会触发onMessageReceived,如果应用程序已关闭并且我收到通知,它会从启动时打开并遵循正常流程(它不会转到通知活动) 。 N.B:我所做的所有测试都来自Firebase控制台
我真的不知道为什么,任何帮助都会受到赞赏。
这是我的代码:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.wtf("RECEIVED","NOTIFICATION");
// TODO(developer): Handle FCM messages here.
Log.wtf(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.wtf(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.wtf(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
sendNotification("Notification");
}
private void sendNotification(String messageBody) {
Intent intent = new Intent(this, HomeActivity.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.mipmap.icon)
.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());
}
}
答案 0 :(得分:2)
使用 Firebase ,您可以基本上发送两种类型的通知消息。
<强> 1。通知消息:有时被视为&#34;显示消息。&#34;
<强> 2。数据/有效载荷消息:由客户端应用程序处理。
以上两种通知都有不同的行为,具体取决于您的应用是在前台还是后台。
1.Notification msg + Background :已发送到通知托盘
2.Notification msg + Foreground :Android上的onMessageReceived()
3.Data msg + Background :应用程序在通知托盘中接收通知有效内容,并仅在用户点击通知时处理数据有效负载。
4.Data msg + Foreground :您的应用会收到两个有效负载的消息对象。
有关更多说明check this.
使用FCM控制台发送数据/有效负载消息时,使用“高级”选项并插入键和值。