FCM后台通知深度链接在安卓上无法工作。

5
我尝试了设置FCM通知以与深度链接一起使用。如果该应用程序在前台,则可以使用FirebaseMessaginService处理通知,然后一切正常工作。问题出现在应用程序被杀死时和来自Firebase的后台服务显示通知时。我只是找不到一种方法让深度链接直接生效。当前的解决方案是将deeplink放入extras并在应用程序启动时检查intent。但是更好的解决方法是跳过此步骤,让通知传播正确的deeplink。
这是活动清单的清单。 Deeplinks通过实现。
        <activity
        android:name="com.*****.******.view.main.MainActivity"
        android:exported="true"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <nav-graph android:value="@navigation/services_graph" />
        <nav-graph android:value="@navigation/infobox_graph" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

当然,服务的设置也是必须的。
        <service
        android:name=".usecase.notifications.OscaPushService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>

这些应该足以进行 FCM 设置,对吧?(当然,密钥也已设置)

现在我尝试使用以下有效负载发送深链接:

                "androidNotification":{
                "click_action": "example://infobox/"
            },

然后在点击通知后什么都不会发生。 ActivityTaskManager 将打印以下消息,就只有这样:

I/ActivityTaskManager: START u0 {act=example://infobox/ flg=0x14000000 pkg=com.*****.*****.** (has extras)} from uid 10374 (replaced pkg with stars)

这与使用adb shell命令启动deeplink不同。
adb shell am start -d example://infobox/   

将会打印出来

I/ActivityTaskManager: START u0 {dat=citykey://infobox/ flg=0x10000000 cmp=com.****/com.******} from uid 2000

以这种方式启动深度链接将实际上起作用。有任何想法为什么会发生这种情况?

你找到解决方案了吗?我也遇到了同样的问题。 - Tristian
1个回答

0
根据日志判断,有一个主要的区别。那个能工作的有"data",这是你用adb启动的那个。那个不能工作的有一个"action",不同于"data"。你需要在"androidNotification"中传递"data"而不是"click_action"。基本上,"click_action"是用于Intent.setAction(),而你指定的adb命令使用的是Intent.setData()。这两者是不同的。
无论如何,你应该使用数据通知,即使你的应用程序在前台或被杀死,它也会触发你的服务。然后你可以直接从应用程序中正确地创建你的通知。

是的,我明白它们的区别,我只是想知道是否有一种方法可以发送数据通知。因为我找不到任何相关信息。 - MONK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接