You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中通过URL Scheme打开iPhone已安装第三方应用实现问询

相关参考截图

参考截图

现有实现存在的问题
  • 缺少Info.plist权限配置:iOS 9及以上系统要求,调用canOpenURL(_:)查询其他App的URL Scheme前,必须将目标Scheme添加到项目Info.plist的LSApplicationQueriesSchemes数组中,否则系统会默认返回false,无法正确判断应用是否安装。
  • 缺少异常场景处理:现有代码仅在判定可打开时执行打开逻辑,没有对「应用未安装」「打开失败」等异常场景做用户反馈,用户操作后无响应会产生困惑。
  • 缺少打开结果回调:open(_:options:completionHandler:)方法自带完成回调,可以获取打开操作的最终结果,现有代码没有使用该回调做后续逻辑处理。
正确实现逻辑
  1. 首先修改项目Info.plist,添加Scheme查询权限,右键Info.plist选择「Open As - Source Code」,添加如下代码:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>avaya</string>
</array>

如果是可视化编辑Info.plist,新增Key为LSApplicationQueriesSchemes的Array类型项,在数组下新增String类型的元素,值填avaya即可。

  1. 优化功能实现代码:
@IBAction func openApp(_ sender: Any) {
    // 校验URL合法性
    guard let targetURL = URL(string: "avaya://") else {
        let alert = UIAlertController(title: "提示", message: "跳转链接无效", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "知道了", style: .default))
        present(alert, animated: true)
        return
    }
    // 校验是否可打开
    if UIApplication.shared.canOpenURL(targetURL) {
        UIApplication.shared.open(targetURL, options: [:]) { openSuccess in
            // 处理打开失败场景
            if !openSuccess {
                let alert = UIAlertController(title: "提示", message: "打开应用失败,请稍后重试", preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "知道了", style: .default))
                self.present(alert, animated: true)
            }
        }
    } else {
        // 处理应用未安装场景,可根据需求替换为跳对应App的App Store下载页
        let alert = UIAlertController(title: "提示", message: "未检测到目标应用,请先前往App Store下载安装后重试", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "知道了", style: .default))
        present(alert, animated: true)
    }
}

内容的提问来源于stack exchange,提问作者Ab.sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:54:04