如何在 Android 应用中处理 Firebase 云消息传递的数据有效负载(包括通知)?



我有一个关于接收包含通知和数据有效负载的 Firebase 消息的问题。该文件称,数据将"在意图的额外内容"中到达。

我的问题是哪个意图(或活动)?将应用程序切换到后台时,将出现一个用户离开的屏幕。那么,我是否需要尝试检索应用中所有意向/活动的额外内容?

一旦应用进入前台,我在哪里以及如何实际编码以检索数据有效负载?

谢谢!

添加:

我的意思是,我已经有 10+ 个活动,当应用程序完成后还会有更多活动。那么,我是否必须检索所有活动的附加内容才能查看应用是否已使用任何推送数据有效负载重新打开?

在问题中链接的文档中,它指出:

同时包含通知和数据有效负载(后台和 前景。在这种情况下,通知将传递到 设备的系统托盘,数据有效负载在附加内容中提供 启动器的意图 活动

启动器活动在清单中使用类别 LAUNCHER 指定。例如:

<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

您可以覆盖默认行为以指定其他活动。 在消息通知数据中,添加具有操作字符串值的属性click_action。 然后创建活动,并在清单中为其提供与操作匹配的意向筛选器。 例如,使用消息:

{
"to": "dhVgCGVkTSR:APA91b...mWsm3t3tl814l",
"notification": {
"title": "New FCM Message",
"body": "Hello World!",
"click_action": "com.example.FCM_NOTIFICATION"
},
"data": {
"score": "123"
}
}

按如下方式定义意图过滤器:

<activity android:name=".MyFcmNotificationActivity">
<intent-filter>
<action android:name="com.example.FCM_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

为了澄清文档,数据有效负载不会在收到消息时传递到活动;当用户单击通知时,数据负载会传递。

您必须扩展FirebaseMessagingService类。

并重写onMessageReceived方法。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
// TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
if (/* Check if data needs to be processed by long running job */ true) {
// For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
scheduleJob();
} else {
// Handle message within 10 seconds
handleNow();
}
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// 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.
}

请确保在清单中注册服务。

相关内容

  • 没有找到相关文章

最新更新