Firebase API 从后端推送有效负载:
{
"registration_ids": [
"IKSiok9Zpip5cDcebQ67wc7TnpDuhMAFJm1xdGGI44s48JbXEu5iYa"
],
"notification": {
"body": "Push Test Facility Category",
"title": null,
"icon": "myicon",
"sound": "mySound",
"vibrate": 1,
"Badge": 1,
"click_action": "FCM_PLUGIN_ACTIVITY"
},
"data": {
"message": "Push Test Facility Category",
"title": null,
"b": "22",
"id": "2",
"category_name": "Restaurants",
"h": "1",
"p": 1,
"type": "2"
}
}
fcm.service.ts
fcmListeners() {
this.firebase.onNotificationOpen().subscribe(async (data: any) => {
if (data.tap) {// when user tapped the background notification
} else { // Received in foreground
}
});
}
你能告诉我为什么当我使用上述有效负载并且应用程序在后台时应用程序无法打开吗?这是安卓设备上的行为。但是iOS设备上没有问题。
如果我使用 firebase 控制台云消息(即仪表板),那么那里没有问题。 即它即使在 Android 设备上的后台也能打开应用程序。有什么线索吗?
注意:我在这里使用火力基地插件。
问题是FCM_PLUGIN_ACTIVITY
活动可能未在AndroidManifest.xml
中定义,或者如果在那里定义,则可能无法正确实现。
若要解决此问题,请不要在通知的有效负载中指定click_action
- 默认情况下,通知将使用MainActivity
,这将打开应用。
{
"registration_ids": [
...
],
"notification": {
...,
"click_action": "FCM_PLUGIN_ACTIVITY" // <--- Remove this
},
"data": {
...
}
}
上面标记为答案的回复可能有效,但这不是在Android上做事的理想方式。 当android查找后端推送通知的"ClickAction"中指定的意图并且找不到时,会出现上述问题。 这将导致 android 不知道使用什么活动来处理您在通知中指定的意图,并且您将在输出窗口中看到此消息。
通知挂起的意图已取消
处理此问题的最佳方法是在通知中精确地使用"click_action"的字符串值(上面我们有"FCM_PLUGIN_ACTIVITY") 然后,如果是清单文件,请在"默认"类别前面为此意向添加操作筛选器。如下图所示
<activity
.... >
....
<intent-filter>
<action android:name="FCM_PLUGIN_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果你在Xamarin.Android中,有一种更简单的方法可以做到这一点, 在您的活动上方,只需添加 Intentfilter 标志,并精确指定您的 Intent 名称:
[IntentFilter(new []
{
"FCM_PLUGIN_ACTIVITY"
},
Categories=new[]
{
global::Android.Content.Intent.CategoryDefault
})]
public class MainActivity : ....
如本评论所述。
并且还像这样定义您的活动
<activity
android:name=".NotificationPushTapedActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
android:taskAffinity=""
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="CLICK_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>