Android/iOS中Launcher.CanOpenAsync始终返回false问题求助
问题描述
我尝试使用Launcher.CanOpenAsync检测模拟器中已安装的Gmail、Facebook等应用,但始终返回false。测试代码如下:
bool supportsUri = await Launcher.Default.CanOpenAsync("lyft://"); bool supportsUri = await Launcher.Default.CanOpenAsync("fb://"); bool supportsUri = await Launcher.Default.CanOpenAsync("gmail-inbox://");
iOS端测试时已修改Info.plist,但问题依旧。另外以下代码可正常运行,但我需要打开收件箱而非撰写邮件,mailto无法满足需求:
await Launcher.OpenAsync("mailto:example@gmail.com"); await Browser.OpenAsync("https://www.facebook.com/RingotanApp");
解决建议
- 优先用真实设备测试:iOS模拟器里的第三方应用大多是简化版,很多URI Scheme功能被阉割,甚至部分官方应用只是个空壳,模拟器的检测结果参考性极低,换成真实设备测试更准确。
- 修正URI Scheme:
- Gmail收件箱的正确Scheme是
googlegmail://,替换掉你用的gmail-inbox://再试; - Facebook的
fb://本身是对的,但要确认模拟器里的Facebook应用是否完整支持该Scheme,部分模拟器预装版本可能没有此功能; - Lyft的
lyft://同理,模拟器里的应用可能未完整实现Scheme响应。
- Gmail收件箱的正确Scheme是
- 检查Info.plist配置:iOS必须在
Info.plist中添加LSApplicationQueriesSchemes数组,把要检测的Scheme前缀(去掉://)加进去,示例配置如下:
配置后清理项目缓存,重新编译运行,确保配置生效。<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> <string>googlegmail</string> <string>lyft</string> </array> - 确认应用完整安装:模拟器里的应用图标存在不代表完整安装,删除现有应用后重新安装(若模拟器支持),或直接用真实设备安装官方版本测试。
内容的提问来源于stack exchange,提问作者Adela Chivu
相关产品推荐
相关产品推荐

