VKID 2.1.0

VKID 2.1.0

VKCOM发布者维护。



VKID 2.1.0

  • 作者:
  • VK ID

VK ID SDK Logo

VK ID SDK —— 用于iOS应用用户通过VK ID账号进行认证的库。


ℹ️ 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 对象,需要在初始化后自行保持,例如在 ApplicationDelegateSceneDelegate 中。重复初始化将导致错误。

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_IDCLIENT_SECRET 参数。

文档