如何添加带重定向的Android应用链接

了解如何配置 Android App Links 以处理重定向和深度链接,将用户直接引导至应用内容。

Intermediate

Android 应用链接通过允许 HTTP/HTTPS 网址直接跳转至应用,实现无缝用户体验,同时规避浏览器的多义性对话框。当应用未安装时,该功能还能优雅地回退至浏览器。其实现过程(尤其是涉及重定向时)包含几个关键步骤。

以下是添加带重定向的 Android 应用链接的方法:

1. 配置 AndroidManifest.xml 文件

您需要在 AndroidManifest.xml 文件中为处理传入链接的活动声明一个意图过滤器。该过滤器告知 Android 系统您的应用可打开哪些 URL。

  • android:autoVerify="true":此关键属性可自动验证应用是否为指定URL模式的默认处理程序。
  • <action android:name="android.intent.action.VIEW" />:指定该意图过滤器可通过谷歌搜索触发,并处理查看类操作。
  • <category android:name="android.intent.category.DEFAULT" />: 此项使应用能够响应隐式意图。
  • <category android:name="android.intent.category.BROWSABLE" />:此项是让意图过滤器可被网页浏览器访问的必要条件,允许用户通过浏览器中的深度链接打开您的应用。
  • <data> 标签:定义应用可处理的 URI 格式。需指定协议(如 https)、主机(您的域名),并可选路径或路径前缀。

示例 AndroidManifest.xml 条目:

<activity android:name=".DeepLinkActivity">
 <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="www.example.com"
 android:pathPrefix="/products" />  </intent-filter> </activity> 

此配置表示您的应用可处理类似https://www.example.com/products/item123的URL。

2. 通过assetlinks.json声明网站关联

为验证应用对所声明URL的合法所有权,您必须在网站托管Digital Asset Links JSON文件。该文件将建立网站与Android应用之间的安全关联关系。

  1. 创建assetlinks.json文件:该文件需包含应用的包名及SHA256证书指纹。

    json [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.packagename", "sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"] } }] * package_name:您的 Android 应用程序 ID。* sha256_cert_fingerprints:用于构建 APK 的签名密钥的 SHA256 指纹。 您可通过 Google Play 控制台(若使用 Play App Signing)或使用 keytool 命令(针对本地密钥库)获取此信息。

  2. 托管文件: 将此 assetlinks.json 文件上传至您的网络服务器,路径为 https://your.domain.com/.确保通过 HTTPS 可访问该文件。

3. 在 Activity 中处理传入 Intent

AndroidManifest.xml 中指定的 Android activity 中,您将检索传入的 Intent 数据以确定要显示的内容。

class DeepLinkActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  setContentView(R.布局activity_deep_link  intentdata?.let { uri ->
 // uri 将类似于 https://www.example.com/products/item123
 val productId = uri.lastPathSegment // 提取 "item123"  // 使用 productId 获取并显示相关内容
 findViewById<TextView>(R.id.textView).文本 = "产品ID:$productId"
 }  }  // 若活动已运行,处理新意图
 override fun onNewIntent(intent: Intent?) {
 super.onNewIntent(intent)
 setIntent(intent) // 更新活动的意图
 // 在此处理新的意图数据,类似于 onCreate  intent?.data?.let { uri ->
 val productId = uri.lastPathSegment
 findViewById<TextView>(R.id.textView).text = "New Product ID: $productId"  }  } } 

4. Android 应用链接如何处理重定向

Android 应用链接旨在与 HTTP/HTTPS 重定向无缝协作。当用户点击包含重定向的 URL 时,Android 系统将遵循重定向链。关键点在于:所有重定向后的最终 URL 必须与 AndroidManifest.xml 文件中的 intent-filter 配置匹配,并被 assetlinks.json 文件覆盖。

  • 服务器端重定向: 若您的网络服务器执行 301(永久)或 302(临时)重定向,Android 系统将跟随重定向。 例如,当https://www.example.com/old-product重定向至https://www.example.com/products/item123,且应用配置为处理https://www.example.com/products/时,应用将打开item123
  • 回退行为:若用户设备未安装应用,或域名验证失败,链接将通过网页浏览器打开。