VKID 2.4.1

VKID 2.4.1

Maintained by VKCOM publisher.



VKID 2.4.1

  • By
  • VK ID

VK ID SDK Logo

VK ID SDK — библиотека для авторизации пользователей iOS приложений с помощью аккаунта VK ID.


ℹ️ VK ID SDK сейчас находится в бета-тестировании. О проблемах вы можете сообщить с помощью issues репозитория.


Предварительно

Общий план интеграции и в целом что такое VK ID можно прочитать здесь.

Чтобы подключить VK ID SDK, сначала получите ID приложения (app_id) и защищенный ключ (client_secret). Для этого создайте приложение в кабинете подключения VK ID.

Требования к приложению

  • iOS 12.0 и выше
  • Swift 5.7 и выше

Установка

Swift Package Manager

Добавьте VKID как зависимость в ваш Package.swift:

dependencies: [
    .package(url: "https://github.com/VKCOM/vkid-ios-sdk.git", .upToNextMajor(from: "1.0.0"))
]

Интеграция

Настройка Info.plist

Для поддержки бесшовной авторизации через провайдер (клиент ВКонтакте или другое официальное приложение 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. 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, где можно посмотреть работу авторизации и как кастомизируются предоставляемые визуальные компоненты. Для корректной работы демо-приложения укажите параметры CLIENT_ID и CLIENT_SECRET вашего приложения VKID в файле Info.plist.

Документация