ASWebAuthenticationSession
Für die Nutzung unter iOS ist die Verwendung von ASWebAuthenticationSession einer der empfohlenen Ansätze.
Nach dem Erstellen der Transaktion und dem Abrufen des Transaktionslinks wird folgende Implementierung empfohlen:
- In Ihrem regulären Ablauf (der Verifizierung ohne physische Karte einschließt) öffnen Sie die ASWebAuthenticationSession mit dem über die API generierten Link.
- Sie können dieses Öffnen so anpassen, wie es für Ihre App am besten geeignet ist.
- Sie überwachen, ob sich die URL geändert hat (zur
redirectUrl) und schließen dann die Seite.
Damit der Ablauf funktioniert, müssen Sie die folgenden Schritte befolgen:
Schritt 1: Erstellen des Zahlungsauthentifizierungscontrollers
Der erste Schritt besteht darin, den Zahlungsauthentifizierungscontroller zu erstellen. Erstellen Sie dazu eine Klasse namens IDPayAuthenticationController (oder einen beliebigen anderen Namen Ihrer Wahl).
Importieren Sie anschließend das AuthenticationServices-Framework am Anfang der Klasse.
Deklarieren Sie die Klasse als NSObject und implementieren Sie das Protokoll ASWebAuthenticationPresentationContextProviding.
Das Ergebnis sollte wie folgt aussehen:
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()
}
}
Schritt 2: Implementieren der Authentifizierung
Öffnen Sie die Datei, in der Sie die Authentifizierung durchführen, und fügen Sie die erforderlichen Imports hinzu (in unserem Beispiel geschieht dies in ContentView.swift).
import SwiftUI
import AuthenticationServices
Um den Authentifizierungsstatus zu steuern, erstellen wir eine @State-Eigenschaft.
@State private var isAuthenticated = false
Erstellen Sie eine Instanz der Klasse IDPayAuthenticationController außerhalb des Bodys der Struktur ContentView.
let idPayController = IDPayAuthenticationController()
Um die Zahlung zu validieren, erstellen Sie eine Funktion namens 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()
}
Denken Sie daran, die URL URL_AUTHENTICATION durch die in Ihrer Transaktion empfangene Authentifizierungs-URL zu ersetzen sowie das callbackURLScheme BUNDLE durch die beim Erstellen Ihrer Transaktion bereitgestellte Weiterleitung (wir empfehlen die Verwendung des Bundle Identifier Ihrer App).
Es ist wichtig, prefersEphemeralWebBrowserSession auf true zu setzen, um eine eindeutige Authentifizierung pro Transaktion sicherzustellen.
Für die ordnungsgemäße Funktion sind einige Berechtigungen erforderlich, wie zum Beispiel:
- Kamera
- Standortermittlung
Um mehr zu erfahren, empfehlen wir, die offizielle ASWebAuthenticationSession-Dokumentation zu lesen.