android - 将 Firebase 云消息发送到关闭的应用程序不起作用
问题描述
我正在尝试使用 Firebase Cloud Messaging 做一些事情,我明白了,我可以使用 FCM-Console 通过 FCM 令牌向设备发送消息。我认为即使您的应用程序没有完全运行,您也可以收到这些消息。但是当我的应用程序在后台运行时,我只能收到这些消息。
我现在的问题是,当您的应用程序未运行时是否可以接收消息,如果是,我该如何完成?
这是我添加到清单的内容:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/app_icon" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
<service
android:name=".MyFirebaseInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
在课堂上:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
//if the message contains data payload
//It is a map of custom keyvalues
//we can read it easily
if(remoteMessage.getData().size() > 0){
//handle the data message here
}
//getting the title and the body
String title = remoteMessage.getNotification().getTitle();
String body = remoteMessage.getNotification().getBody();
}
}
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService{
//private Socket mSocket;
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String token = FirebaseInstanceId.getInstance().getToken();
Log.d("MyRefreshedToken", token);
storeToken(token);
}
private void storeToken(String token) {
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}
解决方案
是的,当您的应用程序未运行时,可以使用您的 onMessageReceived 方法接收消息。为此,您需要发送数据消息,也称为静默推送消息。这意味着您需要省略通知标题和正文属性,并且只发送带有数据属性的信息。
前任。
{
"message": {
"token":"78yadsbjbasjkdjbkasbdjkbak...",
"data": {
"Topic" : "Data message",
"Content" : "This message should be handled by onMessageReceived regardless if the app is running or not.",
}
}
}
有关更多信息,请查看 Firebase 文档中的以下页面:
推荐阅读
- c++ - 如何无休止地循环地图
- javascript - Django:在不重定向的情况下更新页面信息
- android - 我怎样才能在 xml 文件中显示这个?有谁可以给我看这个 xml 的示例代码?
- mysql - 查询:查找购买过店铺提供的各类鲜花的顾客
- django - ImageField upload_to 不适用于 django 更新语句
- sql - postgresql - 行值更改后查询中的“group_id”列?
- javascript - 如何在 ace 编辑器“afterExec”回调中添加去抖动功能?
- powerpoint - 开始部分缩放*之前*幻灯片上的特定动画
- python - 需要使用python将xml标签值拆分为一个文件中的10个标签项和另一个文件中的另外10个标签项
- docker - 如何删除所有这些 kubernetes k8s_* 容器