App Link:定义、工作原理与配置指南

作者: IT Sectr 发布日期: 2026-05-14 阅读时间: 9 分钟

App Link是Android(Android 6.0+)的一种机制,可以自动在已安装的应用中打开网页链接,跳过选择对话框。该术语由Google于2015年随Android 6.0 Marshmallow一起引入。根据Android Developers,App Link使用Digital Asset Links——通过服务器上的文件进行加密验证,确认域名属于应用开发者。

要点

  • App Link——无需选择对话框即可自动打开应用的HTTPS链接
  • Digital Asset Links——服务器上的assetlinks.json JSON文件,验证域名与应用之间的关联
  • 证书的SHA256指纹——验证的关键元素,将开发者与域名关联起来
  • Intent Filter——声明应用处理哪些链接的Android组件
  • 安全性——App Link消除了“在应用或浏览器中打开”对话框,提高转化率

App Link(Android App Link)是一种标准的HTTPS链接,在Android设备上点击时,会自动打开已安装的应用,而无需显示浏览器与应用之间的标准选择对话框。Google在Android 6.0(API 23)中引入App Link作为“选择对话框”问题的解决方案,该对话框因额外点击和用户困惑而降低了deep link的转化率。

关键创新:验证。Android通过Digital Asset Links API检查域名是否真正属于应用开发者。Google Play Store在发布时验证App Link,如果验证失败可以拒绝更新。这使得App Link比Custom URL Scheme更安全:没有其他应用可以拦截指向您域名的链接。

Digital Asset Links是一个开放协议,Google不仅将其用于App Link,还用于在搜索结果、Google Assistant和Smart Lock for Passwords中将网站与应用关联。该协议基于加密验证:在assetlinks.json中指定应用签名证书的SHA256指纹,从而排除伪造的可能性。

App Link的工作过程包括三个阶段:Digital Asset Links验证、通过Intent Filter处理和自动重定向。每个阶段都是必需的。如果验证失败,Android会显示选择对话框——这样的deep link像普通链接一样工作,但没有自动重定向的优势。

Digital Asset Links(assetlinks.json)

Asset Links是放置在服务器上https://domain/.well-known/assetlinks.json地址的JSON文件。该文件包含一个对象数组,包含以下字段:relation(描述关系类型的字符串数组)、target(包含应用的namespace和package_name,以及sha256_cert_fingerprints——签名证书SHA256指纹数组的对象)。

json
// assetlinks.json — App Link的最小配置
[{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
        "namespace": "android_app",
        "package_name": "com.example.app",
        "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
        ]
    }
}]

SHA256指纹从用于签署应用的证书中获取。对于debug构建,使用标准的Android debug证书;对于release,使用Google Play Console中的证书或您自己的证书。重要提示:更改签名证书时(例如切换到App Signing by Google Play),必须更新服务器上的assetlinks.json,否则App Link将停止工作。

Intent Filter与验证

Android在首次点击链接时检查App Link。系统从服务器加载assetlinks.json,比较package_name和SHA256指纹与已安装应用的证书。如果数据匹配,Android将Intent Filter标记为已验证,此后所有指向该域名的链接将自动打开,无需对话框。

xml
// AndroidManifest.xml — App Link的Intent Filter
<activity
    android:name=".ui.ProductActivity"
    android:exported="true">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="example.com"
            android:pathPrefix="/product" />
    </intent-filter>
</activity>

autoVerify="true"是必需属性,指示Android检查assetlinks.json。没有此属性,Intent Filter将不会被验证,App Link也不会被激活。Android支持在一个Activity中使用多个Intent Filter——针对不同的主机。系统分别检查每个主机。验证是异步执行的,首次跳转可能需要最多20秒。

自动重定向(Automatic Redirect)

成功验证后,Android会在点击任何与已验证Intent Filter匹配的链接时自动打开应用。用户看不到选择对话框——应用立即打开。如果应用未安装,链接会在浏览器中打开(像普通网页一样)。这是理想的用户体验:无需多余操作的无缝跳转。

重要提示:自动重定向仅适用于HTTPS方案。App Link不支持HTTP(不安全的协议)。如果用户手动打开HTTP链接(例如从短信),Android不执行验证并显示选择对话框。建议为所有指向应用的链接使用HTTPS,并在服务器上配置HTTP到HTTPS的重定向。

