Amazon Prime与Disney+Hotstar应用Deep Linking功能失效求助
Android Deep Link跳转Amazon Prime/Disney+Hotstar失效解决方案
问题复现
尝试通过Deep Link跳转Amazon Prime和Disney+Hotstar应用时出现以下问题:
- 使用HTTP链接(如
https://www.amazon.com/gp/video/detail/B01MSPI8JN/ref=atv_dp_share_cu_r)调用Intent.ACTION_VIEW,仅唤起默认浏览器,无对应应用选项 - 测试
amzn://协议链接(如amzn://video/detail/B01MSPI8JN/ref=atv_dp_share_cu_r)同样无法唤起目标应用 - Netflix、Zee5等其他视频应用可正常接收跳转,且已确认目标应用已安装,Manifest中存在Deep Link配置,Android 11设备可通过「应用信息→默认打开→支持的链接」验证配置有效性
解决步骤
1. 添加Android 11+包可见性声明
Android 11及以上系统限制了应用对其他应用的可见性,需在AndroidManifest.xml中添加<queries>标签,声明目标应用的包名,确保系统能识别到这些应用:
<queries> <!-- Amazon Prime Video 包名 --> <package android:name="com.amazon.avod.thirdpartyclient" /> <!-- Disney+ Hotstar 包名 --> <package android:name="com.hotstar.android" /> </queries>
2. 显式指定目标应用包名(可选)
如果系统仍未自动匹配到目标应用,可以在Intent中显式指定包名,强制唤起对应应用(需先检查应用是否安装,避免崩溃):
// 跳转Amazon Prime Video示例 String amazonPackage = "com.amazon.avod.thirdpartyclient"; Uri amazonUri = Uri.parse("amzn://video/detail/B01MSPI8JN"); Intent intent = new Intent(Intent.ACTION_VIEW, amazonUri); intent.setPackage(amazonPackage); // 检查应用是否已安装 PackageManager pm = getPackageManager(); List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); if (!resolveInfos.isEmpty()) { startActivity(intent); } else { // 应用未安装时的降级处理:跳转浏览器 Intent fallbackIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.amazon.com/gp/video/detail/B01MSPI8JN")); startActivity(fallbackIntent); }
3. 验证Intent匹配情况
通过PackageManager.queryIntentActivities检查当前Intent能被哪些应用处理,排查是否真的匹配到目标应用:
Intent testIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.amazon.com/gp/video/detail/B01MSPI8JN")); PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo info : activities) { Log.d("DeepLinkTest", "可处理的应用包名:" + info.activityInfo.packageName); }
如果日志中没有目标应用的包名,说明系统未识别到应用的Deep Link配置,需再次检查包可见性声明或应用的Manifest配置。
4. 检查Deep Link格式正确性
- Amazon Prime的官方Deep Link格式推荐使用
amzn://video/detail/{ASIN},尽量避免携带多余的ref参数,可能影响匹配逻辑 - Disney+ Hotstar的Deep Link格式通常为
hotstar://play/{contentId},可通过逆向Manifest确认准确格式
总结
最常见的原因是Android 11+的包可见性限制,添加<queries>声明后大多能解决问题;若仍无效,可尝试显式指定包名或验证Deep Link格式是否准确。
内容的提问来源于stack exchange,提问作者Billy Istiak
相关产品推荐
相关产品推荐

