如何检测Deep Link是否正常工作?是否有类似权限检测的默认校验方法?
检测应用是否支持Deep Link的方法
核心思路
Deep Link的支持依赖于应用Manifest中配置的<intent-filter>,可以通过Android的PackageManager工具类来校验,类似权限检测的思路,以下是两种实用方法:
方法1:检测任意应用是否支持指定Deep Link
通过构造匹配Deep Link的Intent,查询系统中是否有Activity能响应这个Intent(需确保匹配默认启动规则):
fun isDeepLinkSupported(context: Context, deepLinkUri: String): Boolean { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(deepLinkUri)) // MATCH_DEFAULT_ONLY 确保匹配带有 CATEGORY_DEFAULT 的 intent-filter(外部调用Deep Link的必要条件) val resolveInfos = context.packageManager.queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY ) return resolveInfos.isNotEmpty() }
使用时直接传入目标Deep Link的URI即可,返回true表示存在可响应的应用/Activity。
方法2:校验自身应用的Deep Link配置是否正确
如果要检查自己的应用是否正确配置了某个Deep Link,可以直接解析Manifest中的Intent Filter:
fun checkOwnAppDeepLink(context: Context, targetScheme: String, targetHost: String): Boolean { val packageInfo = context.packageManager.getPackageInfo( context.packageName, PackageManager.GET_ACTIVITIES or PackageManager.GET_META_DATA ) packageInfo.activities?.forEach { activityInfo -> activityInfo.intentFilters?.forEach { filter -> // 校验scheme和host是否匹配 if (filter.schemes?.contains(targetScheme) == true && filter.hosts?.contains(targetHost) == true) { return true } } } return false }
如果你的Deep Link需要校验path或pathPattern,可以在遍历Intent Filter时额外添加对应参数的判断逻辑。
补充说明
- 方法1适用于检测第三方应用是否支持某个Deep Link,比如判断用户是否安装了能打开特定链接的APP;
- 方法2适合自检,避免Manifest配置遗漏(比如忘记添加
CATEGORY_DEFAULT)导致Deep Link失效; - 若Deep Link涉及自定义Scheme,注意部分系统可能对非HTTP/HTTPS Scheme有额外限制。
内容的提问来源于stack exchange,提问作者Bret Joseph
相关产品推荐
相关产品推荐

