这是我的 list :
<service android:name=".fcm.PshycoFirebaseMessagingServices">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".fcm.PshycoFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
当应用程序在后台运行并且有通知到达时,默认通知就会出现,并且不会运行我的 onMessageReceived
代码。
这是我的onMessageReceived
代码。如果我的应用程序在前台运行,而不是在后台运行,则会调用此函数。当应用程序也在后台运行时,如何运行此代码?
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// TODO(developer): Handle FCM messages here.
// If the application is in the foreground handle both data and notification messages here.
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
data = remoteMessage.getData();
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
String imageUrl = (String) data.get("image");
String action = (String) data.get("action");
Log.i(TAG, "onMessageReceived: title : "+title);
Log.i(TAG, "onMessageReceived: message : "+message);
Log.i(TAG, "onMessageReceived: imageUrl : "+imageUrl);
Log.i(TAG, "onMessageReceived: action : "+action);
if (imageUrl == null) {
sendNotification(title,message,action);
} else {
new BigPictureNotification(this,title,message,imageUrl,action);
}
}
// [END receive_message]
最佳答案
1。为什么会发生这种情况?
FCM(Firebase 云消息传递)中有两种类型的消息:
- 显示消息:这些消息会触发
onMessageReceived()
仅当您的应用处于前台时回调 - 数据消息:这些消息会触发
onMessageReceived()
如果您的应用处于前台/后台/已终止状态,则甚至回调
NOTE: Firebase team have not developed a UI to send
data-messages
to your devices, yet. You should use your server for sending this type!
2。怎么做?
要实现此目的,您必须执行 POST
请求以下 URL:
标题
- key :
Content-Type
,值:application/json
- key :
Authorization
,值:key=<your-server-key>
使用主题的正文
{
"to": "/topics/my_topic",
"data": {
"my_custom_key": "my_custom_value",
"my_custom_key2": true
}
}
或者如果您想将其发送到特定设备
{
"data": {
"my_custom_key": "my_custom_value",
"my_custom_key2": true
},
"registration_ids": ["{device-token}","{device2-token}","{device3-token}"]
}
NOTE: Be sure you're not adding JSON key
notification
NOTE: To get your server key, you can find it in the firebase console:Your project -> settings -> Project settings -> Cloud messaging -> Server Key
3。如何处理推送通知消息?
这是处理收到消息的方式:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
String myCustomKey = data.get("my_custom_key");
// Manage data
}
关于android - 当应用程序在 Firebase 后台运行时如何处理通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190295/