首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FCM背景通知不适用于android系统

FCM背景通知不适用于android系统
EN

Stack Overflow用户
提问于 2022-01-05 13:50:24
回答 1查看 843关注 0票数 4

我已经尝试设置FCM通知来使用deeplinks。如果应用程序在前台,那么我们就可以使用FirebaseMessaginService处理通知,然后一切都正常工作。当应用程序被杀死时,问题就出现了,而Firebase提供的后台服务显示了通知。我只是想不出一个办法让deeplinks发挥作用。当前的解决方案是在附加程序中添加深度链接,并在应用程序启动时检查其意图。但是最好跳过这一点,让通知传播正确的deeplinks。

这是活动的清单。Deeplinks是由<nav-graph .... />上升的

代码语言:javascript
运行
复制
        <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>

当然,服务的设置

代码语言:javascript
运行
复制
        <service
        android:name=".usecase.notifications.OscaPushService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>

这对FCM的设置来说应该足够了,对吧?(当然,也设置了键)

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

代码语言:javascript
运行
复制
                "androidNotification":{
                "click_action": "example://infobox/"
            },

然后点击通知,什么都不会发生。ActivityTaskManager将打印以下消息,仅此而已:

代码语言:javascript
运行
复制
I/ActivityTaskManager: START u0 {act=example://infobox/ flg=0x14000000 pkg=com.*****.*****.** (has extras)} from uid 10374 (replaced pkg with stars)

这与使用亚行shell命令启动深度链接不同。

代码语言:javascript
运行
复制
adb shell am start -d example://infobox/   

会打印

代码语言:javascript
运行
复制
I/ActivityTaskManager: START u0 {dat=citykey://infobox/ flg=0x10000000 cmp=com.****/com.******} from uid 2000

以这种方式启动深度链接实际上是可行的。知道为什么会这样吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-12 14:34:40

从原木上看,有一个主要的区别。一个工作的有“数据”,这是一个从亚行开始。不工作的人有一个“动作”,这与“数据”不同。您需要在"click_action“中传递”数据“而不是"androidNotification”。基本上,"click_action“用于Intent.setAction(),而您指定的adb命令则用于Intent.setData()。那两个人不一样。

无论如何,您可能应该对这些应用使用数据通知,这将触发您的服务,即使您的应用程序处于前台,或者它已被杀死。然后你可以直接从应用程序创建你的通知。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70594016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档