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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:02