---
title: Revalidasi Senyap
description: Menggunakan mesin Revalidasi Senyap, yang menganalisis konteks perilaku pengguna dalam efek jaringan Unico dan memberikan sinyal keyakinan untuk transaksi saat ini. Dengan kata lain, kami memberikan tingkat keyakinan bahwa inilah pengguna yang diharapkan dalam transaksi tersebut.
canonical: https://developer.unico.io/id/developers/sdks-and-tools/flutter/capture-flow/capture-types/silent-revalidation
locale: id
generated_by: markdown-export
---

Menggunakan mesin Revalidasi Senyap, yang menganalisis konteks perilaku pengguna dalam efek jaringan Unico dan memberikan sinyal keyakinan untuk transaksi saat ini. Dengan kata lain, kami memberikan tingkat keyakinan bahwa inilah pengguna yang diharapkan dalam transaksi tersebut.

:::info[Persyaratan]
Versi minimum: `4.62.0`
:::

## Atribut UnicoCheckPrepareInfo

| Attribute | Type | Required | Description |
|---|---|:-:|---|
| `externalUserId` | `String` | ✅ | Pengidentifikasi pengguna di sistem Anda. Di-hash secara otomatis dengan SHA-256 sebelum transmisi, tidak pernah dikirim dalam bentuk teks biasa. |

## Memulai Revalidasi Senyap

****Langkah 1** — Menerapkan `initializeSDK` di kode native**

`initializeSDK` tidak diekspos di Dart. Metode ini harus berjalan sebelum Flutter engine dimulai, jadi Anda memanggilnya di kode native aplikasi Anda — `Application.onCreate` di Android dan `application(_:didFinishLaunchingWithOptions:)` di iOS.

  :::warning[Panggil saat aplikasi diluncurkan]
  `UnicoSDK.initializeSDK` harus dipanggil sesegera mungkin saat aplikasi diluncurkan. Memanggilnya lebih lambat mengurangi waktu pemrosesan latar belakang dan meningkatkan kemungkinan respons autentikasi yang tidak meyakinkan.
  :::

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

    Daftarkan class tersebut di `android/app/src/main/AndroidManifest.xml`:

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

    Plugin ini mengekspos SDK capture native ke aplikasi Anda, sehingga `UnicoSDK` sudah ada di compile classpath Anda — tidak diperlukan dependensi tambahan di `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` adalah sebuah `AcessoBioConfigDataSource` — `sdkKey` berasal dari `getHostKey()` dan bundle dari `getBundleIdentifier()`:

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

  Jika `environment` dihilangkan, nilai defaultnya adalah produksi.

****Langkah 2** — Menerapkan `startSilentValidation`**

Setelah `initializeSDK`, kaitkan pengumpulan yang sudah berlangsung dengan pengguna yang teridentifikasi dengan memanggil `startSilentValidation` menggunakan `UnicoCheckPrepareInfo` yang berisi `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` yang dikembalikan selesai ketika validasi berhasil dimulai, dan melempar `UnicoError` jika gagal.

  Jika validasi terjadi di awal alur, misalnya saat login, tunggu `Future` selesai sebelum melanjutkan ke Langkah 3.

  ## Errors

  | Code | Meaning |
  |---|---|
  | `75001` | SDK belum diinisialisasi. `initializeSDK` belum dipanggil, belum selesai, atau gagal. |
  | `75000` | Kegagalan capture generik. |

  `UnicoError.info` membawa langkah alur yang gagal. Nilai ini tersedia di iOS dan selalu null di Android.

****Langkah 3** — Membuat proses dan melakukan autentikasi**

Dengan validasi yang sedang berlangsung, buat proses verifikasi untuk menyelesaikan autentikasi. Lihat [Referensi API ▸ API ▸ Buat Proses](/developers/api-reference/api/post-processes).

  Sertakan `externalUserId` yang sama yang dikirim dalam `UnicoCheckPrepareInfo` dari Langkah 2 di dalam body permintaan — inilah yang memungkinkan backend mengaitkan pembuatan proses dengan validasi yang sudah berlangsung.

  ```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"
    }'
  ```

  Respons ini mencakup field `silentAuth.result` yang berisi hasil autentikasi:

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

  | Field | Type | Description |
  |---|---|---|
  | `silentAuth.result` | string | `yes` atau `no` — lihat nilai yang mungkin di bawah ini. |

  <details>
  **`silentAuth.result` — nilai yang mungkin**

  | Value | Meaning |
  |---|---|
  | `yes` | Autentikasi disetujui, pengguna dikenali dengan keyakinan yang memadai, tidak diperlukan pengambilan tambahan. |
  | `no` | Data tidak cukup untuk menyetujui secara senyap. Disarankan untuk melakukan autentikasi melalui biometrik (selfie) atau metode alternatif lain. |

</details>