VK Cloud logo

Подключение к мобильному приложению на iOS

  1. Загрузите VK Капча SDK:

    1. Добавьте библиотеку в зависимости в файле Package.swift:

      dependencies: \[   .package(url: "https://github.com/VKCOM/vkid-captcha-ios-sdk", .upToNextMajor(from: "<ВЕРСИЯ>"))\]

      Здесь <ВЕРСИЯ> — версия VK Капча SDK для iOS Swift Package Manager (0.1.0)

    2. Скачайте ZIP-архив и распакуйте его.

    3. Добавьте в ваш проект файл VKCaptchaSDKResources.bundle из архива.

  2. Получите от бэкенда ссылку для запуска виджета капчи.

  3. Создайте конфигурацию капчи. Воспользуйтесь конфигурационным объектом VKCaptchaConfiguration(url:).

  4. Отобразите капчу пользователю. Воспользуйтесь методом SDK VKCaptcha.getCaptchaViewController(completion:).

  5. Обработайте результат прохождения капчи:

    • Если метод вернул токен успешного прохождения капчи, отправьте его бэкенду для валидации.
    • Если пользователь закрыл капчу, бэкенду ничего не отправляется. Определите, что будет происходить во фронтенде в этом случае.

Пример кода на Swift:

import VKCaptchaSDKstruct APIResponse: Decodable {   let captchaUrl: String?}func handleCaptcha(captchaUrl: URL) {   let config = VKCaptchaConfiguration(url: captchaUrl) // Ссылка для запуска виджета капчи, полученная от бэкенда, содержит сессионный токен   let captcha = VKCaptcha(configuration: config)   let vc = captcha.getCaptchaViewController { [weak self] result in      switch result {         case .success(let token):            self?.repeatRequest(with: token)         case .failure:                 // Обработка закрытия капчи                 break      }   }   present(vc, animated: true)}func performAction() {   URLSession.shared.dataTask(with: url) { data, _, _ in   guard let data = data,           let response = try? JSONDecoder().decode(APIResponse.self, from: data),      let captchaUrlString = response.captchaUrl,              let captchaUrl = URL(string: captchaUrlString) else {         // Обработка успешного ответа без капчи         return      }      DispatchQueue.main.async { [weak self] in         self?.handleCaptcha(captchaUrl: captchaUrl)      }   }.resume()}