【问题标题】:NavDeepLinkBuilder destination ignored when app not in foreground当应用程序不在前台时忽略 NavDeepLinkBuilder 目标
【发布时间】:2019-10-01 06:04:23
【问题描述】:

我正在使用 NavDeepLinkBuilder 为推送通知生成待处理意图,以在特定目的地打开应用程序。

        return NavDeepLinkBuilder(this)
                .setComponentName(MainActivity::class.java)
                .setGraph(R.navigation.main_navigation)
                .setDestination(destinationId)
                .setArguments(args)
                .createPendingIntent()

当应用程序处于前台时,通知将导航到由 NavDeepLinkBuilder 构建的待处理 Intent 中设置的目标。 ????

但是,当应用程序不在前台时,通知只会导航到 MainActivity 并忽略在 NavDeepLinkBuilder 中设置的目标。 ????

注意:待处理的意图和通知内置于扩展 FirebaseMessagingService 的服务中。

【问题讨论】:

  • 我看到了同样的行为。我不知道这是导航组件错误还是通知中的某些内容。
  • @YellowJ 抱歉,我无法 100% 回忆我的解决方案,并且我无法再访问代码。但我记得它与 Activity LauchMode 属性有关。如果您遇到类似的问题,也许您可​​以尝试调查一下?很抱歉没有提供太多帮助。

标签: android android-notifications android-architecture-navigation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    默认情况下,用户点击通知会打开应用启动器。在这些情况下,通知会传递到设备的系统托盘,而数据负载会在启动器 Activity 的 Intent 的附加部分中传递。

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

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

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

            <intent-filter>
                <action android:name=".HomeActivity" />
    
                <category android:name="android.intent.category.DEFAULT" />
    
                ... Rest of your actions
            </intent-filter>
    

    这使我可以在 HomeActivity

    中提取通知信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多