PAYATHON 2026

SwiftUI 集成 AlipaySDK 时如何判断是否安装支付宝 APP?

支付小周

结论

不要根据 auth_V2 的回调结果判断支付宝是否已安装。auth_V2 是授权接口,调用失败可能由参数、签名、网络、用户取消或授权流程切换引起,并不代表设备未安装支付宝。

可以采用以下方式检测:

  1. 优先使用当前 AlipaySDK 提供的 isAlipayInstalled 接口。
  2. 也可以通过 UIApplication.shared.canOpenURL 检测支付宝的 URL Scheme。
  3. 在 Info.plist 的 LSApplicationQueriesSchemes 中加入 alipay。缺少这项配置时,即使设备已经安装支付宝,也可能始终返回 false。

配置 Info.plist

在项目的 Info.plist 中加入:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>alipay</string>
</array>

如果项目中已经有 LSApplicationQueriesSchemes,将 alipay 追加到现有数组即可,不要重复创建同名键。

修改配置后,建议删除设备上的旧 App,再重新编译安装,以免旧安装包中的配置影响验证结果。

使用 AlipaySDK 判断

部分版本的 AlipaySDK 提供了 isAlipayInstalled:

import AlipaySDK

func isAlipayInstalled() -> Bool {
    return AlipaySDK.defaultService().isAlipayInstalled()
}

在 SwiftUI 中可以直接调用:

import SwiftUI
import AlipaySDK

struct ContentView: View {
    @State private var alipayInstalled = false

    var body: some View {
        VStack {
            Text(alipayInstalled ? "已安装支付宝" : "未安装支付宝")

            Button("检查支付宝") {
                alipayInstalled =
                    AlipaySDK.defaultService().isAlipayInstalled()
            }
        }
        .onAppear {
            alipayInstalled =
                AlipaySDK.defaultService().isAlipayInstalled()
        }
    }
}

不同版本的 AlipaySDK 导入 Swift 后,方法声明可能略有不同。如果当前版本没有暴露 isAlipayInstalled(),请以 SDK 头文件和 Xcode 自动补全为准,也可以改用下面的 URL Scheme 检测方式。

使用 canOpenURL 判断

import UIKit

func isAlipayInstalled() -> Bool {
    guard let url = URL(string: "alipay://") else {
        return false
    }

    return UIApplication.shared.canOpenURL(url)
}

在 SwiftUI 中调用:

import SwiftUI

struct ContentView: View {
    @State private var alipayInstalled = false

    var body: some View {
        Text(alipayInstalled ? "已安装支付宝" : "未安装支付宝")
            .onAppear {
                alipayInstalled = isAlipayInstalled()
            }
    }
}

SwiftUI 不会改变 canOpenURL 的行为,检测工作仍由 UIKit 的 UIApplication 完成。

为什么已经安装仍返回 false

最常见的原因是没有在 LSApplicationQueriesSchemes 中加入 alipay。从 iOS 9 开始,应用查询其他 App 的 URL Scheme 前,需要在 Info.plist 中声明允许查询的 Scheme。

还要检查以下几项:

  • 使用真机测试,iOS 模拟器通常没有安装支付宝。
  • 确认修改的是当前 Target 实际使用的 Info.plist。
  • 白名单中的 Scheme 应写为 alipay,不能写成 alipay://。
  • 如果项目有 Debug、Release 等多套配置,确认对应的构建配置都包含这项白名单。
  • auth_V2 的调用结果不能说明支付宝是否已安装。SDK 可能根据当前环境选择客户端或其他授权流程。
  • 不要调用私有 API或枚举已安装应用。这类检测方式不可靠,也可能影响 App Store 审核。

应将支付宝安装状态检测与授权流程分开处理。先用 isAlipayInstalled() 或 canOpenURL 检查客户端状态,再根据业务需要决定是否调用 auth_V2。

备注:内容仅供参考。