概述
关于集成的一般规划和 VK ID 是什么的整体说明,请在此处阅读 这里。
为了连接 VK ID SDK,首先获取应用 ID (app_id) 和受保护的密钥 (client_secret)。为此,请在 VK ID 连接仪表板 中创建应用程序。
对应用程序的要求
- iOS 12.0 及以上
- Swift 5.7 及以上
安装
Swift 包管理器
将VKID添加为依赖项到您的Package.swift
dependencies: [
.package(url: "https://github.com/VKCOM/vkid-ios-sdk.git", .upToNextMajor(from: "0.0.1-alpha"))
]
CocoaPods
将以下内容添加到您的Podfile
pod 'VKID', ~> '0.0.1-alpha'
执行以下命令来安装依赖项
pod install --repo-update
集成
配置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>
支持Universal Links
由于VK ID SDK通过Universal Links与认证提供者交互。在配置VK ID连接的设置页面上,指定提供者打开您的应用程序的Universal Link。请确保在您的应用中添加Universal Links支持。
初始化 VK ID SDK
所有与 VK ID SDK 的交互都通过 VKID
对象完成。
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(self)
) { 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)
}
}
通过按钮启动 One Tap 授权
要创建 One Tap 授权按钮,请配置 OneTapButton
并获取 UIView
。
let oneTap = OneTapButton(onCompleteAuth: { 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)")
}
})
let oneTapTrampoline = vkid.ui(for: oneTap)
let uiView = oneTapTrampoline.uiView()
如有需要,您可以配置按钮
let oneTap = OneTapButton(
appearance: OneTapButton.Appearance(style: .primary(), theme: .system),
layout: .regular(),
presenter: .newUIWindow
)
还可以重写按钮点击时的行为
let oneTap = OneTapButton(onTap: { activityIndicating in
activityIndicating.startAnimating()
// aвторизация
activityIndicating.stopAnimating()
})
演示
SDK 附带一个示例应用程序,您可以查看授权的工作情况。在 VKIDDemo 文件夹中包含测试应用程序。为了使测试应用程序正常工作,请在 Info.plist 文件中指定您的 VKID 应用程序的 CLIENT_ID
和 CLIENT_SECRET
参数。