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应用之间的安全关联关系。
-
创建
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命令(针对本地密钥库)获取此信息。 -
托管文件: 将此
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) intent?data?.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。 - 回退行为:若用户设备未安装应用,或域名验证失败,链接将通过网页浏览器打开。