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()
}
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).
Il est important de définir prefersEphemeralWebBrowserSession sur true pour garantir une authentification unique par transaction.
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.