ASWebAuthenticationSession
Untuk penggunaan iOS, menggunakan ASWebAuthenticationSession adalah salah satu pendekatan yang direkomendasikan.
Setelah membuat transaksi dan mendapatkan tautan transaksi, implementasi berikut disarankan:
- Dalam alur reguler Anda (yang menyertakan Verifikasi Kartu Tidak Hadir), Anda akan membuka ASWebAuthenticationSession dengan tautan yang dihasilkan melalui API.
- Anda dapat menyesuaikan pembukaan ini dengan cara yang paling sesuai untuk aplikasi Anda.
- Anda akan memantau apakah URL telah berubah (menjadi
redirectUrl) lalu menutup halaman tersebut.
Agar alur ini berfungsi, Anda perlu mengikuti langkah-langkah berikut:
Langkah 1: Membuat Payment Authentication Controller
Langkah pertama adalah membuat payment authentication controller. Untuk melakukannya, buat sebuah class bernama IDPayAuthenticationController (atau nama lain sesuai preferensi Anda).
Selanjutnya, impor framework AuthenticationServices di bagian atas class tersebut.
Deklarasikan class tersebut sebagai NSObject dan implementasikan protocol ASWebAuthenticationPresentationContextProviding.
Hasilnya harus seperti berikut:
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()
}
}
Langkah 2: Mengimplementasikan Autentikasi
Buka file tempat Anda akan melakukan autentikasi dan tambahkan import yang diperlukan (dalam contoh kami, kami melakukan ini di ContentView.swift).
import SwiftUI
import AuthenticationServices
Untuk mengontrol status autentikasi, kami akan membuat sebuah property @State.
@State private var isAuthenticated = false
Buat sebuah instance dari class IDPayAuthenticationController di luar body dari struct ContentView.
let idPayController = IDPayAuthenticationController()
Untuk memvalidasi pembayaran, buat sebuah function bernama 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()
}
Ingat untuk mengubah URL URL_AUTHENTICATION ke URL autentikasi yang diterima dalam transaksi Anda, dan juga callbackURLScheme BUNDLE ke redirect yang diberikan saat membuat transaksi Anda (kami menyarankan menggunakan Bundle Identifier aplikasi Anda).
Penting untuk mengatur prefersEphemeralWebBrowserSession menjadi true untuk memastikan autentikasi unik per transaksi.
Beberapa izin diperlukan agar dapat berfungsi dengan benar, seperti:
- Kamera
- Geolokasi
Untuk informasi lebih lanjut, kami menyarankan untuk membaca dokumentasi resmi ASWebAuthenticationSession.