如何在SwiftUI视图中插入UIKit内容并集成Passbase身份验证功能
实现方案
完全可以将官方的UIKit实现集成到SwiftUI项目中,核心是通过SwiftUI提供的UIViewRepresentable协议封装UIKit组件PassbaseButton,同时通过Coordinator处理代理回调即可,以下是可直接使用的代码:
第一步:封装Passbase按钮组件
import SwiftUI import Passbase import UIKit struct PassbaseVerificationButton: UIViewRepresentable { // 可选:预填充的邮箱 let prefillEmail: String? // 各状态回调,供外部业务层处理 let onStart: (() -> Void)? let onSubmitted: ((String) -> Void)? let onFinish: ((String) -> Void)? let onError: ((String) -> Void)? // 处理代理回调的协调器 class Coordinator: NSObject, PassbaseDelegate { let parent: PassbaseVerificationButton init(parent: PassbaseVerificationButton) { self.parent = parent } func onStart() { parent.onStart?() } func onSubmitted(identityAccessKey: String) { parent.onSubmitted?(identityAccessKey) } func onFinish(identityAccessKey: String) { parent.onFinish?(identityAccessKey) } func onError(errorCode: String) { parent.onError?(errorCode) } } func makeCoordinator() -> Coordinator { Coordinator(parent: self) } func makeUIView(context: Context) -> PassbaseButton { // 设置代理 PassbaseSDK.delegate = context.coordinator // 预填充邮箱 if let email = prefillEmail { Passbase.prefillUserEmail = email } // 创建按钮 return PassbaseButton(frame: .zero) } func updateUIView(_ uiView: PassbaseButton, context: Context) {} }
第二步:在SwiftUI视图中使用
你可以像使用普通SwiftUI组件一样调用封装好的PassbaseVerificationButton:
struct ContentView: View { var body: some View { VStack(spacing: 20) { Text("身份验证") .font(.title) PassbaseVerificationButton( prefillEmail: "testuser@yourproject.com", onStart: { print("验证流程开始") }, onSubmitted: { accessKey in print("验证信息已提交,accessKey:\(accessKey)") }, onFinish: { accessKey in print("验证完成,accessKey:\(accessKey)") // 这里处理验证完成后的业务逻辑,比如跳转页面、更新用户状态 }, onError: { errorCode in print("验证出错,错误码:\(errorCode)") } ) .frame(width: 300, height: 60) // 直接在SwiftUI中设置按钮大小 } .padding() } }
注意事项
- 使用前请确保已经完成SDK导入、项目权限配置(相机、相册访问权限声明)、API密钥初始化等前置步骤
- 所有回调方法均可选实现,你可以根据业务需求只保留需要的回调即可
- 按钮的大小、位置可以直接通过SwiftUI的修饰符调整,无需修改封装组件内部的frame参数
内容的提问来源于stack exchange,提问作者Pkns
相关产品推荐
相关产品推荐

