React Native调用canOpenURL需在plist、manifest加http/https吗?
结论
不需要在plist文件和AndroidManifest文件中额外添加http、https相关的查询配置。
平台规则细节
iOS端
LSApplicationQueriesSchemes配置仅对第三方App注册的自定义URL Scheme生效,作用是提前向系统声明你需要查询哪些非通用协议的唤起能力。http://、https://是系统级默认支持的Web通用协议,从iOS 9推出Scheme查询权限限制开始就被纳入默认白名单豁免范围,无论你是否手动在plist中声明,调用canOpenURL检测这两类协议都不会被拦截,可正常返回结果。- 只有当你需要检测第三方App的专属自定义Scheme(比如支付、社交类App的专属唤起协议)时,才必须把对应Scheme字符串添加到
LSApplicationQueriesSchemes列表中,否则系统会直接返回false,同时在控制台输出权限拦截日志。
Android端
- Android 11及以上版本的包可见性限制逻辑和iOS一致:
AndroidManifest.xml中<queries>节点的配置仅对非通用协议生效。 http、https属于系统默认支持的通用Intent协议,天然在查询白名单内,不需要额外声明就能通过canOpenURL正常检测。- 只有检测其他App自定义的非通用唤起协议时,才需要在manifest的查询配置中添加对应项,否则系统会直接返回无法打开的结果。
补充说明
执行canOpenURL('https://stackoverflow.com/')无异常是符合平台规则的正常表现,本质是通用Web协议不受自定义Scheme查询权限的限制。
注意:如果需要实现点击http/https链接直接唤起指定第三方App、而非打开系统默认浏览器的效果,需要额外配置iOS通用链接(Universal Link)、Android应用链接(App Link)相关规则,这类配置和
canOpenURL检测所需的Scheme查询配置不属于同一类设置,不要混淆。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

