---
title: إعادة التحقق الصامتة
description: يستخدم محرك إعادة التحقق الصامتة، الذي يحلل السياق السلوكي للمستخدم ضمن تأثير الشبكة الخاص بـ Unico ويقدّم إشارة الثقة الخاصة بالمعاملة الحالية. بعبارة أخرى، نقدّم مستوى الثقة بأن هذا هو المستخدم المتوقع في المعاملة.
canonical: https://developer.unico.io/ar/developers/sdks-and-tools/flutter/capture-flow/capture-types/silent-revalidation
locale: ar
generated_by: markdown-export
---

يستخدم محرك إعادة التحقق الصامتة، الذي يحلل السياق السلوكي للمستخدم ضمن تأثير الشبكة الخاص بـ Unico ويقدّم إشارة الثقة الخاصة بالمعاملة الحالية. بعبارة أخرى، نقدّم مستوى الثقة بأن هذا هو المستخدم المتوقع في المعاملة.

:::info[المتطلب]
الحد الأدنى للإصدار: `4.62.0`
:::

## سمات UnicoCheckPrepareInfo

| السمة | النوع | مطلوب | الوصف |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | معرّف المستخدم في نظامك. يتم تجزئته تلقائيًا باستخدام SHA-256 قبل الإرسال، ولا يُرسل مطلقًا بنص عادي. |

## بدء إعادة التحقق الصامتة

****الخطوة 1** — تنفيذ `initializeSDK` في الكود الأصلي (native)**

`initializeSDK` غير متاحة في Dart. يجب أن تُنفَّذ قبل بدء محرك Flutter، لذلك تستدعيها في الكود الأصلي (native) لتطبيقك — `Application.onCreate` على Android و`application(_:didFinishLaunchingWithOptions:)` على iOS.

  :::warning[استدعِها عند إطلاق التطبيق]
  يجب استدعاء `UnicoSDK.initializeSDK` في أقرب وقت ممكن عند إطلاق التطبيق. استدعاؤها لاحقًا يقلل من وقت المعالجة في الخلفية ويزيد من احتمال الحصول على استجابات مصادقة غير حاسمة.
  :::

  ### Android

    ```kotlin
    import android.app.Application
    import com.acesso.acessobio_android.onboarding.UnicoSDK
    import com.acesso.acessobio_android.onboarding.models.Environment
    import com.acesso.acessobio_android.onboarding.models.UnicoSDKConfig

    class MainApplication : Application() {
        override fun onCreate() {
            super.onCreate()

            UnicoSDK.initializeSDK(
                this,
                UnicoSDKConfig(
                    sdkKey = "your_sdk_key",
                    bundleId = "your_bundle_id",
                    environment = Environment.UAT
                )
            )
        }
    }
    ```

    سجّل الفئة في `android/app/src/main/AndroidManifest.xml`:

    ```xml
    <application android:name=".MainApplication">
    ```

    يوفّر الـ plugin الـ SDK الأصلي الخاص بالالتقاط لتطبيقك، لذا فإن `UnicoSDK` موجود بالفعل في مسار التصريف (compile classpath) — ولا حاجة إلى أي تبعية إضافية في `android/app/build.gradle`.

### iOS

    ```swift
    import AcessoBio
    import Flutter
    import UIKit

    @main
    class AppDelegate: FlutterAppDelegate {
        override func application(
            _ application: UIApplication,
            didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
        ) -> Bool {
            UnicoSDK.initializeSDK(config: YourUnicoConfig(), environment: .UAT)

            GeneratedPluginRegistrant.register(with: self)
            return super.application(application, didFinishLaunchingWithOptions: launchOptions)
        }
    }
    ```

    إن `config` هو كائن `AcessoBioConfigDataSource` — يُؤخذ `sdkKey` من `getHostKey()` ومعرّف الحزمة من `getBundleIdentifier()`:

    ```swift
    final class YourUnicoConfig: NSObject, AcessoBioConfigDataSource {
        func getBundleIdentifier() -> String { "your_bundle_id" }
        func getHostKey() -> String { "your_sdk_key" }
    }
    ```

  إذا تم حذف `environment`، فإن القيمة الافتراضية هي بيئة الإنتاج.

****الخطوة 2** — تنفيذ `startSilentValidation`**

بعد `initializeSDK`، اربط عملية الجمع الجارية بالفعل بالمستخدم الذي تم تحديده عن طريق استدعاء `startSilentValidation` مع كائن `UnicoCheckPrepareInfo` يحتوي على `externalUserId`.

  ```dart
  import 'package:unico_check/unico_check.dart';

  try {
    await UnicoSilentAuthDefault().startSilentValidation(
      UnicoCheckPrepareInfo(externalUserId: 'external_user_id'),
    );
  } on UnicoError catch (error) {
    // error.code, error.description, error.info
  }
  ```

  يكتمل كائن `Future` المُعاد عندما يبدأ التحقق بنجاح، ويطلق `UnicoError` في حالة الفشل.

  إذا حدث التحقق في بداية التدفق، على سبيل المثال عند تسجيل الدخول، انتظر اكتمال `Future` قبل الانتقال إلى الخطوة 3.

  ## الأخطاء

  | الرمز | المعنى |
  |---|---|
  | `75001` | لم يتم تهيئة SDK. لم يتم استدعاء `initializeSDK`، أو لم ينتهِ بعد، أو فشل. |
  | `75000` | فشل عام في الالتقاط. |

  يحمل `UnicoError.info` خطوة التدفق التي فشلت. وهو متاح على iOS ويكون دائمًا null على Android.

****الخطوة 3** — إنشاء العملية والمصادقة**

مع استمرار التحقق، أنشئ عملية التحقق لإكمال المصادقة. راجع [مرجع API ▸ API ▸ إنشاء العملية](/developers/api-reference/api/post-processes).

  أدرِج نفس `externalUserId` المُرسل في `UnicoCheckPrepareInfo` من الخطوة 2 داخل نص الطلب (request body) — هذا ما يسمح للخادم الخلفي (backend) بربط إنشاء العملية بالتحقق الجاري بالفعل.

  ```bash
  curl -X POST https://api.id.unico.app/processes/v1 \
    -H "Authorization: Bearer $TOKEN" \
    -H "APIKEY: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "subject": {
        "duiType": 1,
        "code": "12345678909",
        "name": "Luke Skywalker",
        "gender": "M",
        "birthDate": "2000-05-20",
        "email": "luke@example.com",
        "phone": "5519725570707"
      },
      "useCase": "Onboarding",
      "externalUserId": "external_user_id"
    }'
  ```

  تتضمن الاستجابة الحقل `silentAuth.result` الذي يحمل نتيجة المصادقة:

  ```json
  {
      "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
      "status": 3,
      "silentAuth": {
          "result": "yes"
      }
  }
  ```

  | الحقل | النوع | الوصف |
  |---|---|---|
  | `silentAuth.result` | string | `yes` أو `no` — راجع القيم المحتملة أدناه. |

  <details>
  **`silentAuth.result` — القيم المحتملة**

  | القيمة | المعنى |
  |---|---|
  | `yes` | تمت الموافقة على المصادقة، تم التعرف على المستخدم بثقة كافية، ولا حاجة لالتقاط إضافي. |
  | `no` | بيانات غير كافية للموافقة الصامتة. يُنصح بالمصادقة عبر القياسات الحيوية (السيلفي) أو طريقة بديلة أخرى. |

</details>