SwiftUI开发Apple Watch应用能否调用iPhone相机扫描QR-Code登录
Apple Watch 扫码登录(调用iPhone相机)实现方案
watchOS 没有提供直接唤起iPhone相机的系统级API,跨设备调用能力全部基于WatchConnectivity框架实现,完整实现流程如下:
- 基础能力配置
iPhone端与Watch端都需要在应用启动时初始化并激活WCSession,保证两端通信链路可用,核心初始化代码:import WatchConnectivity class WCSessionManager: NSObject, WCSessionDelegate { static let shared = WCSessionManager() private override init() { super.init() guard WCSession.isSupported() else { return } WCSession.default.delegate = self WCSession.default.activate() } func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {} #if os(iOS) func sessionDidBecomeInactive(_ session: WCSession) {} func sessionDidDeactivate(_ session: WCSession) {} #endif } - Watch端发起扫码请求
用户点击Watch端登录页的扫码按钮时,先校验WCSession连通状态,确认iPhone可通信后发送扫码指令,等待iPhone端回传扫码结果:// Watch端扫码触发逻辑 func triggerPhoneScan() { guard WCSession.default.isReachable else { // 自行实现iPhone未连接的提示逻辑 return } WCSession.default.sendMessage( ["requestType": "qrLoginScan"], replyHandler: { res in guard let authToken = res["authToken"] as? String else { return } DispatchQueue.main.async { // 拿到凭证后执行Watch端登录逻辑 self.completeLogin(token: authToken) } }, errorHandler: { err in // 自行实现通信失败的错误提示 } ) } - iPhone端响应请求,完成扫码回传
iPhone端监听WCSession的消息回调,收到扫码请求后:若应用在前台直接拉起自定义QR码扫描页(可用AVFoundation实现扫码能力,或调用系统ImagePicker限制媒体类型为二维码);若应用在后台可触发本地通知引导用户点击打开应用扫码。识别到有效登录凭证后,直接通过消息回调的replyHandler把结果回传给Watch端即可:// iPhone端消息监听逻辑 func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { guard let type = message["requestType"] as? String, type == "qrLoginScan" else { replyHandler([:]) return } DispatchQueue.main.async { // 拉起扫码页,识别完成后回调结果 self.showQRScanPage { scanResult in replyHandler(["authToken": scanResult]) } } }
注意事项:
- 禁止使用私有URL Scheme尝试直接跳转系统相机,该类实现会被App Store审核驳回
- 跨设备消息收发必须保证WCSession处于激活且可达状态,建议在UI上实时展示两端连接状态,避免用户点击无响应
- 如果应用最低适配watchOS 7及以上版本,也可以直接在Watch端基于AVCaptureSession实现本地扫码,无需唤起iPhone,缺点是Watch端取景范围小,远距离扫码体验较差
内容的提问来源于stack exchange,提问作者Pjaks
相关产品推荐
相关产品推荐

