我们如何确保深层链接始终打开我们自己的原生应用,而不是打开Chrome浏览器

时间:2017-04-16 20:24:12

标签: android

目前,我的应用程序中有深层链接集成

<activity android:name="org.yccheok.jstock.gui.news.NewsListFragmentActivity"
    android:theme="@style/Theme.JStock.Toolbar.Transparent.Light"
    android:windowSoftInputMode="stateAlwaysHidden" >
    <intent-filter>
        <!-- Sets the intent action to view the activity -->
        <action android:name="android.intent.action.VIEW" />
        <!-- Allows the link to be opened from a web browser -->
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Allows the deep link to be used without specifying the app name -->
        <category android:name="android.intent.category.DEFAULT" />

        <!-- Accepts URIs that begin with "http://jstock.co/a/news” -->
        <data android:scheme="http"
            android:host="jstock.co"
            android:pathPrefix="/a/news" />
    </intent-filter>
</activity>

当用户点击具有以下格式的已接收链接时

http://jstock.co/a/news?code=XOM&symbol=Exxon+Mobil+Corpo

假设这是安装了应用的用户。将显示以下屏幕

enter image description here

如果用户选择本机应用程序JStock,将启动本机应用程序,他将获得有用的信息。

但是,如果用户选择chrome并单击 JUST ONCE ,则它不是很有用。最糟糕的是,如果用户选择chrome并点击始终,本机应用将永远无法通过深层链接启动。

我想知道,有什么好方法可以避免这种问题?我们如何确保深层链接始终打开我们自己的原生应用而不是打开Chrome浏览器?

感谢@CommonsWare。我已将AndroidManifest.xml更改为

<activity android:name="org.yccheok.jstock.gui.news.NewsListFragmentActivity"
    android:theme="@style/Theme.JStock.Toolbar.Transparent.Light"
    android:windowSoftInputMode="stateAlwaysHidden" >
    <intent-filter android:autoVerify="true">
        <!-- Sets the intent action to view the activity -->
        <action android:name="android.intent.action.VIEW" />
        <!-- Allows the link to be opened from a web browser -->
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Allows the deep link to be used without specifying the app name -->
        <category android:name="android.intent.category.DEFAULT" />

        <!-- Accepts URIs that begin with "http://jstock.co/a/news” -->
        <data android:scheme="http"
            android:host="jstock.co"
            android:pathPrefix="/a/news" />

        <!-- Accepts URIs that begin with "https://jstock.co/a/news” -->
        <data android:scheme="https"
            android:host="jstock.co"
            android:pathPrefix="/a/news" />
    </intent-filter>
</activity>

我还确保可以使用以下内容访问https://jstock.co/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "org.yccheok.jstock.gui",
    "sha256_cert_fingerprints":
    ["F4:6B:DF:4F:21:74:72:2F:88:E0:4C:09:2A:0C:00:C8:9A:16:D0:C6:DB:9C:BC:46:17:93:52:F4:35:AE:DB:98"]
  }
}]

仍然点击http://jstock.co/a/news?code=XOM&symbol=Exxon+Mobil+Corpo,仍然让用户选择Chrome。

我使用Android 6测试过,使用已发布的密钥编译APK。

我有什么遗漏的吗?

1 个答案:

答案 0 :(得分:1)

根据the documentation设置assetlinks.json文件并要求验证。在Android 6.0及更高版本中,如果您的assetlinks.json可以找到并经过验证,则您的应用将用于<intent-filter>处理的网址。