如何实现点击Facebook任意URL打开Android应用(Facebook深度链接)
我当初配置Facebook App Link的时候也卡了好久,给你整理了Android端的完整配置步骤,一步步来应该就能解决:
Android端配置Facebook App Link的实操指南
1. 先搞定Facebook开发者平台的基础配置
- 首先得在Facebook开发者后台创建对应Android应用,务必填对这三个关键信息:
- 包名:和你Android项目里的
applicationId完全一致 - 类名:处理App Link跳转的Activity完整路径(比如
com.example.app.DeepLinkHandlerActivity) - 签名哈希值:分别生成调试版和发布版的签名哈希,都要填进去——这一步最容易踩坑,哈希不对直接导致验证失败
- 包名:和你Android项目里的
2. 在AndroidManifest.xml中配置跳转Activity
找到你用来处理App Link的Activity,添加对应的intent-filter,让系统能识别并跳转过来:
<activity android:name=".DeepLinkHandlerActivity" 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" /> <!-- 替换成你在Facebook后台配置的App Link域名和路径前缀 --> <data android:scheme="https" android:host="your-custom-domain.com" android:pathPrefix="/app-link" /> </intent-filter> </activity>
3. 配置域名关联验证文件
在你的网站根目录(或者.well-known子目录下)放置assetlinks.json文件,用来证明这个域名属于你的App。文件格式如下:
[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.app.package", "sha256_cert_fingerprints": ["你的App签名SHA256指纹"] } } ]
- 这个文件必须通过HTTPS可访问,而且指纹、包名要和Facebook后台以及本地配置完全匹配
4. 回到Facebook后台完成App Link绑定
- 进入应用后台的「App Links」板块,添加你的域名,关联之前配置的Android应用信息
- 用Facebook提供的测试工具生成测试链接,验证是否能直接跳转到App内
5. 处理App Link的跳转逻辑
在对应的Activity里解析Intent数据,实现页面跳转:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_deep_link_handler); Intent incomingIntent = getIntent(); Uri linkData = incomingIntent.getData(); if (linkData != null) { // 解析链接里的路径和参数,跳转到对应页面 String targetPath = linkData.getPath(); String customParam = linkData.getQueryParameter("user_id"); // 这里写你的页面跳转逻辑,比如根据path跳转到商品页/用户页 } }
常见坑点排查
- 签名哈希搞混:调试版和发布版的签名哈希是不同的,测试时用调试哈希,上线前要换成发布哈希
assetlinks.json访问失败:确保文件路径正确、HTTPS可用,没有被服务器拦截- Manifest配置错误:检查scheme、host、pathPrefix是否和域名配置完全一致
内容的提问来源于stack exchange,提问作者Saeef Minhaz




