# Integrate the Secure ID Verification SDK

## Prerequisites

1. [Complete the Getting Started Guide](https://docs.sudoplatform.com/guides/getting-started)
2. [Integrate the User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk)

## Get Started

* [Integrate the iOS SDK](#integrate-the-ios-sdk)
* [Integrate the Android SDK](https://docs.sudoplatform.com/users/integrate-the-user-sdk#integrate-the-android-sdk)
* [Integrate the JS SDK](https://docs.sudoplatform.com/users/integrate-the-user-sdk#integrate-the-js-sdk)

## Integrate the iOS SDK

To use the Secure ID Verification SDK in an iOS app, you need to install the SudoIdentityVerification package via Swift Package Manager

Open your project settings in XCode, and go to the `Package Dependencies` tab. Click on the `+` sign to add a dependency.&#x20;

Enter the repository URL [`https://github.com/sudoplatform/sudo-secure-id-verification-ios.git`](https://github.com/sudoplatform/sudo-secure-id-verification-ios.git) in the top right search box and select the `sudo-secure-id-verification-ios` repository.&#x20;

Select the required version and `Add Package`.

Sudo Platform SDKs conform to semantic versioning so in most cases you will leave the Dependency Rule as `Up to Next Major Version` to receive regular updates without introducing any breaking changes.

This will resolve the local package dependency and install the latest version of the Secure ID Verification SDK.

{% hint style="info" %}
In order to instantiate an Secure ID Verification client, make sure you have followed instructions for [Getting Started](https://docs.sudoplatform.com/guides/getting-started) and [User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk) (see [Prerequisites](#prerequisites) above)
{% endhint %}

To instantiate a client in your application, add the following:

{% tabs %}
{% tab title="Swift" %}

```swift
import SudoIdentityVerification

do {
    let identityVerificationClient: SudoIdentityVerificationClient = try DefaultSudoIdentityVerificationClient(
        sudoUserClient: userClient
    )
catch {
    // Handle initialization error. An error might be thrown due to invalid
    // or missing confiugration file.
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
You only need one client instance for a given user and device. Instantiating multiple clients with the same configuration and using them at the same time may cause unexpected runtime errors to occur.
{% endhint %}

## Integrate the Android SDK

To use **Secure ID Verification SDK** in an Android app you need to add `SudoIdentityVerification` library as a dependency to your project.

> Edit the app module Gradle script (build.gradle) and add `SudoIdentityVerification` library as a dependency.

{% tabs %}
{% tab title="gradle" %}

```java
dependencies {
    api 'com.sudoplatform:sudoidentityverification:$latest_version'
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The latest version of the SDK can be found at [SDK Releases](https://docs.sudoplatform.com/guides/identity-verification/sdk-releases).
{% endhint %}

> Edit AndroidManifest.xml to add the following app permissions:

{% tabs %}
{% tab title="Diff" %}

```diff
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+   xmlns:tools="http://schemas.android.com/tools"
    package="com.sudoplatform.sampleapp">

+   <uses-permission android:name="android.permission.INTERNET" />
+   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+   <uses-permission android:name="android.permission.WAKE_LOCK" />
+   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
+       tools:replace="android:allowBackup"
+       android:allowBackup="false"
```

{% endtab %}
{% endtabs %}

> Instantiating and initializing a client:

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
val client = SudoIdentityVerificationClient.builder(appContext, sudoUserClient).build()
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
You only need one client instance for a given user per device. Instantiating multiple clients with the same configuration and using them at the same time may cause unexpected runtime errors to occur.
{% endhint %}

## Integrate the JS SDK

To use the **Sudo Secure ID Verification SDK** in a Web or Node.js project, you must add `@sudoplatform/sudo-secure-id-verification` as a dependency to your project.

```bash
yarn add '@sudoplatform/sudo-secure-id-verification'
# or
npm install --save '@sudoplatform/sudo-secure-id-verification'
```

### SDK Configuration

Before starting to use `SudoSecureIdVerificationClient` you must configure it using the configuration information provided to you for your instance of the Sudo Platform. [Download](https://docs.sudoplatform.com/getting-started#step-2-download-the-sdk-configuration-file) and [install](https://docs.sudoplatform.com/getting-started#install-the-sdk-configuration-file) your project's SDK configuration file before proceeding.

> Instantiating and initializing a client:

{% tabs %}
{% tab title="TypeScript" %}

```typescript
import { DefaultConfigurationManager } from '@sudoplatform/sudo-common'
import { DefaultSudoUserClient } from '@sudoplatform/sudo-user'
import { DefaultApiClientManager } from '@sudoplatform/sudo-api-client'
import { DefaultSudoSecureIdVerificationClient } from '@sudoplatform/sudo-secure-id-verification'

// Set configuration (content of file downloaded in previous step) in the configuration manager
DefaultConfigurationManager.getInstance().setConfig(configJson)

// Set up Sudo User client
const sudoUserClient = new DefaultSudoUserClient()
DefaultApiClientManager.getInstance().setAuthClient(sudoUserClient)

// Instantiate and initialize the client
const client = new DefaultSudoSecureIdVerificationClient({ sudoUserClient })
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
You only need one client instance for a given user per device. Instantiating multiple clients with the same configuration and using them at the same time may cause unexpected runtime errors to occur.
{% endhint %}
