Migration Guide

Migration to 9.14.0

Renamed neutral and black color palette tokens on Android

The neutral and black keys in theme's colorPalette have been renamed:

If you provided the theme via a JSON config, rename the keys inside colorPalette:

"colorPalette": {
+  "neutralLight": "#ffffff",
-  "neutral": "#ffffff",
+  "neutralDark": "#000000",
-  "black": "#000000",
  "brand50": "#e5f0ff",
  ...
  "positive500": "#189F60",
  "positive600": "#189F60",
  "positive800": "#0C5030"
}

Theme JSON that still uses the old neutral / black keys will silently fall back to the defaults (#FFFFFF and #000000), because unknown keys are ignored during parsing. Update your JSON to use the new keys to keep your customizations applied.

Migration to 9.13.0

Changed the default values of lensesCheck and faceMaskCheck parameters in SelfieScan module

The default values for lensesCheck and faceMaskCheck parameters in SelfieScan module have been changed from false to true. If you did not previously configure these flags, they will now be enforced by default during face capture.

To preserve the previous behavior, explicitly disable these flags.

SQLCipher attribution required if you ship an open-source licenses screen on Android

Local Room databases used by the SDK are now encrypted at rest with SQLCipher for Android, distributed under a BSD-style license. The license requires consumers that redistribute binaries (i.e. your application) to reproduce its copyright notice "in the documentation and/or other materials provided with the distribution".

If your application includes an "Open Source Licenses" screen, please add the SQLCipher notice listed in Licenses. No code change is needed if you do not ship such a screen.

Migration to 9.11.0

Removed localization keys on iOS

Renamed localization keys on iOS

Migration to 9.10.0

Removed parameters

Color palette changes on Android

If you previously customized the application appearance by updating these colors from the color palette:

{
    "colorPalette": {
        "negative500": "#FF5A5F",
        "negative600": "#E71111",
        "positive500": "#189F60",
        "positive600": "#189F60"
    }
}

These keys have now been migrated to the following values:

The mentioned colors are used for the following Color Modes:

ID Capture V2 - Error Screen Customization on Android

Wrong document side customization:

If you previously customized the Wrong document side error screen, add the following new string resources:

Add these strings:

<string name="onboard_sdk_id_capture_error_side_front">Capture the front side of the ID</string>
<string name="onboard_sdk_id_capture_error_side_back">Capture the back side of the ID</string>

Previous string:

<string name="onboard_sdk_id_capture_error_side">You’ve scanned the wrong document side. Please scan your document again.</string>

This string is no longer used.

No internet connection customization:

If you previously customized the No internet connection error screen, add the following new string resource:

Add this string:

<string name="onboard_sdk_no_internet_title">No internet connection</string>

Previous string:

<string name="onboard_sdk_id_capture_error_title">There was a problem</string>

The previously used string is still in use for other error screens and should be kept in your resources.

Retry button customization:

The retry button is now customized using a different string resource:

<string name="onboard_sdk_id_capture_retry">Refresh</string>

Previous string:

<string name="onboard_sdk_no_network_snackbar_action_text">Retry</string>

The previously used string is still in use for other error screens and should be kept in your resources.

Selfie V2 - Error Screen Customization on Android

No internet connection customization:

If you previously customized the No internet connection error screen, add the following new string resource:

Add this string:

<string name="onboard_sdk_no_internet_title">No internet connection</string>

Previous string:

<string name="onboard_sdk_face_scan_failed_feedback_selfie_capture_failed_title">There was a problem</string>

The previously used string is still in use for other error screens and should be kept in your resources.

Changes in behavior for device environment detection on Android

The behavior when detecting device environment vulnerabilities has changed:

Expected crashes when running in a virtual environment on Android

It is expected that the app crashes with the following stacktraces when a virtual environment is used. For example:

java.lang.NullPointerException
    at com.incode.welcome_sdk.ThemeConfiguration$Builder.setLabelSmallStyle(SourceFile:1066)
    at com.incode.welcome_sdk.f.c(SourceFile:150)
    at com.incode.welcome_sdk.data.local.m.as(SourceFile:22)
    at com.incode.welcome_sdk.IncodeWelcome.startOnboardingSection(SourceFile:18)
java.lang.NullPointerException: Attempt to get length of null array
    at com.incode.welcome_sdk.data.IncodeWelcomeRepository.d(SourceFile:320)
    at com.incode.welcome_sdk.data.IncodeWelcomeRepository.i(SourceFile:214)

Selfie V2 - No Internet Error Screen Retry Button Change on Android

Retry button customization:

The retry button label shown on the Selfie Scan no internet error screen now uses a dedicated string resource:

<string name="onboard_sdk_face_scan_retry">Refresh</string>

Previous string:

<string name="onboard_sdk_try_again">Try again</string>

If you override onboard_sdk_try_again to customize the retry button on the no internet screen, you must now override onboard_sdk_face_scan_retry instead.

The onboard_sdk_try_again string is still used for other retry scenarios.

Selfie V2 - Capture-Only Mode Success Screen Text Change on Android

Success label customization:

In capture-only mode, the Selfie Scan success screen now uses a different string resource:

<string name="onboard_sdk_face_captured">Face captured!</string>

Previous string:

<string name="onboard_sdk_enroll_success">Success!</string>

The previously used string is still in use for non-capture-only mode and should be kept in your resources.

ID Capture and Selfie V2 - Permission Open Settings Screen Text Change on Android

Open settings button customization:

The Open settings label shown on the Permission open settings screen now uses a dedicated string resource:

<string name="onboard_sdk_permission_allow_permission_action">Allow permission</string>

Previous string:

<string name="onboard_sdk_permission_open_setting_action">Open settings</string>

The previously used string is still in use for the Geolocation module and should be kept in your resources.

Migration to 9.9.0

Parameter Updates in IdScan module

Upload error screen customization on Android:

If you previously customized the upload error screen, add the following new string resource:

Add this string:

<string name="onboard_sdk_validation_error_button_text">Scan your ID</string>

Previous string:

<string name="onboard_sdk_id_capture_tutorial_title">Scan your ID</string>

This string is now used only for customizing the ID Capture V2 tutorial screen title.

Changed default values in FaceMatch module config on Android (optional)

With the move to UxV2, the showUserExists config is now false by default.

Migration to 9.8.0

Update string resources for the "Need Help" screen in the IdScan v2 module on Android

The "Need Help" screen has been redesigned on Android, and the customizable strings have been replaced.

If you override any of the following strings in your app, replace them with the new ones listed below.

No action is required if you do not override these strings.

Replaced string resources

Replace overrides of:

<string name="onboard_sdk_id_capture_help_title">Need help?</string>
<string name="onboard_sdk_id_capture_help_subtitle">Some considerations</string>
<string name="onboard_sdk_id_capture_help_manual_photo_button_text">Take the photo manually</string>
<string name="onboard_sdk_id_capture_help_align_title">Center your document in the frame</string>
<string name="onboard_sdk_id_capture_help_align_subtitle">The photo will be taken automatically</string>
<string name="onboard_sdk_id_capture_help_blur_title">Avoid blurriness on the document</string>
<string name="onboard_sdk_id_capture_help_blur_subtitle">Zoom in and out, or tap on the document</string>
<string name="onboard_sdk_id_capture_help_glare_title">Avoid glare on the document</string>
<string name="onboard_sdk_id_capture_help_glare_subtitle">Find a better lighting to avoid reflections</string>
<string name="onboard_sdk_id_capture_help_darkness_title">Avoid darkness on the document</string>
<string name="onboard_sdk_id_capture_help_darkness_subtitle">Find a place with better lighting</string>

with:

<string name="onboard_sdk_id_capture_common_issues_title">Common issues</string>
<string name="onboard_sdk_id_capture_common_issues_glare_title">Glare present</string>
<string name="onboard_sdk_id_capture_common_issues_glare_subtitle">Tilt the ID slightly up or down to minimize the reflection</string>
<string name="onboard_sdk_id_capture_common_issues_blur_title">Blur present</string>
<string name="onboard_sdk_id_capture_common_issues_blur_subtitle">Move ID further away or closer to your phone until the image is focused</string>
<string name="onboard_sdk_id_capture_common_issues_info_not_readable_title">Info is not readable</string>
<string name="onboard_sdk_id_capture_common_issues_info_not_readable_subtitle">Minimize camera shake by holding your phone steady</string>
<string name="onboard_sdk_id_capture_common_issues_try_again_button">@string/onboard_sdk_try_again</string>

Upgrade compileSdk on Android

With the update of the internal CameraX dependencies, you will need to upgrade your project's compileSdk to level 35:

compileSdk 35

Update Gradle Wrapper on Android

Android Gradle Wrapper 8.6.0 requires Gradle 8.7 or higher.

Update your Gradle wrapper configuration in gradle/wrapper/gradle-wrapper.properties:

distributionUrl=https://services.gradle.org/distributions/gradle-8.7-bin.zip

If you use any of the following optional dependencies on Android, make sure to update to the latest versions

implementation 'com.incode.sdk:nfc:1.5.1'

Migration to 9.6.0

E2EE variant removed

RN SDK 'e2ee' variant is no longer distributed, as e2ee functionality is now offered in a standard RN SDK variant.

Android optional dependencies

For Android, if you use any of the following optional dependencies, make sure to update to the latest versions

implementation 'com.incode.sdk:nfc:1.4.4'
implementation 'com.incode.sdk:video-streaming:1.6.0'
implementation 'com.incode.sdk:extensions:1.2.1'
implementation 'com.incode.sdk:model-face-recognition:3.5.1'
implementation 'com.incode.sdk:model-id-face-detection:3.5.1'
implementation 'com.incode.sdk:model-liveness-detection:3.2.1'

Android minSdk changes

For Android, if you use the video-streaming dependency, you need to upgrade your minSdk to 24 or higher. The requirement is coming from the OpenTok dependency, which now requires a minimum SDK version of 24. This update is necessary to ensure compatibility with the 16KB page size support mandated by Google starting from November 1st 2025. More info ( https://developer.android.com/guide/practices/page-sizes).

Migration to 9.5.0

Optional dependencies

For Android, if you use any of the following optional dependencies, make sure to update to the latest versions:

implementation 'com.incode.sdk:extensions:1.2.0'
implementation 'com.incode.sdk:nfc:1.4.3'

Updated resource name

If you wanted to customize the logo at the top of the IdScan V2 module, you needed to override the incode logo resource: onboard_sdk_incode_logo.xml.

This resource was not intended to be customizable, so please update your customizations to the new resource name: onboard_sdk_logo_top.xml.

By default, this resource is an empty 1x1 image, and you can customize it to your own logo.

Migration to 9.4.0

For Android, if you use any of the following optional dependencies, make sure to update to the latest versions:

implementation 'com.incode.sdk:model-face-recognition:3.5.0'
implementation 'com.incode.sdk:model-id-face-detection:3.5.0'
implementation 'com.incode.sdk:nfc:1.4.2'

The qr-face-login dependency is no longer available and has been removed in this version of the SDK. Please update your project configuration accordingly.

Remove the qr-face-login dependency from your build.gradle:

Migration to 9.3.0

  buildscript {
    ext {
-    minSdkVersion = 21
+    minSdkVersion = 23
    }
  }

Remove com.incode.sdk:camera:1.1.0 dependency in your app’s build.gradle file:

  dependencies {
-    implementation 'com.incode.sdk:camera:1.1.0'
  }

For Expo integrations, update your app.json:

{
  "expo": {
    "plugins": [\
      [\
        {\
- "addCamera": "1.1.0"\
        }\
      ]\
    ]
  }
}

If you are using NFC variant of the SDK follow the steps below to enable NFC scanning on iOS:

  1. Turn on Near Field Communication Tag Reading under the Capabilities tab for the project’s target. This step:

    • Adds the NFC tag-reading feature to the App ID.
    • Adds the Near Field Communication Tag Reader Session Formats Entitlement to the entitlements file.
  2. Add the NFCReaderUsageDescription key as a string item to the Info.plist file. For the value, enter a string that describes the reason the app needs access to the device’s NFC reader. If the app attempts to read a tag without providing this key and string, the app will crash.

  3. Add interface for interacting with an ISO 7816 tag to App's Info.plist:

<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
   <array>
      <string>A0000002471001</string>
      <string>A0000002472001</string>
      <string>00000000000000</string>
   </array>

NOTE

If your app supports devices with iOS prior to 13.0, you will also need to set CoreNFC.framework and CryptoTokenKit.framework as an optional frameworks:

Select your app target

Under Build Phases -> Link Binary With Libraries add: CoreNFC.framework, CryptoTokenKit.framework and SwiftUI.framework libraries if they are already not on the list.

And finally, for all three libraries, under Status, select Optional.

Note that even though NFC Scan module will not be performed on devices with iOS version older than 13, these steps are required because otherwise the app will crash on launch time.

If you are using Expo with the NFC variant, in order for it to work on Android it is necessary to:

  {
  "dependencies": {
-   "@incode-sdks/expo-incode-sdk-configuration": "1.1.3"
+   "@incode-sdks/expo-incode-sdk-configuration": "1.1.4"
  }
}
"plugins": [\
  [\
    "@incode-sdks/expo-incode-sdk-configuration",\
    {\
      "artifactoryUserName": "client_artifactory_username",\
      "artifactoryPassword": "client_artifactory_password",\
      "addIncodeSourceToPodfile": true,\
      "cameraUsageDescription": "The SDK uses the camera in order to verify the identity of the customer, e.g. in ID scan, Selfie scan and so on.",\
      "locationWhenInUseUsageDescription": "The SDK uses the current user location in order to detect exact location for Geolocation step.",\
      "microphoneUsageDescription": "The SDK uses microphone for performing a video call during Video Conference step or for doing speech recognition during Video Selfie.",\
+     "addNfc": "1.3.5"\
    }\
  ]\
]

Migration to 9.1.0

To enable the new ID capture experience on Android, add the com.incode.sdk:camera:1.1.0 dependency to your app’s build.gradle file:

  dependencies {
+    implementation 'com.incode.sdk:camera:1.1.0'
  }

For Expo integrations, update your app.json to enable the new ID capture experience:

{
  "expo": {
    "plugins": [\
      [\
        {\
+ "addCamera": "1.1.0"\
        }\
      ]\
    ]
  }
}

Migration to 9.0.0

9.0.0: Standard version

9.0.0-vc: Includes streaming

9.0.0-e2ee: Includes end-to-end encryption

`dependencies { implementation 'com.incode.sdk:core-light:2.6.4' }

source 'https://cdn.cocoapods.org/'

source 'git@github.com:Incode-Technologies-Example-Repos/IncdDistributionPodspecs.git'

If you don't have access to the Incode's GitHub repo and SSH setup on the machine, please contact your Incode representative for support.

"@incode-sdks/expo-incode-sdk-configuration": "1.1.2"

*Only for Expo integrations - Update app.json and remove coreLightVersionparam.

Migration to 8.1.0

Migration to 8.0.0

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.6.3'
+    implementation 'com.incode.sdk:core-light:2.6.4'
  }
  android {
-    compileSdk 33
+    compileSdk 34
  }
 "plugins": [\
      [\
        "@incode-sdks/expo-incode-sdk-configuration",\
        {\
-    "coreLightVersion": "2.6.3"\
+    "coreLightVersion": "2.6.4"\
        }\
      ]\
   ]

Migration to 6.4.0

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.6.2'
+    implementation 'com.incode.sdk:core-light:2.6.3'
  }
 "plugins": [\
      [\
        "@incode-sdks/expo-incode-sdk-configuration",\
        {\
-    "coreLightVersion": "2.6.2"\
+    "coreLightVersion": "2.6.3"\
        }\
      ]\
   ]

Migration to 6.2.0

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.6.1'
+    implementation 'com.incode.sdk:core-light:2.6.2'
  }
 "plugins": [\
      [\
        "@incode-sdks/expo-incode-sdk-configuration",\
        {\
-    "coreLightVersion": "2.6.1"\
+    "coreLightVersion": "2.6.2"\
        }\
      ]\
   ]

Migration to 6.1.0

 "plugins": [\
      [\
        "@incode-sdks/expo-incode-sdk-configuration",\
        {\
+    "coreLightVersion": "2.6.1"\
        }\
      ]\
   ]

Migration to 6.0.0

  "dependencies": {
-    "react-native-incode-sdk": "https://sdk-js.s3.amazonaws.com/react-native/react-native-incode-sdk-5.6.0-nvc.tgz"
+    "@incode-sdks/react-native-incode-sdk": "^6.0.0"
  }

If RN >= 0.69 remove this line:

-   pod 'react-native-incode-sdk', :path => '../node_modules/react-native-incode-sdk/'

If RN < 0.69 update this line:

-    pod 'react-native-incode-sdk', :path => '../node_modules/react-native-incode-sdk/'
+    pod 'react-native-incode-sdk', :path => '../node_modules/@incode-sdks/react-native-incode-sdk/'
-   import IncodeSdk from 'react-native-incode-sdk';
+   import IncodeSdk from '@incode-sdks/react-native-incode-sdk';
  dependencies {
-    implementation 'com.incode.sdk:core-light:2.5.1
+    implementation 'com.incode.sdk:core-light:2.6.1'
  }

Migration to 5.6.1

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.5.0
+    implementation 'com.incode.sdk:core-light:2.5.1'
  }

Migration to 5.4.0

  buildscript {
    ext {
-    minSdkVersion = 17
-    compileSdkVersion = 31
-    targetSdkVersion = 31
+    minSdkVersion = 21
+    compileSdkVersion = 21
+    targetSdkVersion = 21
    }
  }

Migration to 5.3.0

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.3.0
+    implementation 'com.incode.sdk:core-light:2.5.0'
  }

Migration to 5.2.1

  dependencies {
-    implementation 'com.incode.sdk:core-light:2.2.0
+    implementation 'com.incode.sdk:core-light:2.3.0'
  }

Migration to 5.1.0

Removed startFaceLogin parameter customerToken, specify only customerUUID.

Migration to 5.x

  1. startOnboarding and startOnboardingSection parameter name config renamed to flowConfig.
IncodeSdk.startOnboarding({
-     config: [\
+     flowConfig: [\
        { module: 'IdScan' },\
        { module: 'SelfieScan' },\
        { module: 'FaceMatch' },\
      ],\
    })\
```\
\
Diff\
\
```diff\
IncodeSdk.startOnboardingSection({\
-     config: [\
+     flowConfig: [\
        { module: 'IdScan' },\
        { module: 'SelfieScan' },\
        { module: 'FaceMatch' },\
      ],\
    })\
```\
\
2. Added `setupOnboardingSession` that replaces `creatingNewOnboardingSession` and `setOnboardingSession`\
\
Diff\
\
```diff\
- await IncodeSdk.creatingNewOnboardingSession({})\
+ await IncodeSdk.setupOnboardingSession({})\
```\
\
Diff\
\
```diff\
- await IncodeSdk.setOnboardingSession({})\
+ await IncodeSdk.setupOnboardingSession({})\
```\
\
3. `validationModules` param of `createNewOnboardingSession` and `setOnboardingSession` is now part of `setupOnboardingSession` method's `sessionConfig` param\
\
Diff\
\
```diff\
- await IncodeSdk.createNewOnboardingSession({\
-        sessionConfig: {\
-         ...\
-        },\
-        validationModules: ['id', 'liveness'],\
+ await IncodeSdk.setupOnboardingSession({\
+        sessionConfig: {\
+         ...\
+         validationModules: ['id', 'liveness'],\
+        },\
```\
\
Diff\
\
```diff\
- await IncodeSdk.setOnboardingSession({\
-        sessionConfig: {\
-         ...\
-        },\
-        validationModules: ['id', 'liveness'],\
+ await IncodeSdk.setupOnboardingSession({\
+        sessionConfig: {\
+         ...\
+         validationModules: ['id', 'liveness'],\
+        },\
```\
\
## Migration to 4.5.0-nvc

- Update Android dependency in you app's `build.gradle`:

Diff

```diff
  dependencies {
-    implementation 'com.incode.sdk:core-light:2.0.0\n+    implementation 'com.incode.sdk:core-light:2.2.0'\
  }

Migration to 4.4.1-nvc

Migration to 4.4.0-nvc

UserScoreCompleteEvent fields are now reorganized differently:

Migration to 4.x

initialize method changes:

startOnboarding method changes:

createOnboardingSession method changes:

startOnboardingSection method changes:

Migration to 3.2.x

How ID results were provided before 3.2.x:

const setupListeners = () => {
  // returns a callback to unregister your listener, e.g. when your screen is getting unmounted
  const complete = IncodeSdk.onStepCompleted;
  return [
    complete({
      module: 'IdScan',
      listener: (e) => {
        console.log('ID scan result:', e.result);
      },
    }),
  ];
};

How to listen for ID results in 3.2.x:

const setupListeners = () => {
  // returns a callback to unregister your listener, e.g. when your screen is getting unmounted
  const complete = IncodeSdk.onStepCompleted;
  return [
    complete({
      module: 'IdScanFront',
      listener: (e) => {
        console.log('ID scan front result:', e.result);
      },
    }),
    complete({
      module: 'IdScanBack',
      listener: (e) => {
        console.log('ID scan back result: ', e.result);
      },
    }),
    complete({
      module: 'ProcessId',
      listener: (e) => {
        console.log('ProcessId result: ', e.result.extendedOcrData);
      },
    }),
  ];
};

iOS Podfile changes

Standard SDK:

Replace

pod 'react-native-incode-sdk', :path => '../node_modules/react-native-incode-sdk'

with:

pod 'react-native-incode-sdk', :path => '../node_modules/react-native-incode-sdk/ios'

Dynamic Delivery:

Replace

pod 'react-native-incode-sdk/ODR', :path => '../node_modules/react-native-incode-sdk'

with:

pod 'react-native-incode-sdk/ODR', :path => '../node_modules/react-native-incode-sdk/ios'

Migration to 3.1.x

If you wish to keep using standard/Non-Dynamic Delivery version of the SDK on Android platform, please add this dependency in you app's build.gradle:

implementation 'com.incode.sdk:core-light:2.0.0'