HKIDCore 2.1.0

VKIDCore 2.1.0

VKCOM 发布者 维护。



VKIDCore 2.1.0

  • VK ID

VK ID SDK Logo

VK ID SDK — 用于通过 VK ID 账户使用户在 iOS 应用程序中进行身份验证的库。

概述

关于集成的一般规划和 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_IDCLIENT_SECRET 参数。

文档