ste*_*ker 31 android firebase firebase-cloud-messaging firebase-notifications
我希望在收到通知时自动打开应用程序,Firebase和新的FCM通知是否可以实现?
我知道我可以设置click_action,但这只是为了自定义通知点击会启动哪些活动,我需要在收到通知时自动启动的内容.
我尝试了快速启动消息传递firebase示例,并且有一个onMessageReceived()方法,但只有在应用程序位于前台时它才有效.应用程序在后台运行时是否会执行某些操作?GCM可以通过直接启动广播接收器的活动意图来做我喜欢的事情,广播接收器在收到通知时调用.
Die*_*ini 52
要通过FCM自动打开应用程序,您需要使用a data-message,这可以保证始终调用该FirebaseMessagingService.onMessageReceived()方法.
然后,您可以在.onMessageReceived()方法中添加逻辑以启动首选活动.
警告:对于大多数应用程序来说,在没有任何用户交互的情况下启动UI是一种非常糟糕的做法!请在此处阅读MarkG答案: 如何从服务启动活动?
[...]中断用户当前正在做的事情被认为是糟糕的设计形式,尤其是那些应该在后台运行的东西.
因此,当用户决定调查时,您应该考虑使用通知[...]启动所需的活动.[...]
FCM与GCM的工作方式类似,可以接收两种类型的消息:
{"notification" : { "body" : "hello world"}}FirebaseMessagingService.onMessageReceived()如果应用程序已在前台,则会调用这些消息.
{"data" : { "key1" : "value1"}}FirebaseMessagingService.onMessageReceived(),click_action 是通知有效负载的参数,因此它适用于显示消息.
指示与用户单击通知关联的操作.
如果设置了此选项,则会在用户单击通知时启动具有匹配意图过滤器的活动.
https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
Kat*_*ato 17
看起来本指南的这一部分是背景应用程序难题的关键:
接收消息
使用扩展 FirebaseMessagingService的服务.您的服务应覆盖为大多数消息类型提供的回调,但以下情况除外:onMessageReceived当您的应用在后台时发送通知.
在这种情况下,通知将传递到设备的系统托盘.用户点按通知会默认打开应用启动器.具有通知和数据有效负载的消息.
在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递.
从本质上讲,当应用程序背景化时,它不会真正响应或在此时运行.因此,消息将传递到系统托盘.但是,就在下面,解释了解决方案.
如果要打开应用程序并执行特定操作[在后台运行时],请在通知有效内容中设置click_action并将其映射到要启动的活动中的意图过滤器.例如,将click_action设置 为OPEN_ACTIVITY_1以触发如下所示的intent过滤器:
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我总结了这里的步骤,希望它有所帮助
步骤1
关注FCM用户指南.通过从Firebase控制台推送消息,确保一切正常.
第2步
更改自定义FirebaseMessagingService类,如下所示:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
startActivity(new Intent(this, SplashActivity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
现在再次使用Firebase控制台推送消息,您会发现onMessageReceived只有当您的应用位于前台时才会触发.因为Firebase控制台只能发送Notification message.为了发送Data message,我们需要第3步.
第3步
输入以下参数:
url: https://fcm.googleapis.com/fcm/send
method: POST
Raw header:
Content-Type: application/json
Authorization:key=YOUR_SERVER_KEY
Raw payload:
{
"to" : "YOUR_DEVICE_FCM_TOKEN",
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
}
Run Code Online (Sandbox Code Playgroud)
您可以在Firebase控制台>设置窗格>云消息传递选项卡中使用YOUR_SERVER_KEY
YOUR_DEVICE_FCM_TOKEN已FirebaseInstanceId.getInstance().getToken()开启onTokenRefresh()
注意
在没有用户交互的情况下启动UI是糟糕的用户体验,您可能需要将启动活动替换为启动服务或后台的某些内容.我只是将活动用于测试目的,因此它比服务更具视觉效果.感谢@ 2ndgab介绍Google Advanced REST客户端工具.
| 归档时间: |
|
| 查看次数: |
53416 次 |
| 最近记录: |