带有导航组件的 Android 深层链接无法按预期工作

Posted

技术标签:

【中文标题】带有导航组件的 Android 深层链接无法按预期工作【英文标题】:Android deeplink with navigation component not working as expected 【发布时间】:2020-05-30 01:50:47 【问题描述】:

希望你们一切都好。

我有一个小问题;

我正在使用导航组件,单个活动多个片段。我对深度链接有一个小问题。

我在 manifest 中设置了 <nav-graph/> 并设置了 launcherMode="singleTask",

我在导航图中设置了<deeplink/>

我已经在片段中处理了 Intent Extras。

我的流程是;

    用户点击忘记密码,填写编辑文本然后请求深度链接邮件。工作正常 用户点击电子邮件中的深层链接并选择应用程序,然后自动导航到 CreatePasswordFragment(深层链接目标片段)&(我可以在此处处理 args,也可以正常工作)

问题是;有时如果应用程序在后台打开(例如我请求邮件然后按下主页按钮)并且当我单击深度链接时,最后一个片段运行而不是目标片段 CreatePasswordFragment 关于可能导致问题的任何想法?

谢谢!

导航版本:2.2.0

电子邮件附带的深层链接

 http://myurl/forgot-password/?key=sodmoq9wwdW1djkssdqMEdqlsp

导航图

 <deepLink android:id="@+id/deepLink"
    app:uri="http://myurl/forgot-password/?key=key"/>
 <argument
    android:name="key"
    app:argType="string" />

Android 清单

 <activity 
    ...
    android:launchMode="singleTask">
 <nav-graph android:value="@navigation/navigation_main" />
 </activity>`

反编译清单

 <intent-filter>

     <action android:name="android.intent.action.VIEW" />

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

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

     <data android:scheme="http" />

     <data android:host="myurl" />

     <data android:path="/forgot-password/" />
 </intent-filter>

【问题讨论】:

你解决了这个问题了吗? @mrJoe 很遗憾没有。 我尝试通过捕获意图手动处理深层链接,然后通过调用 findNavController().navigate() 显式导航到请求的片段,但之后我无法既不通过按返回键也不通过调用 navigate() 方法从这个新片段导航到另一个片段。您是否为此使用了一些解决方法? @MithatSinanSarı 运气好吗? @SoH 不幸的是,没有。我们现在手动处理。 【参考方案1】:

晚会有点晚,但未来参考引用 Ian Lake(导航组件的技术负责人)的回答:

NavController 不会覆盖您 Activity 中的方法,因此如果您坚持使用 android:launchMode="singleTask",则需要手动调用它。

这里是源链接:

https://***.com/a/61569940/4408458

【讨论】:

以上是关于带有导航组件的 Android 深层链接无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 导航组件中检索目的地的深层链接

带有推送通知的深层链接 - FCM - Android

使用深层链接导航 | MAD Skills

带有颤动的 Firebase 动态链接:深层链接 URL 未打开应用程序

Parcelables 不支持默认值。 Android 导航深层链接参数

分支测试/实时链接未按预期工作