---
title: ASWebAuthenticationSession
description: 'Comment implémenter l''expérience de capture Vérification sans carte présente sur iOS avec ASWebAuthenticationSession : contrôleur d''authentification, configuration de la session et permissions requises.'
canonical: https://developer.unico.io/fr/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/ios/aswebauthenticationsession
locale: fr
generated_by: markdown-export
---

Pour un usage sur iOS, l'utilisation d'ASWebAuthenticationSession est l'une des approches recommandées.

Après avoir créé la transaction et obtenu le lien de transaction, l'implémentation suivante est recommandée :

- Dans votre flux habituel (qui inclut Vérification sans carte présente), vous ouvrirez l'ASWebAuthenticationSession avec le lien généré via l'API.
- Vous pouvez personnaliser cette ouverture de la manière qui convient le mieux à votre application.
- Vous surveillerez si l'URL a changé (vers le `redirectUrl`), puis vous fermerez la page.

Pour faire fonctionner le flux, vous devez suivre les étapes suivantes :

### Étape 1 : créer le contrôleur d'authentification de paiement

La première étape consiste à créer le contrôleur d'authentification de paiement. Pour cela, créez une classe appelée `IDPayAuthenticationController` (ou tout autre nom de votre choix).

Ensuite, importez le framework `AuthenticationServices` en haut de la classe.

Déclarez la classe comme `NSObject` et implémentez le protocole `ASWebAuthenticationPresentationContextProviding`.

Le résultat devrait être :

```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()
       }
}
```

### Étape 2 : implémenter l'authentification

Ouvrez le fichier dans lequel vous effectuerez l'authentification et ajoutez les imports nécessaires (dans notre exemple, nous faisons cela dans `ContentView.swift`).

```swift
import SwiftUI
import AuthenticationServices
```

Pour contrôler l'état de l'authentification, nous allons créer une propriété `@State`.

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

Créez une instance de la classe `IDPayAuthenticationController` en dehors du corps de la structure `ContentView`.

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

Pour valider le paiement, créez une fonction appelée `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
N'oubliez pas de remplacer l'URL `URL_AUTHENTICATION` par l'URL d'authentification reçue dans votre transaction, ainsi que le `callbackURLScheme` `BUNDLE` par la redirection fournie lors de la création de votre transaction (nous recommandons d'utiliser le Bundle Identifier de votre application).
:::

:::note
Il est important de définir `prefersEphemeralWebBrowserSession` sur `true` pour garantir une authentification unique par transaction.
:::

:::note
Certaines permissions sont requises pour un fonctionnement correct, telles que :
- Caméra
- Géolocalisation
:::

Pour en savoir plus, nous recommandons de consulter la documentation officielle de [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession).