应用程序不在前台时,NavDeepLinkBuilder目标被忽略。

11
我正在使用NavDeepLinkBuilder生成待处理的意图(Pending Intent),以便通过推送通知在特定目的地打开应用程序。
        return NavDeepLinkBuilder(this)
                .setComponentName(MainActivity::class.java)
                .setGraph(R.navigation.main_navigation)
                .setDestination(destinationId)
                .setArguments(args)
                .createPendingIntent()
当应用程序在前台时,通知将导航到由NavDeepLinkBuilder创建的挂起意图中设置的目标位置。
但是,当应用程序不在前台时,通知只会导航到MainActivity,并忽略NavDeepLinkBuilder中设置的目标位置。
备注:挂起意图和通知是在扩展FirebaseMessagingService的服务中构建的。

我看到了相同的行为。我无法确定这是导航组件错误还是通知中的某些问题。 - Marco RS
@YellowJ 抱歉,我无法百分之百地回忆起我的解决方案,而且我也无法再访问代码了。但是我记得它与 Activity LauchMode 属性有关。如果你遇到类似的问题,也许可以尝试研究一下这个?抱歉没有太多帮助。 - oznecro
2个回答

1
是的,如果您使用Firebase,您可能会遇到此行为。问题在于当您的应用程序处于后台时,您的onMessageRecived()方法永远不会触发。在这些情况下,您将在MainActivity()而不是onMessageRecived()中接收到您的Firebase消息。只需像我在编辑块中描述的那样,在onCreate()方法中检查您的意图即可。问题

0

当应用程序被置于后台时,通知点击的行为会有所不同。

用户点击通知默认会打开应用程序启动器。在这些情况下,通知会传递到设备的系统托盘,并且数据负载会在您的启动器活动的意图的额外信息中传递。

请参见:https://firebase.google.com/docs/cloud-messaging/android/receive#backgrounded

您最终需要查看主要活动的意图附加信息以获取通知信息。在某些情况下,如果您向推送通知添加了click_action,则需要将其添加到您的意图过滤器列表中。

我将以下意图过滤器操作添加到我的主要活动意图过滤器块中:

        <intent-filter>
            <action android:name=".HomeActivity" />

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

            ... Rest of your actions
        </intent-filter>

这使我能够在我的HomeActivity中提取通知信息。


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