App Link是Android上Deep Link的演进,而非替代品。它们之间的区别是根本性的。普通Deep Link(Custom URL Scheme)通过具有自定义方案(myapp://)且不带autoVerify的Intent Filter工作。Android不检查应用是否与此方案真正关联——任何应用都可以注册myapp://并拦截链接。

App Link解决了Deep Link的三个问题。第一:安全性——通过Digital Asset Links进行的验证排除了链接拦截。第二:用户体验——没有选择对话框可将目标操作的转化率提高20-40%。第三:索引——Google索引App Link的HTTPS链接,并可以在搜索结果中将其显示为指向应用内内容的链接。

兼容性:App Link在Android 6.0+(99%的设备)上运行。对于Android 5.x(Lollipop),使用带有选择对话框的普通Deep Link。因此建议同时支持两种机制:现代设备使用App Link,旧版本使用Custom URL Scheme作为后备。带有autoVerify="true"的Intent Filter不会破坏向后兼容性——在Android 6以下,该属性被忽略。

特性Deep LinkApp Link
方案自定义(myapp://)HTTPS(https://domain)
验证assetlinks.json
选择对话框显示自动重定向
Android版本API 1+API 23+(6.0+)
Google索引是(HTTPS URL)

配置App Link需要三个步骤:在清单中配置Intent Filter、在服务器上放置assetlinks.json以及检查验证。第一步——在AndroidManifest.xml中添加带有android:autoVerify="true"的Intent Filter。重要的是指定HTTPS方案、主机和应用应处理的路径。路径可以包含用于子文件夹的通配符(*)。

第二步——创建assetlinks.json。可以通过Android Studio(Tools → App Links Assistant)生成文件。该助手还有助于调试和测试。文件放置在服务器的/.well-known/assetlinks.json路径上。服务器必须返回Content-Type: application/json并通过HTTPS访问,无需重定向。Google Play Console也会在Publishing部分显示App Link的验证状态。

  1. 添加带有android:autoVerify="true"的Intent Filter到AndroidManifest.xml
  2. 获取证书的SHA256指纹(keytool或App Links Assistant)
  3. 创建包含package_name和sha256_cert_fingerprints的assetlinks.json
  4. 放置文件到HTTPS服务器的/.well-known/assetlinks.json路径
  5. 检查验证状态:adb shell dumpsync domain_verification

测试——第三步。使用adb进行检查:命令adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/42"打开应用。如果打开的是浏览器而不是应用——请检查assetlinks.json和autoVerify。Android Studio App Links Assistant包含内置测试器:显示每个域名和路径的验证状态。对于自动化测试,使用带有Intent Matcher的Android Testing Library。

运行特点

Android 12(API 31)对App Link的处理带来了变化。新增了域名特定验证:系统单独检查每个链接,而不是整个Intent Filter。这提高了安全性,但在添加新路径时需要更新assetlinks.json文件。Android 12还随ADB引入了Android App Links Assistant——通过shell管理验证的命令。

多个域名——生产环境中的典型场景。应用可以处理来自example.com、m.example.com和example.org的链接。每个域名需要在相应服务器上有单独的assetlinks.json。在清单中添加多个Intent Filter——每个域名一个。所有域名必须通过HTTPS访问并独立通过验证。

App Link与Jetpack Navigation——现代Android应用中处理App Link的推荐方式。Jetpack Navigation支持nav_graph.xml或NavDeepLinkRequest中的声明式deep link。这简化了导航:开发者描述在特定URL下打开哪个屏幕,Navigation组件自行处理Intent并恢复导航堆栈。Google推荐使用Jetpack Navigation处理App Link。

kotlin
// 通过Jetpack Navigation处理App Link
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        handleDeepLink(intent)
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleDeepLink(intent)
    }

    private fun handleDeepLink(intent: Intent) {
        intent.data?.let { uri ->
            navController.handleDeepLink(NavDeepLinkRequest
                .Builder
                .fromUri(uri)
                .build()
            )
        }
    }
}

Google Play Store在发布时检查App Link。如果在清单中指定了带有autoVerify的Intent Filter,但assetlinks.json不可用或不正确,Google Play可能会发出警告并拒绝更新。在开发者控制台(Policy and Programs → App Links)中显示每个域名的验证状态。发布前务必检查状态——更新被拒绝后的修复会延迟发布。

常见问题

App Link与Android上的Deep Link有什么区别?

App Link是通过Digital Asset Links进行验证的Deep Link。主要区别:App Link使用HTTPS方案而不是自定义方案,不显示选择对话框,并且被Google索引。普通Deep Link在所有Android版本上都可以工作,但需要手动选择应用。

assetlinks.json应该放在哪里?

文件放置在HTTPS服务器的根目录下的/.well-known/assetlinks.json路径。服务器必须返回Content-Type: application/json。文件应在签名证书更改或添加新域名时更新。

为什么App Link不能自动打开应用?

主要原因:Intent Filter中缺少android:autoVerify="true",assetlinks.json无法通过HTTPS访问,SHA256指纹不正确,签名证书不同(debug与release)。通过adb shell dumpsync domain_verification检查验证状态。

没有自己的域名可以使用App Link吗?

不能——App Link需要具有可访问assetlinks.json的HTTPS服务器。如果没有域名,可以使用Firebase Hosting或GitHub Pages来托管文件。替代方案:Custom URL Scheme(无需验证)或Firebase Dynamic Links。

App Link在Android 5上工作吗?

不能——App Link在Android 6.0(API 23)及更高版本上受支持。在Android 5上,带有android:autoVerify="true"的Intent Filter忽略该属性,并作为带有选择对话框的普通Deep Link工作。建议同时支持两种机制以实现向后兼容。

总结

  • App Link——Android上Deep Link的演进:自动跳转到应用的HTTPS链接
  • Digital Asset Links——通过服务器上的assetlinks.json进行加密验证
  • 签名证书的SHA256指纹——将开发者与域名关联的关键元素
  • android:autoVerify="true"——激活App Link的Intent Filter必需属性
  • 安全性——App Link排除了第三方应用拦截链接的可能性
  • Google Play Store在发布时检查App Link验证,出错时拒绝
  • Jetpack Navigation——使用声明式deep link处理App Link的推荐方式

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读