ℹ️ 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.