邮件URL跳转至Android应用的Deep Link功能失效问题
解决Android Deep Link跳转不生效的问题
看起来你的Deep Link没生效的核心问题是LoginActivity缺少处理HTTP链接的Intent Filter配置——默认的MAIN/LAUNCHER过滤器只是用来把应用添加到桌面启动器,没法响应外部的链接跳转请求。下面是具体的修复步骤:
1. 补充正确的Intent Filter配置
在你的LoginActivity的Manifest配置中,新增一个专门处理HTTP链接的<intent-filter>,需要包含ACTION_VIEW动作、BROWSABLE(允许浏览器等应用唤起)和DEFAULT类别,同时通过<data>标签精准匹配你的目标链接:
<activity android:name=".LoginActivity" android:theme="@style/MyMaterialTheme"> <!-- 原有的主入口过滤器 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 新增的Deep Link处理过滤器 --> <intent-filter android:autoVerify="true"> <!-- Android 12+建议添加自动验证 --> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 匹配你的链接:http://ts.abc.net:1021/abcd/#/login/789 --> <data android:scheme="http" android:host="ts.abc.net" android:port="1021" android:pathPrefix="/abcd/" /> <!-- #是锚点,Android不会匹配#后的内容,所以用pathPrefix匹配前半段 --> </intent-filter> </activity>
2. 快速验证配置是否生效
你可以用ADB命令直接测试链接跳转,避免反复发邮件测试:
adb shell am start -W -a android.intent.action.VIEW -d "http://ts.abc.net:1021/abcd/#/login/789" com.your.your_app_package
把com.your.your_app_package替换成你应用的实际包名,如果命令能直接唤起LoginActivity,说明配置已经生效。
3. 额外注意事项
- Android 12及以上:如果想让系统直接跳转你的应用(不弹出应用选择器),需要在
<intent-filter>中添加android:autoVerify="true",同时在你的服务器对应位置放置验证文件,确认应用与域名的关联关系。 - 链接锚点(#):Android的Deep Link匹配逻辑中,
#后面的内容属于锚点,不会被<data>标签的path/pathPrefix匹配,若需要获取#/login/789这部分内容,可以在LoginActivity中通过getIntent().getData().getFragment()方法获取。 - 邮件客户端兼容性:部分邮件客户端可能会对链接做转义或拦截,测试时可先复制链接到浏览器,验证是否能唤起应用,排除客户端层面的问题。
内容的提问来源于stack exchange,提问作者Raviteja
相关产品推荐
相关产品推荐

