您必须安装 CocoaPods 以添加依赖项。
此 SDK 的目标为编译 iOS 11,以及 iOS 16 的功能。这意味着您可以向针对旧版本的程序添加 BConnect 依赖项,并在新的 iOS 版本中使用其功能。
您还必须有一个由 b.connect 提供的客户端 ID,以及在您的应用程序中设置 deep link scheme(它将在授权过程中的网页回调中使用)。
BConnect 通过 CocoaPods 提供。要安装,只需将以下行添加到您的 Podfile 中
pod 'BConnect'
您主要会使用三个对象
BConnect
。这是 SDK 的入口点。您可以通过shared
属性(单例)来配置它、请求授权和处理授权回调。BConnectConfiguration
。这是一个包含 SDK 正确运行所需的所有信息的数据结构。BConnectButton
。这是一个 UI 组件。
在执行任何请求之前,您必须使用一些信息来设置 BConnect。为此,您需要使用您的设置实例化一个 BConnectConfiguration
,然后使用它调用 BConnect.setup(configuration:)
方法。
let configuration = BConnectConfiguration(
clientType: .private,
scheme: "example",
clientID: "id",
scopes: ["openid", "email", "given_name", "family_name", "name", "risk_score"],
)
BConnect.shared.setup(configuration: configuration)
一些参数不是必需的,或者有默认值。
您可以在应用启动时、用户点击按钮时或在您选择的任何时间完成此操作,只要在请求之前设置配置即可。否则,将不会发生任何事情。
请注意,配置不会被保存。您应该在每次应用重启时设置配置。
要将 BConnectButton 添加到您的视图中,您可以在您的 storyboard 或 xib 中添加一个 UIView,然后将 BconnectButton
设置为 class 在 Identity Inspector 中。
您还可以通过实例化 BConnectButton()
并将其添加到子视图中来从代码中添加它。
您将不得不设置按钮的 高度 和 位置 约束。宽度将自动计算。
提示:您可以在 Size Inspector (xib/storyboard) 中的 Intrinsic Size 中设置一个占位符来隐藏 missing constraint 警告。
为 BConnectButton
提供了样式选择。您也可以通过提供一个 b.connect 图片名来设置自定义样式。在这种情况下,您必须使用相同名称将占位符图像添加到您的资源中。
// Using a default style
bconnectButton.set(style: .icon)
// Using a custom style
bconnectButton.set(style: .custom(name: "bconnect_largebutton_white_noborder"))
您要添加一个目标来监听与 UIButtons 一样的事件。请注意,BConnectButton
继承自 UIButton
。
bconnectButton.addTarget(self, action: #selector(onTapBConnect), for: .touchUpInside)
@objc
private func onTapBConnect(sender : UIButton) {
// Authorize
}
您也可以通过在 Storyboard 中使用 IBAction 来完成此操作。
您可以通过调用 BConnect.requestAuthorize(from:completion:)
来启动授权流程。completion闭包将返回一个 BConnectResult
(枚举): 一个包含请求信息的成功,一个错误或用户取消。
BConnect.shared.requestAuthorize(presenting: self) { [weak self] result in
self?.handleBconnectResult(result)
}
此代码可以从BConnectButton的点击中调用,例如。
为了拦截授权回调,您需要在应用程序从URL打开时调用 BConnect.shared.application(open:)
。
例如,这可以在AppDelegate
中的application(_:open:options:)
方法中完成。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if BConnect.shared.application(open: url) {
return true
}
return false
}
或者如果您使用的是SceneDelegate
,可以在scene(_:openURLContexts:)
方法中完成。
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else { return }
_ = BConnect.shared.application(open: url)
}
您可能会由于CocoaPods而出错。此问题与沙箱违规有关,可能由Alamofire框架或AppAuth引起。
要解决这个问题,您需要禁用用户脚本沙箱。
- 导航到您的项目设置。
- 转到“构建设置”标签。
- 将
USER_SCRIPT SANDBOXING
设置为无
。