9

Android M通过在 Web 服务器上创建一个特殊的assetlinks.json来将链接处理委托给移动应用程序,从而增加了对应用程序链接的支持。

例如,以下是此类文件的内容:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.costingtons.app",
    "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:"
     "A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

目前,该关系被定义为common.handle_all_urls这意味着任何 url 都将被路由到应用程序。

我希望该应用程序打开特定路线,例如https://costingtons.com/products/a-product将在应用程序中打开,但https://costingtons.com将打开网络版本。

Apple Universal Links 类似的配置文件可以定义要在应用程序中打开的路径,并且语法支持模式匹配等/products/*

有没有办法用 Android 中的 App Links 做类似的事情?

4

3 回答 3

7

assetlinks.json 文件指定允许该特定应用打开所有 URL,但应用本身(通过其 AndroidManifest 中的意图过滤器)可能更具限制性,因此它仅打开产品链接,而不是一般网站链接。

此外,即使针对特定 URL 调用了意图过滤器,接收者仍然可以决定不处理它,将其留给下一个处理程序(通常是浏览器)。(也许您希望应用程序在蜂窝网络上处理链接,但让浏览器在 wifi 上处理它们)。

于 2016-03-07T12:48:03.717 回答
6

据我所知,无法设置assetlinks 文件来确定哪些路径可以/应该打开应用程序(您可以使用iOS AASA 文件的方式)。

但是,由于 Android 使用 Intent Filters,您可以使用它们来限制应该打开应用程序的路径。根据之前的评论,assetlinks 文件仅说明哪些 URL可以打开应用程序。由应用程序定义应该打开应用程序的 URL。

因此,对于您上面的示例,您需要为您的一项活动定义一个意图过滤器,它看起来像:

<intent-filter android:autoVerify="true">
    <category android:name="android.intent.category.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <!-- Only accept URLs that look like https://costingtons.com/products/* -->
    <data
        android:scheme="https"
        android:host="costingtons.com"
        android:pathPrefix="/products/" />
</intent-filter>

我发现的最大限制是无法排除某些路径(即不是带有 xyz 前缀的 URL),因此您必须想出一套详尽的意图过滤器来匹配您的所有 URL一定要允许进入应用程序。

于 2017-07-21T22:50:06.337 回答
0

@zmarties 是对的,您唯一需要做的就是确保您的 Manifest.xml 配置为 supporthttps://yourdomain.com/product/*而不是https://yourdomain.com/otherthingshttps://yourdomain.com/otherthings然后将打开 Web 浏览器。

如何证明这一点?

ASOS 和我知道的大多数电子商务应用程序都启用了应用程序索引。

安装 ASOS Android 应用程序后:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "https://www.asos.com/men/shoes-boots-trainers/cat?cid=4209"

将在他们的 Android 应用程序中显示一个类别屏幕,

而以下将打开网络浏览器:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "https://www.asos.com/dummycrazyurl"
于 2019-09-18T02:50:32.880 回答