Android新手求助:自定义AppLink无法在Facebook等平台点击跳转
嘿,作为Android开发新手碰到这个问题太正常了!你用adb shell am start -a android.intent.action.VIEW -d "abc:///settings"能打开应用,是因为adb直接调用了系统的Intent机制,完全没经过第三方平台的链接校验。但像Facebook这类社交平台对自定义Schema(比如abc://)的支持非常有限,甚至会直接拦截——这是出于安全考量,它们更信任经过域名验证的App Links(Android官方深链接方案),而这确实需要你在服务器端做配置。
下面一步步给你拆解要做的事情:
1. 切换到HTTPS格式的App Links链接
先放弃纯自定义Schema的链接(比如abc:///settings),改用和你的域名绑定的HTTPS链接,比如https://yourdomain.com/settings——这是社交平台普遍认可的安全链接格式。
2. 在服务器上配置assetlinks.json文件
你需要在服务器的.well-known目录下放置一个assetlinks.json文件,用来让Android系统验证「这个域名确实属于你的应用」。文件内容如下,记得替换成你自己的应用信息:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.yourcompany.yourapp", "sha256_cert_fingerprints": ["你的应用签名的SHA256指纹"] } }]
- 获取SHA256指纹:可以用这个命令生成(替换成你的签名文件路径):
注意:debug包可以用Android Studio默认的debug keystore,但正式发布一定要用正式签名包的指纹。keytool -list -v -keystore /path/to/your/keystore.jks
3. 更新Manifest中的Intent Filter
在原来的Intent Filter基础上,添加App Links的配置,并且加上android:autoVerify="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" /> <!-- 保留原来的自定义Schema(可选,方便adb测试) --> <data android:scheme="abc" /> <!-- 添加App Links的HTTPS配置 --> <data android:scheme="https" android:host="yourdomain.com" android:pathPrefix="/settings" /> </intent-filter>
为什么这样做能解决问题?
像Facebook这类平台会对链接做严格的安全校验:
- 自定义Schema没有域名归属验证,平台无法确认链接是否安全,所以会拦截或者跳转到浏览器;
- App Links通过服务器上的
assetlinks.json完成了应用和域名的绑定验证,平台会信任这类链接,点击时会直接唤起你的应用。
测试验证
配置完成后,除了用adb测试HTTPS链接:
adb shell am start -a android.intent.action.VIEW -d "https://yourdomain.com/settings"
你还可以用Android Studio的「App Links Assistant」(路径:Tools > App Links Assistant)来一键验证服务器配置和Manifest是否正确。
内容的提问来源于stack exchange,提问作者aeun

