为了账号安全,请及时绑定邮箱和手机立即绑定

在收到Firebase通知时打开应用(FCM)

/ 猿问

在收到Firebase通知时打开应用(FCM)

莫回无 2019-09-21 15:03:05

我想在收到通知时自动打开应用程序,Firebase和新的FCM通知可能吗?

我知道我可以设置click_action,但这仅用于自定义将在通知点击时开始的活动,我需要在收到通知时将自动开始的活动。

我尝试了快速入门消息传递Firebase示例,并且有onMessageReceived()方法,但仅在应用程序位于前台时才有效。当应用程序在后台运行时,是否还会执行某些操作?GCM可以通过直接从广播接收器启动活动意图(在收到通知时称为该意图)来执行我想要的操作。


查看完整描述

3 回答

?
慕莱坞5435954

快速回答:

要通过FCM自动打开应用程序,您需要使用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


查看完整回答
反对 回复 2019-09-21
?
拉丁的传说

指南的这一部分似乎是困扰后台应用程序的关键:


接收消息

使用扩展 FirebaseMessagingService的服务。您的服务应覆盖为大多数消息类型提供的回调,但以下情况除外:onMessageReceived


当您的应用在后台运行时发出的通知。

在这种情况下,通知将传递到设备的系统托盘。用户点击通知会默认打开应用启动器。


具有通知和数据有效负载的消息。 

在这种情况下,通知将传递到设备的系统托盘,而数据有效载荷将在启动器活动的意图之外传递。


本质上,当应用程序后台运行时,它并没有真正响应或正在运行。因此,消息将传递到系统托盘。但是,仅在下面说明解决方案。


如果要打开应用程序并执行特定操作(在后台运行),请在通知有效负载中设置click_action并将其映射到要启动的活动中的意图过滤器。例如,将click_action设置 为OPEN_ACTIVITY_1以触发意图过滤器,如下所示:


<intent-filter>

  <action android:name="OPEN_ACTIVITY_1" />

  <category android:name="android.intent.category.DEFAULT" />

</intent-filter>


查看完整回答
反对 回复 2019-09-21
?
MMMHUHU

我在这里总结了步骤,希望对您有所帮助


第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));

}

}

现在再次使用Firebase控制台推送消息,您将发现onMessageReceived只有在应用程序处于前台时才会触发。因为Firebase控制台只能发送Notification message。为了发送Data message,我们需要步骤3。


步骤3


安装Google Advanced REST客户端


在参数下面输入:


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"

   },

 } 

您可以在Firebase控制台>“设置”窗格>“云消息”标签中找到YOUR_SERVER_KEY


YOUR_DEVICE_FCM_TOKEN已FirebaseInstanceId.getInstance().getToken()开启onTokenRefresh()


注意


在没有用户交互的情况下启动UI是糟糕的UX,您可能需要将启动活动替换为启动服务或其他后台操作。我仅将活动用于测试目的,因此它比服务更直观。感谢@ 2ndgab向您介绍Google Advanced REST客户端工具。


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信