具有(深层)链接的包含路径和查询参数的打开应用程序

问题描述 投票:0回答:1

给出了这三个网址:

1) https://example.com

2) https://example.com/app

3) https://example.com/app?param=hello

假设我在gmail-app中收到包含这三个链接的邮件,则需要以下行为:

1) Should not open the app

2) Should open the app

3) Should open the app and extract the parameter's value

我到目前为止所取得的成就:

    <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:host="example.com"
            android:pathPrefix="/app"
            android:scheme="https" />
    </intent-filter>

此代码段在1)2)的情况下工作正常:第一个网址未在应用中打开,第二个网址未打开。但是可惜我没有通过应用程序打开第三个链接。

[我还尝试了pathpathPrefixpathPattern的一些不同变体,但我没有运气实现这三种给定的行为。

所以我需要您的帮助,您能否提供满足给定要求的代码段或我可以测试的一些提示?

更新:

android:pathPrefix更改为android:pathPattern现在可以正常工作:仅在案例2)3)中显示系统的意图选择器,案例1)直接打开浏览器。

但是

我想额外实现的是在进入应用程序或触发意图选择器之前检查特定参数。仅当参数param保持值为hello而不是goodbye时,才应发生这种情况。在pathPattern-属性内使用某种正则表达式是否可行?

android deep-linking android-deep-link
1个回答
0
投票

我希望此解决方案可以帮助您解决任务。

Manifest.xml

[Manifest.xml]中不包含android:pathPrefix="/app"

<activity android:name=".YourActivity"> <intent-filter android:label="@string/app_name"> <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" android:host="example.com"/> </intent-filter> </activity>
在YourActivity.kt中检查Intent数据以执行进一步的操作。

注意:

代码用Kotlin编写 val action = intent.action val data = intent.dataString if (Intent.ACTION_VIEW == action && data != null) { if (data.equals("http://example.com")) { Toast.makeText(this, "contains only URL", Toast.LENGTH_SHORT).show() } else if (data.contains("http://example.com/") && !data.contains("?")) { Toast.makeText(this, "contains URL with pathPrefix", Toast.LENGTH_SHORT).show() } else if (data.contains("http://example.com/") && data.contains("?")) { Toast.makeText(this, "contains URL with data", Toast.LENGTH_SHORT).show() } } else { Toast.makeText(this, "Intent from Activity", Toast.LENGTH_SHORT).show() }
© www.soinside.com 2019 - 2024. All rights reserved.