Deep links是可以让用户直接进入应用的特定部分的URI。
- 创建,在Manifest中的activity声明中添加intent过滤器
ini
<activity
android:name=".MyMapActivity"
android:exported="true"
...>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="geo" />
</intent-filter>
</activity>
-
当存在多个能够处理相同scheme的应用时,app会打开一个对话框选择。
-
被调用方使用:获取intent.data,拆分解析,组件封装,通过规则+Arouter跳转目标业务。
官方文档:developer.android.com/training/ap...
APP links:scheme为https,并且有签名等机制
-
准备域名和资产关联文件
-
确保你拥有一个 HTTPS 域名,比如
www.example.com
。 -
在该域名的服务器根目录下创建一个
.well-known/assetlinks.json
文件,内容类似:json[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.yourcompany.yourapp", "sha256_cert_fingerprints": [ "AA:BB:CC:...:YY:ZZ" // 你用来签名 APK 的证书指纹(SHA‑256) ] } } ]
-
部署后,在浏览器访问
https://www.example.com/.well-known/assetlinks.json
能拿到该 JSON。
-
-
在 AndroidManifest.xml 中声明 Intent Filter
在你希望处理 App Link 的
Activity
节点里添加:xml<activity android:name=".YourDeepLinkActivity"> <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" /> <!-- 匹配你的 HTTPS 链接 --> <data android:scheme="https" android:host="www.example.com" android:pathPrefix="/applink" /> </intent-filter> </activity>
android:autoVerify="true"
:安装时系统自动向服务器验证assetlinks.json
。
-
签名与构建
- 用与你在
assetlinks.json
中声明的同一套发布签名(release keystore)对 APK 进行签名。 - 安装到设备或模拟器上。
- 用与你在
-
系统验证
- 安装 APK 后,Android 框架会向
https://www.example.com/.well-known/assetlinks.json
发起请求,检查package_name
与证书指纹是否匹配。 - 验证成功后,这个 App 就被注册为该域名的"所有者",当用户点击符合规则的链接时会优先唤起你的 App。
- 安装 APK 后,Android 框架会向
-
测试你的 App Link
-
命令行测试
sqladb shell am start \ -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "https://www.example.com/applink/page/123"
-
检查验证状态
arduinoadb shell pm get-app-links com.yourcompany.yourapp
或(Android 11+)
cssadb shell pm verify-app-links --re-verify com.yourcompany.yourapp
查看输出中是否有
verified
。
-
-
在代码中处理跳转
-
在
YourDeepLinkActivity
的onCreate()
/onNewIntent()
中,用intent.data
拿到Uri
,再解析出pathSegments
或queryParameter
:kotlinoverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) intent.data?.let { uri -> val segments = uri.pathSegments // e.g. ["applink","page","123"] val pageId = segments.getOrNull(2) // 根据 pageId 展示对应页面 } } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) intent.data?.let { handleDeepLink(it) } }
-
-
优雅回退
- 如果 App 未安装,点击 HTTPS 链接会在浏览器打开对应网页。
- 你也可以在网页中检测 UA 或 JS 判断,提示用户下载或跳转到应用市场。
总结:
- 服务器端 :部署
assetlinks.json
,声明包名+证书指纹。 - 客户端 :AndroidManifest 中配置
<intent-filter android:autoVerify="true">
;用 release 签名构建并安装。 - 验证与测试:系统自动验证并响应点击,或用 ADB 命令手动测试。
- 业务处理 :在 Activity 中通过
intent.data
获取并解析 URL 参数。