ℹ️ VK ID SDK目前处于测试阶段。关于问题请通过GitHub仓库issues进行报告。
预集成
有关集成计划和VK ID的概览,请参阅此处。
为了集成VK ID SDK,首先在VK ID连接窗口中创建应用程序以获取应用程序ID(app_id)和受保护密钥(client_secret)。
应用程序要求
- iOS 12.0及以上
- Swift 5.7及以上
安装
Swift 包管理器
将 VKID 作为依赖项添加到您的 Package.swift
dependencies: [
.package(url: "https://github.com/VKCOM/vkid-ios-sdk.git", .upToNextMajor(from: "1.0.0"))
]
集成
配置 Info.plist
要支持通过提供程序无缝授权(如 VK 客户端或其他官方 VK 应用)将以下更改添加到您的 Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>vkauthorize-silent</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>auth_callback</string>
<key>CFBundleURLSchemes</key>
<array>
<string>vk123456</string> // Вместо 123456 подставьте ID вашего приложения.
</array>
</dict>
</array>
支持通用链接
VK ID SDK 通过 通用链接 与授权提供程序交互。在设置 VK ID 连接时,请在您的连接服务台指定授权提供程序将打开您的应用程序的通用链接。请将 通用链接支持 添加到应用程序中。
初始化 VK ID SDK
所有与 VK ID SDK 的交互都通过 VKID
对象完成。SDK 不提供 shared 对象,需要在初始化后自行保持,例如在 ApplicationDelegate
或 SceneDelegate
中。重复初始化将导致错误。
import VKID
do {
let vkid = try VKID(
config: Configuration(
appCredentials: AppCredentials(
clientId: clientId, // ID вашего приложения (app_id)
clientSecret: clientSecret // ваш защищенный ключ (client_secret)
)
)
)
} catch {
preconditionFailure("Failed to initialize VKID: \(error)")
}
基本授权
授权流程通过调用 authorize
方法启动
vkid.authorize(
using: .uiViewController(presentingController)
) { result in
do {
let session = try result.get()
print("Auth succeeded with token: \(session.accessToken)")
} catch AuthError.cancelled {
print("Auth cancelled by user")
} catch {
print("Auth failed with error: \(error)")
}
}
此外,还必须在您的 AppDelegate
中进行以下更改,以支持从授权提供者返回时打开链接。
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
return self.vkid.open(url: url)
}
如果您的应用程序使用 UIScene
,则需要实现 UISceneDelegate
中的以下方法
func scene(
_ scene: UIScene,
openURLContexts URLContexts: Set<UIOpenURLContext>
) {
URLContexts.forEach { ctx in
self.vkid.open(url: ctx.url)
}
}
按钮授权 OneTap
OneTapButton
- 配置样式化按钮授权。要使用屏幕上的 OneTap 按钮,配置 OneTapButton
并获取其对应的 UIView
let oneTap = OneTapButton { authResult in
do {
let session = try authResult.get()
print("Auth succeeded with token: \(session.accessToken)")
} catch AuthError.cancelled {
print("Auth cancelled by user")
} catch {
print("Auth failed with error: \(error)")
}
}
let oneTapView = vkid.ui(for: oneTap).uiView()
view.addSubview(oneTapView)
如需设置按钮样式,您可以
let oneTap = OneTapButton(
appearance: .init(
style: .primary(),
theme: .matchingColorScheme(.system)
),
layout: .regular(
height: .large(.h56),
cornerRadius: 28
),
presenter: .newUIWindow
) { authResult in
// authResult handling
}
详细的 OneTapButton
自定义设置可在演示应用程序的 OneTapButtonCustomizationController 屏幕上找到。
授权窗帘
OneTapBottomSheet
- 用于授权模态窗口的配置。该组件是一个模态卡片,它可以从屏幕底部动画出现并可以通过滑动或点击卡片外部来关闭。该窗口允许通过选择目标动作的文本来添加授权上下文。
要显示窗口,配置 OneTapBottomSheet
,获取 UIViewController
并以模态方式显示它。
let oneTapSheet = OneTapBottomSheet(
serviceName: "Your service name",
targetActionText: .signIn,
oneTapButton: .init(
height: .medium(.h44),
cornerRadius: 8
),
theme: .matchingColorScheme(.system),
autoDismissOnSuccess: true
) { authResult in
// authResult handling
}
let sheetViewController = vkid.ui(for: oneTapSheet).uiViewController()
present(sheetViewController, animated: true)
OneTapBottomSheet
的详细定制在演示应用程序中的 OneTapBottomSheetCustomizationController 屏幕上可用。
演示
SDK 随附演示应用程序 VKIDDemo,您可以在其中查看授权的工作原理以及提供视觉组件的定制方式。要使演示应用程序正确运行,请在文件 Info.plist 中指定您的 VKID 应用程序的 CLIENT_ID
和 CLIENT_SECRET
参数。