---
title: ASWebAuthenticationSession
description: 'Cara mengimplementasikan pengalaman pengambilan Verifikasi Kartu Tidak Hadir di iOS menggunakan ASWebAuthenticationSession: authentication controller, pengaturan sesi, dan izin yang diperlukan.'
canonical: https://developer.unico.io/id/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/ios/aswebauthenticationsession
locale: id
generated_by: markdown-export
---

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:

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

```swift
import SwiftUI
import AuthenticationServices
```

Untuk mengontrol status autentikasi, kami akan membuat sebuah property `@State`.

```swift
@State private var isAuthenticated = false
```

Buat sebuah instance dari class `IDPayAuthenticationController` di luar body dari struct `ContentView`.

```swift
let idPayController = IDPayAuthenticationController()
```

Untuk memvalidasi pembayaran, buat sebuah function bernama `authenticatePayment`.

```swift
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
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).
:::

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

:::note
Beberapa izin diperlukan agar dapat berfungsi dengan benar, seperti:
- Kamera
- Geolokasi
:::

Untuk informasi lebih lanjut, kami menyarankan untuk membaca [dokumentasi resmi ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession).