Lewati ke konten utama

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

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

catatan

Penting untuk mengatur prefersEphemeralWebBrowserSession menjadi true untuk memastikan autentikasi unik per transaksi.

catatan

Beberapa izin diperlukan agar dapat berfungsi dengan benar, seperti:

  • Kamera
  • Geolokasi

Untuk informasi lebih lanjut, kami menyarankan untuk membaca dokumentasi resmi ASWebAuthenticationSession.