CocoaPods trunk is moving to be read-only. Read more on the blog, there are 19 months to go.

VKIDCore 2.4.1

VKIDCore 2.4.1

Maintained by VKCOM publisher.



VKIDCore 2.4.1

  • By
  • VK ID

VK ID SDK Logo

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

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

Общий план интеграции и в целом что такое 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: "0.0.1-alpha"))
]

CocoaPods

Добавьте в ваш Podfile:

pod 'VKID', ~> '0.0.1-alpha'

Выполните следующие команды, чтобы установить зависимости:

pod install --repo-update

Интеграция

Настройка 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.

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

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