---
title: ASWebAuthenticationSession
description: 'Как реализовать процесс захвата Верификации без предъявления карты на iOS с помощью ASWebAuthenticationSession: контроллер аутентификации, настройка сессии и необходимые разрешения.'
canonical: https://developer.unico.io/ru/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/ios/aswebauthenticationsession
locale: ru
generated_by: markdown-export
---

Для использования на iOS одним из рекомендуемых подходов является использование ASWebAuthenticationSession.

После создания транзакции и получения ссылки на транзакцию рекомендуется следующая реализация:

- В вашем обычном потоке (который включает Верификацию без предъявления карты) вы откроете ASWebAuthenticationSession со ссылкой, сгенерированной через API.
- Вы можете настроить это открытие так, как удобнее для вашего приложения.
- Вы будете отслеживать изменение URL (на `redirectUrl`), а затем закроете страницу.

Чтобы поток работал, необходимо выполнить следующие шаги:

### Шаг 1: Создание контроллера аутентификации платежа

Первый шаг — создать контроллер аутентификации платежа. Для этого создайте класс с именем `IDPayAuthenticationController` (или любым другим предпочитаемым вами именем).

Затем импортируйте фреймворк `AuthenticationServices` в начале класса.

Объявите класс как `NSObject` и реализуйте протокол `ASWebAuthenticationPresentationContextProviding`.

В результате должно получиться следующее:

```swift
import AuthenticationServices

class IDPayAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
           if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
               if let mainWindow = windowScene.windows.first {
                   return mainWindow
               }
           }
           return ASPresentationAnchor()
       }
}
```

### Шаг 2: Реализация аутентификации

Откройте файл, в котором будет выполняться аутентификация, и добавьте необходимые импорты (в нашем примере мы делаем это в `ContentView.swift`).

```swift
import SwiftUI
import AuthenticationServices
```

Чтобы контролировать состояние аутентификации, мы создадим свойство `@State`.

```swift
@State private var isAuthenticated = false
```

Создайте экземпляр класса `IDPayAuthenticationController` вне тела структуры `ContentView`.

```swift
let idPayController = IDPayAuthenticationController()
```

Чтобы проверить платёж, создайте функцию под названием `authenticatePayment`.

```swift
func authenticatePayment() {
    guard let url = URL(string: "URL_AUTHENTICATION") else { return }

    var session: ASWebAuthenticationSession?
    session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
        guard callbackURL != nil else {
            if let error = error {
                return print("Error during authentication: \(error.localizedDescription)")
            }
            return
        }

        // Processes the callback URL to check whether authentication succeeded
        session?.cancel()
        isAuthenticated = true
    }

    session?.presentationContextProvider = idPayController
    session?.prefersEphemeralWebBrowserSession = true
    session?.start()
}
```

:::danger
Не забудьте изменить URL `URL_AUTHENTICATION` на URL аутентификации, полученный в вашей транзакции, а также `callbackURLScheme` `BUNDLE` на редирект, предоставленный при создании вашей транзакции (рекомендуем использовать Bundle Identifier вашего приложения).
:::

:::note
Важно установить `prefersEphemeralWebBrowserSession` в значение `true`, чтобы обеспечить уникальную аутентификацию для каждой транзакции.
:::

:::note
Для корректной работы требуются некоторые разрешения, такие как:
- Камера
- Геолокация
:::

Чтобы узнать больше, рекомендуем ознакомиться с официальной документацией [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession).