Перейти к основному содержимому
Захват в iOS

Откройте захват в системной браузерной сессии и верните человека в ваше приложение.

Markdown

Ваш бэкенд создаёт процесс в Human Plugin с потоком Journey и callbackUri, использующим URL-схему вашего приложения. Приложение открывает link из ответа в ASWebAuthenticationSession. Когда захват завершается, сессия возвращается в приложение через вашу схему.

Сохраните id Human Plugin из ответа на создание. По нему ваш бэкенд читает результат.

Требования​

  • iOS 13 или новее
  • Xcode 14 или новее
  • Фреймворк AuthenticationServices (встроенный)
  • URL-схема, уникальная для вашего приложения, например myapp

1. Создайте процесс с вашей схемой​

Ваш бэкенд передаёт схему как callbackUri:

{
"flow": "humantoken",
"clientId": "client-a",
"correlationId": "order-1001",
"credential": { "type": "DUI_TYPE_NG_BVN", "value": "<document number>" },
"callbackUri": "myapp://callback"
}

и возвращает приложению id и link.

2. Создайте провайдер контекста представления​

import AuthenticationServices
import UIKit

class CaptureContextProvider: NSObject, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first else {
return ASPresentationAnchor()
}
return window
}
}

3. Создайте менеджер сессии​

import AuthenticationServices

class CaptureSessionManager {
static let shared = CaptureSessionManager()
private var session: ASWebAuthenticationSession?
private let contextProvider = CaptureContextProvider()

/// Вызывает completion со значением true, когда захват завершён, и false, когда человек закрыл сессию.
func start(link: URL, completion: @escaping (Bool) -> Void) {
let newSession = ASWebAuthenticationSession(
url: link,
callbackURLScheme: "myapp"
) { callbackURL, _ in
self.session = nil
completion(callbackURL != nil)
}
newSession.presentationContextProvider = contextProvider
newSession.prefersEphemeralWebBrowserSession = true
newSession.start()
session = newSession
}
}
информация

callbackURLScheme принимает только имя схемы (myapp) без ://.

4. Запустите захват​

guard let url = URL(string: link) else { return }

CaptureSessionManager.shared.start(link: url) { ended in
if ended {
// Захват завершён. Попросите бэкенд прочитать результат
// через GET /v1/processes/{id}, используя id Human Plugin.
} else {
// Человек закрыл сессию.
}
}

Итог​

ФайлНазначение
CaptureContextProvider.swiftПровайдер контекста представления
CaptureSessionManager.swiftЖизненный цикл ASWebAuthenticationSession