首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在构建时使用占位符和nav组件创建Deeplink

如何在构建时使用占位符和nav组件创建Deeplink
EN

Stack Overflow用户
提问于 2019-08-14 14:04:08
回答 2查看 1.5K关注 0票数 12

我们有一个使用Deeplinks的应用程序。我们还使用了Android导航组件。

目前,我们在out navigation.xml文件中配置Deeplinks,这很好,但是我们现在需要能够在构建时根据set变量添加另一个Deeplink。

  • 我尝试在build.gradle中设置字符串资源,并在navigation.xml中引用这些资源。
  • 我还尝试在navigation.xml中设置占位符,但无法替换它,因为它已经被解析为URI。
  • 我还尝试在Manifest中设置带有占位符的直接意图过滤器,这将有效,但我们失去了导航组件的良好路由。

目前,我们以下列形式在out navigation.xml文件中配置Deeplinks:

代码语言:javascript
运行
复制
 <deepLink
            android:autoVerify="true"
            app:uri="foo.bar.baz/pull/{quxArg}/{quuxArg}" />

我们现在需要能够基于set在构建时创建额外的Deeplink。

示例:

DEEPLINK_ENVAR = "replacement.com"

Build.gradle:

代码语言:javascript
运行
复制
manifestPlaceholders = [deeplink:DEEPLINK_ENVAR]

navigation.xml:

代码语言:javascript
运行
复制
<deepLink
            android:autoVerify="true"
            app:uri="${deeplink}/pull/{quxArg}/{quuxArg}" />

请注意以上内容不起作用。

如果这只是清单中的意图过滤器,我们可以使用Manifest占位符来完成这个任务,并在app.gradle中设置它们。然而,在navigation.xml中设置的Deeplinks被解析为URI,并在替换它们之前销毁任何占位符。

有没有人尝试过类似的东西?我试图避免运行预构建脚本来直接模板导航文件。

期望的结果:

我希望能够在构建时添加一个附加的深度链接(实际上是4到不同的目的地),同时使用Android导航组件。

EN

回答 2

Stack Overflow用户

发布于 2019-08-27 06:03:50

不知道我是否完全理解但是..。您应该能够将几个deepLinks添加到一个操作中。如果您要求它重定向到另一个片段,您可以尝试使用"deepLinkTokenCheckFragment“或其他东西来接收deepLink,然后从其中提取信息,并将用户重定向到您希望他们转到的页面。

我有一个应用程序可以做这样的事情

代码语言:javascript
运行
复制
    private fun extractAction() {
        if (ACTION_VIEW == parent.intent.action) {
            // Collect information to know where to redirect here.....
            val actionType = parent.intent.data
                ?.toString()
                ?.substringBefore('?')
                ?.substringAfterLast('/')
            action = get information or token from the url here //?.substringBefore('?') ?.substringAfterLast('/')
            when (action) {
                "change_password" -> go to change password screen
                "change email" -> go to change email screen
                "go to other" -> go to other screen
            }
        }
    }

这只是我怎么做的一个想法。

以同样的方式,您可以检查构建或者任何您需要比较的东西,而不是检查一些令牌。

票数 0
EN

Stack Overflow用户

发布于 2019-08-27 14:04:50

NavDestination:

代码语言:javascript
运行
复制
public final void addDeepLink (String uriPattern)

添加到此目标的深度链接。发送到NavController.handleDeepLink(Intent)NavController.navigate(Uri)的匹配Uris将触发导航到此目的地。

https://developer.android.com/reference/androidx/navigation/NavDestination.html#addDeepLink(java.lang.String)

这听起来对你有帮助。我自己还没试过呢。

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

https://stackoverflow.com/questions/57496296

复制
相关文章

相似问题

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