Aller au contenu principal

ASWebAuthenticationSession

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 :

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).

import SwiftUI
import AuthenticationServices

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

@State private var isAuthenticated = false

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

let idPayController = IDPayAuthenticationController()

Pour valider le paiement, créez une fonction appelée authenticatePayment.

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).

remarque

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

remarque

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.