---
title: ASWebAuthenticationSession
description: 'كيفية تنفيذ تجربة الالتقاط الخاصة بالتحقق من البطاقة غير الحاضرة على iOS باستخدام ASWebAuthenticationSession: وحدة تحكم المصادقة (authentication controller)، إعداد الجلسة، والأذونات المطلوبة.'
canonical: https://developer.unico.io/ar/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/ios/aswebauthenticationsession
locale: ar
generated_by: markdown-export
---

بالنسبة للاستخدام على iOS، يُعد استخدام ASWebAuthenticationSession إحدى الطرق الموصى بها.

بعد إنشاء المعاملة والحصول على رابط المعاملة، يُوصى بالتنفيذ التالي:

- في تدفقك المعتاد (الذي يتضمن التحقق من البطاقة غير الحاضرة)، ستفتح ASWebAuthenticationSession بالرابط الذي تم إنشاؤه عبر API.
- يمكنك تخصيص هذا الفتح بالطريقة الأنسب لتطبيقك.
- ستراقب ما إذا تغيّر الرابط (URL) (إلى `redirectUrl`) ثم تغلق الصفحة.

لكي يعمل التدفق، تحتاج إلى اتباع الخطوات التالية:

### الخطوة 1: إنشاء وحدة تحكم مصادقة الدفع

الخطوة الأولى هي إنشاء وحدة تحكم مصادقة الدفع. للقيام بذلك، أنشئ فئة (class) باسم `IDPayAuthenticationController` (أو أي اسم تفضله).

بعد ذلك، قم باستيراد إطار العمل `AuthenticationServices` في أعلى الفئة (class).

أعلن عن الفئة (class) كـ `NSObject` وقم بتنفيذ بروتوكول `ASWebAuthenticationPresentationContextProviding`.

يجب أن تكون النتيجة كالتالي:

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

### الخطوة 2: تنفيذ المصادقة

افتح الملف الذي ستقوم فيه بتنفيذ المصادقة وأضف عمليات الاستيراد (imports) اللازمة (في مثالنا، نقوم بذلك في `ContentView.swift`).

```swift
import SwiftUI
import AuthenticationServices
```

للتحكم في حالة المصادقة، سننشئ خاصية (property) من نوع `@State`.

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

أنشئ نسخة (instance) من الفئة `IDPayAuthenticationController` خارج جسم (body) هيكل (structure) `ContentView`.

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

للتحقق من صحة الدفع، أنشئ دالة (function) باسم `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
تذكّر تغيير الرابط `URL_AUTHENTICATION` إلى رابط المصادقة الذي تم استلامه في معاملتك، وكذلك `callbackURLScheme` `BUNDLE` إلى إعادة التوجيه (redirect) المقدمة عند إنشاء معاملتك (نوصي باستخدام Bundle Identifier الخاص بتطبيقك).
:::

:::note
من المهم ضبط `prefersEphemeralWebBrowserSession` على `true` لضمان مصادقة فريدة لكل معاملة.
:::

:::note
بعض الأذونات مطلوبة لكي يعمل بشكل صحيح، مثل:
- الكاميرا
- الموقع الجغرافي
:::

لمعرفة المزيد، نوصي بقراءة [وثائق ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession) الرسمية.