diff --git a/README.md b/README.md index 11167468..0b966ee4 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,37 @@ ![Header Graphic](docs/images/jumio_feature_graphic.jpg) [![Version](https://img.shields.io/github/v/release/Jumio/mobile-sdk-android?style=flat)](#release-notes) -[![API Doc](https://img.shields.io/github/v/release/Jumio/mobile-sdk-android?label=API%20doc&color=green&style=flat)](https://jumio.github.io/mobile-sdk-android/) [![License](https://img.shields.io/badge/license-commercial-3D3D3D?style=flat)](#copyright) [![Platform](https://img.shields.io/badge/platform-Android-lightgrey?style=flat)](#general-requirements) -[![API Level](https://img.shields.io/badge/API%20level-21+-orange?style=flat)](#general-requirements) [![Maven](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo.mobile.jumio.ai%2Fcom%2Fjumio%2Fandroid%2Fcore%2Fmaven-metadata.xml?style=flat)](#integration) +[![API Level](http://img.shields.io/badge/API%20Level-19+-orange?style=flat)](#general-requirements) # Table of Contents - [Overview](#overview) - [Get Started](#get-started) - - [Jumio SDK Integration](#jumio-sdk-integration) - - [Code Documentation](#code-documentation) - - [FAQ](#faq) - - [Known Issues](#known-issues) + - [Jumio SDK Integration](docs/integration_guide.md) - [Quickstart](#quickstart) - [Basics](#basics) - - [General Requirements](#general-requirements) - - [Authentication and Encryption](#authentication-and-encryption) - - [Permissions](#permissions) - - [Integration](#integration) - - [Proguard](#proguard) - - [Language Localization](#language-localization) -- [Document Verification](#document-verification) -- [Digital Identity](#digital-identity) -- [Analytics With Datadog](#analytics-with-datadog) + - [General Requirements](#general-requirements) + - [Authentication and Encryption](#authentication-and-encryption) + - [Permissions](#permissions) + - [Integration](#integration) + - [Proguard](#proguard) + - [Language Localization](#language-localization) + - [Analytics with Datadog](#analytics-with-datadog) - [Security](#security) - [Release Notes](#release-notes) -- [Maintenance and Support](#maintenance-and-support) - - [Two-factor Authentication](#two-factor-authentication) - - [Licenses](#licenses) - - [Contact](#contact) - - [Copyright](#copyright) +- [Support](#support) +- [Code Documentation](https://jumio.github.io/mobile-sdk-android/) +- [FAQ](docs/integration_faq.md) +- [Known Issues](docs/known_issues.md) # Overview The Jumio Software Development Kit (SDK) provides you with a set of tools and UIs (default or custom) to develop an Android application perfectly fitted to your specific needs. Onboard new users and easily verify their digital identities by making sure the IDs they provide are valid and authentic. Extract data from ID documents completely automatically and within seconds. Confirm that users really are who they say they are by having them take a quick selfie and match it to their respective documents. Jumio uses cutting-edge biometric technology such as 3D face mapping to make sure there is an actual, real-life person in front of the screen. -![SDK Overview](docs/images/images_overview/overview_android_4.7.0.png) +![SDK Overview](docs/images/images_overview/images_overview.png) Using the Jumio SDK will allow you to create the best possible solution for your individual needs, providing you with a range of different services to choose from. @@ -54,21 +47,12 @@ Jumio KYX platform and related services are a secure and easy solution that allo :arrow_right:  [Changelog](docs/changelog.md) :arrow_right:  [Transition Guide](docs/transition_guide.md) -### Previous SDK Versions +#### Previous SDK Versions If you need information on older SDK versions, please refer to: - [3.9.2](https://github.com/Jumio/mobile-sdk-android/tree/v3.9.2) - [3.9.1](https://github.com/Jumio/mobile-sdk-android/tree/v3.9.1) - [3.9.0](https://github.com/Jumio/mobile-sdk-android/tree/v3.9.0) -## Code Documentation -Full API documentation for the Jumio Android SDK can be found [here](https://jumio.github.io/mobile-sdk-android). - -## FAQ -Link to Jumio Android SDK FAQ can be found [here](docs/integration_faq.md). - -## Known Issues -List of known issues can be found [here](docs/known_issues.md). - ----- # Quickstart @@ -80,21 +64,24 @@ Once you’ve got the sample application downloaded and unzipped, open Android S Android Studio will now start to import the project. This might take a bit of time. Make sure to wait until the Gradle Build has finished and the application is properly installed! -The Android sample application contains the package `com.jumio.sample`, which consists of: -* `MainActivity.kt` -* `customui/` - * `CustomUIActivity.kt` - * `adapter/` - * `CustomConsentAdapter.kt` - * `CustomCountryAdapter.kt` - * `CustomDocumentAdapter.kt` +The Android sample application contains the package `com.jumio.sample.kotlin`, which consists of: +* `MainActivity` +* `customui` + * `CustomUIActivity` + * `CustomCountryAdapter` + * `CustomDocumentAdapter` + * `CustomVariantAdapter` + +Right at the top of the `CustomUiActivity` you’ll find a `companion object` with the following empty parameters: -To use the Jumio Sample Application you need an SDK Token. If you haven't done so already, please refer to the [Authentication and Encryption section](#authentication-and-encryption) for more details on how to obtain your SDK token. -To add your individual SDK token to the application copy/paste it to the token input field once the application is started. +`const val EXTRA_TOKEN="sdk_token"` +`const val EXTRA_DATACENTER="datacenter"` + +If you haven't done so already, please refer to the [Authentication and Encryption section](#authentication-and-encryption) for more details on how to obtain your SDK token. Add your individual SDK token instead of the placeholder. The default setting for the data center is `JumioDataCenter.US`. ⚠️  __Note:__ We strongly recommend not storing any credentials inside your app! We suggest loading them during runtime from your server-side implementation. -Once you start up the sample application, you'll be given the option of trying out the Jumio SDK. The sample application needs camera permissions, which will be prompted for automatically once you try to start the SDK via one of the buttons. If you deny camera permissions, you won't be able to use the SDK. +Once you start up the sample application, you'll be given the option of trying out the Jumio SDK. Click the hamburger menu in the top left corner to choose a service. Your application will also need camera permissions, which will be prompted for automatically once you try to start any of the services. If you deny camera permissions, you won't be able to use any of the services. ----- @@ -102,13 +89,12 @@ Once you start up the sample application, you'll be given the option of trying o ## General Requirements ⚠️  __Android Deprecation Notice__ -Please be aware that the upcoming SDK 4.7.0 will be the last SDK version supporting Android 5.0 (API level 21). -All subsequent SDK versions will require at least Android 6.0 "Marshmallow" (API level 23). +Please be aware that SDK 4.2.0 will be the last SDK version supporting Android 4.4 (API level 19). All subsequent SDK versions will require at least Android 5.0 "Lollipop" (API level 21). The minimum requirements for the SDK are: -* Android 5.0 "Lollipop" (API level 21) or higher +* Android 4.4 (API level 19) or higher * Internet connection -* Jumio KYX +* Jumio KYX or Jumio API v3 The following architectures are supported in the SDK: * ARMv7 processor with Neon @@ -119,11 +105,11 @@ The following architectures are supported in the SDK: You will need a __commercial Jumio License__ to run any of our examples. For details, contact sales@jumio.com. ## Authentication and Encryption -ℹ️  __As of version 4.0.0 and onward, the SDK can only be used in combination with Jumio KYX. API v2 as well as using API token and secret to authenticate against the SDK will no longer be compatible.__ +ℹ️  __As of version 4.0.0 and onward, the SDK can only be used in combination with Jumio KYX or Jumio API v3. API v2 as well as using API token and secret to authenticate against the SDK will no longer be compatible.__ -Before starting a session in our SDK, an SDK token has to be obtained. Please refer to out [API Guide](https://docs.jumio.com/production/Content/Integration/Integration%20Guide.htm) for further details. To authenticate against the API calls, an OAuth2 access token needs to be retrieved from the Customer Portal. +Before starting a session in our SDK, an SDK token has to be obtained. Please refer to out [API Guide](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md) for further details. To authenticate against the API calls, an OAuth2 access token needs to be retrieved from the Customer Portal. -Within the response of the [Account Creation or Account Update](https://docs.jumio.com/production/Content/Integration/Creating%20or%20Updatng%20Account/Creating%20or%20Updating%20Accounts.htm) API, a SDK token is returned, which needs to be applied to initiate the mobile SDK. +Within the response of the [Account Creation](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#account-creation) or [Account Update](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#account-update) API, a SDK token is returned, which needs to be applied to initiate the mobile SDK. ### Basic Authentication (Deprecated) Previously, Basic Auth credentials were constructed using your API token as the User ID and your API secret as the password. You still can manage API token and secret in the Customer Portal under: @@ -140,13 +126,12 @@ Client ID and Client secret are used to generate an OAuth2 access token. OAuth2 * EU: `https://auth.emea-1.jumio.ai/oauth2/token` * SG: `https://auth.apac-1.jumio.ai/oauth2/token` -The [TLS Protocol](https://tools.ietf.org/html/rfc5246) is required to securely transmit your data, and we strongly recommend using the latest version. For information on cipher suites supported by Jumio during the TLS handshake see [supported cipher suites](https://docs.jumio.com/production/Content/Integration/API%20Authorization/Supported%20Cipher%20Suites.htm?Highlight=cipher). +The [TLS Protocol](https://tools.ietf.org/html/rfc5246) is required to securely transmit your data, and we strongly recommend using the latest version. For information on cipher suites supported by Jumio during the TLS handshake see [supported cipher suites](https://github.com/Jumio/implementation-guides/blob/master/netverify/supported-cipher-suites.md). ℹ️  __Note:__ Calls with missing, incorrect or suspicious headers or parameter values will result in HTTP status code __400 Bad Request Error__ or __403 Forbidden__. #### Request Access Token (OAuth2) - -```bash +``` curl --request POST --location 'https://auth.amer-1.jumio.ai/oauth2/token' \ --header 'Accept: application/json' \ --header 'Content-Type: application/x-www-form-urlencoded' \ @@ -155,8 +140,7 @@ curl --request POST --location 'https://auth.amer-1.jumio.ai/oauth2/token' \ ``` #### Response Access Token (OAuth2) - -```json +``` { "access_token": "YOUR_ACCESS_TOKEN", "expires_in": 3600, @@ -168,23 +152,21 @@ curl --request POST --location 'https://auth.amer-1.jumio.ai/oauth2/token' \ Your OAuth2 access token is valid for 60 minutes. After the token lifetime is expired, it is necessary to generate a new access token. ### Workflow Transaction Token Timeout -The token lifetime is set to 30 minutes per default. It can be configured via the [Jumio Customer Portal](https://docs.jumio.com/production/Content/Settings/Identity%20Verification/Application%20Settings.htm) and can be overwritten using the API call (`tokenLifetime`). Within this token lifetime the token can be used to initialize the SDK. +The token lifetime is set to 30 minutes per default. It can be configured via the [Jumio Customer Portal](https://github.com/Jumio/implementation-guides/blob/master/netverify/portal-settings.md) and can be overwritten using the API call (`tokenLifetime`). Within this token lifetime the token can be used to initialize the SDK. As soon as the workflow (transaction) starts, a 15 minutes session timeout is triggered. For each action performed (capture image, upload image) the session timeout will reset, and the 15 minutes will start again. After creating/updating a new account you will receive a `sdk.token` (JWT) for initializing the SDK. Use this SDK token with your Android code: -```kotlin -sdk = JumioSDK(context: Context).apply { - token = "YOUR_SDK_TOKEN" - dataCenter = "YOUR_DATACENTER" -} +``` +sdk = JumioSDK(context: Context) +sdk.token = "YOUR_SDK_TOKEN" +sdk.dataCenter = "YOUR_DATACENTER" ``` ## Permissions The following permission is optional: - -```xml +``` ``` @@ -195,7 +177,7 @@ Use `JumioSDK.hasAllRequiredPermissions(context: Context)` to make sure the Jumi ## Integration Use the SDK in your application by including the Maven repositories with the following `build.gradle` configuration in Android Studio: -```groovy +``` repositories { google() mavenCentral() @@ -212,56 +194,31 @@ repositories { } } ``` - Check the Android Studio [sample projects](sample/JumioMobileSample/) to learn the most common use. ## Proguard ### Mandatory The following Proguard Keep rules have to be added to the Jumio Mobile SDK: - -```text +``` -keep class com.jumio.** { *; } -keep class jumio.** { *; } ``` ### Optional The following Proguard Keep rules have to be added to the Jumio Mobile SDK if the corresponding dependencies have been added: - -```text -#Tensorflow --keep class org.tensorflow.** { *; } --keep class org.tensorflow.**$* { *; } --dontwarn org.tensorflow.** - -#IProov +``` +-keep class com.microblink.** { *; } +-keep class com.microblink.**$* { *; } -keep public class com.iproov.sdk.IProov {public *; } --keep class com.iproov.** { *; } --keep class com.iproov.**$* { *; } --keep class com.google.protobuf.** { *; } --keep class com.google.protobuf.**$* { *; } --dontwarn com.google.protobuf.** --dontwarn com.tinder.** --dontwarn okhttp3.** --dontwarn okio.** - -#Datadog --keep class com.datadog.** { *; } --keep class com.datadog.**$* { *; } - -#JMRTD + -keep class org.jmrtd.** { *; } -keep class net.sf.scuba.** {*;} -keep class org.bouncycastle.** {*;} -keep class org.ejbca.** {*;} --dontwarn java.nio.** --dontwarn org.codehaus.** --dontwarn org.ejbca.** --dontwarn org.bouncycastle.** --dontwarn module-info ``` -Most of the Proguard settings are applied automatically, as they are defined as consumer Proguard rules within the SDK. The current rules can also be found in the [Sample app](sample/JumioMobileSample/proguard-rules.pro). +Most of the Proguard settings are applied automatically, as they are defined as consumer Proguard rules within the SDK. The current rules can also be found in the [Sample app](sample/JumioMobileSample/). ## Language Localization Our SDK supports [default Android localization features](https://developer.android.com/training/basics/supporting-devices/languages.html) for different languages. All label texts and button titles in the SDK can be changed and localized by adding the required Strings you want to change in a `strings.xml` file in a `values` directory for the language and culture preference that you want to support. You can check out strings that are modifiable [within our Sample application](sample/JumioMobileSample/src/main/res/values/strings-jumio-sdk.xml). @@ -272,59 +229,18 @@ _Afrikaans, Arabic, Bulgarian, Chinese(Simplified), Chinese(Traditional), Croati Our SDK supports accessibility features. Visually impaired users can now enable __TalkBack__ or increase the __text size__ on their device. The accessibility strings that are used by TalkBack contain *accessibility* in their key and can be also modified in `strings.xml`. -# Document Verification -As of Android SDK 4.3.0, Document Verification functionality is available. -This functionality allows users to submit a number of different document types (e.g. a utility bill or bank statement) in digital form and verify the validity and authenticity of this document. - -Documents can be submitted using one of two ways: Taking a photo of the document or uploading a PDF file. -For more details, please refer to our [integration guide](docs/integration_guide.md#jumio-document-credential). - -### Supported Documents: -* BC (Birth certificate) -* BS (Bank statement) -* CAAP (Cash advance application) -* CB (Council bill) -* CC (Credit card) -* CCS (Credit card statement) -* CRC (Corporate resolution certificate) -* CUSTOM -* HCC (Health care card) -* IC (Insurance card) -* LAG (Lease agreement) -* LOAP (Loan application) -* MEDC (Medicare card) -* MOAP (Mortgage application) -* PB (Phone bill) -* SEL (School enrollment letter) -* SENC (Seniors card) -* SS (Superannuation statement) -* SSC (Social security card) -* STUC (Student card) -* TAC (Trade association card) -* TR (Tax return) -* UB (Utility bill) -* VC (Voided check) -* VT (Vehicle title) -* WWCC (Working with children check) - -ℹ️  __Note:__ To enable the use of this feature, please contact [Jumio support](#support). - -# Digital Identity -As of Jumio Android SDK 4.5.0, users may use their Digital Identity to verify their identity. -For now 'ID by Mastercard' is the only Digital Identity provider currently supported by our SDK. - -If you want to enable Digital Identity verification for your account please [contact us](https://support.jumio.com). -In case you are already set up to use Digital Identity verification within your app, check out the integration steps explained [here](docs/integration_guide.md#digital-identity-did). - -# Analytics With Datadog -Analytic feedback and diagnostics enable us to continually improve our SDK and its performance, as well as investigate potential issues. With the Jumio SDK, we use [Datadog](https://github.com/DataDog/dd-sdk-android) as an optional tool to collect diagnostic information. Data collected includes specific SDK information like version numbers, started and finished SDK instances and scan workflows, thrown exceptions and error information, as well as other mobile events. Please note that gathering analytics data requires user consent due to legal regulations such as GDPR. The consent is granted when our MLA is accepted. +## Analytics With Datadog +Analytic feedback and diagnostics enable us to continually improve our SDK and its performance, as well as investigate potential issues. With the Jumio SDK, we use [Datadog](https://github.com/DataDog/dd-sdk-android) as an optional tool to collect diagnostic information. Data collected includes specific SKD information like version numbers, started and finished SDK instances and scan workflows, thrown exceptions and error information, as well as other mobile events. Please note that gathering analytics data requires user consent due to legal regulations such as GDPR. The consent is granted when our MLA is accepted. To benefit from Datadog, add the following dependency to your `build.gradle` file: - -```groovy +``` implementation "com.jumio.android:datadog:${SDK_VERSION}" ``` +To grant or revoke user consent, please use `JumioSDK.giveDataDogConsent(boolean)` method. + +⚠️  __Note:__ The use of the Datadog module is only possible if it is not already included in your application. + ---- # Security @@ -335,8 +251,12 @@ All SDK related traffic is sent over HTTPS using TLS and public key pinning. Add # Release Notes See our [Change Log](docs/changelog.md) for more information about our current SDK version and further details. -# Maintenance and Support -Please refer to our [SDK maintenance and support policy](docs/maintenance_policy.md) for more information about Mobile SDK maintenance and support. +# Support + +## Previous Version +The previous release version 4.1.0 of the Jumio Mobile SDK is supported until 2022-08-27. + +When the support period has expired, bug fixes and technical support will no longer be provided. Current bugs are typically fixed in the upcoming versions. __Older SDK versions will keep functioning with our server until further notice,__ but we highly recommend that you always update to the latest version to benefit from SDK improvements and bug fixes. ## Two-factor Authentication If you want to enable two-factor authentication for your Jumio Customer Portal, [contact us](https://support.jumio.com). Once enabled, users will be guided through the setup upon their first login to obtain a security code using the Google Authenticator app. diff --git a/docs/changelog.md b/docs/changelog.md index 8971a31d..7e053c60 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,11 +1,10 @@ ![Header Graphic](images/jumio_feature_graphic.jpg) -[![Version](https://img.shields.io/github/v/release/Jumio/mobile-sdk-android?style=flat)](../README.md#release-notes) -[![API Doc](https://img.shields.io/github/v/release/Jumio/mobile-sdk-android?label=API%20doc&color=green&style=flat)](https://jumio.github.io/mobile-sdk-android/) -[![License](https://img.shields.io/badge/license-commercial-3D3D3D?style=flat)](../README.md#copyright) -[![Platform](https://img.shields.io/badge/platform-Android-lightgrey?style=flat)](../README.md#general-requirements) -[![API Level](https://img.shields.io/badge/API%20level-21+-orange?style=flat)](../README.md#general-requirements) -[![Maven](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo.mobile.jumio.ai%2Fcom%2Fjumio%2Fandroid%2Fcore%2Fmaven-metadata.xml?style=flat)](../README.md#integration) +[![Version](https://img.shields.io/github/v/release/Jumio/mobile-sdk-android?style=flat)](#release-notes) +[![License](https://img.shields.io/badge/license-commercial-3D3D3D?style=flat)](#copyright) +[![Platform](https://img.shields.io/badge/platform-Android-lightgrey?style=flat)](#general-requirements) +[![Maven](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo.mobile.jumio.ai%2Fcom%2Fjumio%2Fandroid%2Fcore%2Fmaven-metadata.xml?style=flat)](#integration) +[![API Level](http://img.shields.io/badge/API%20Level-19+-orange?style=flat)](#general-requirements) [Improvement]: https://img.shields.io/badge/Improvement-green "Improvement shield" [Change]: https://img.shields.io/badge/Change-blue "Change shield" @@ -16,93 +15,16 @@ All notable changes, such as SDK releases, updates and fixes, are documented in For detailed technical changes please refer to our [Transition Guide](transition_guide.md). ## Support Period -Current SDK version: __4.8.1__ +Current SDK version: __4.2.1__ +The previous release version 4.1.0 of the Jumio Mobile SDK is supported until 2022-08-27. -Please refer to our [SDK maintenance and support policy](maintenance_policy.md) for more information about Mobile SDK maintenance and support. +When the support period has expired, bug fixes and technical support will no longer be provided. Current bugs are typically fixed in the upcoming versions. __Older SDK versions will keep functioning with our server until further notice,__ but we highly recommend you always update to the latest version to benefit from SDK improvements and bug fixes. -## SDK Version: __4.8.1__ +## SDK Version: __4.2.1__ ![Fixes](https://img.shields.io/badge/Fix-success) Removed Location handling to fix potential Google Play Store rejections -## SDK Version: __4.8.0__ -![Improvement] Managing Liveness dependencies to help better conversion [Identity Verification] - -## SDK Version: __4.7.1__ -![Fixes](https://img.shields.io/badge/Fix-success) Removed Location handling to fix potential Google Play Store rejections - -## SDK Version: __4.7.0__ -![Improvement] Added support for [CameraX](https://developer.android.com/training/camerax) - -![Improvement] Datadog SDK version update to 2.0: Added possibility to have a dedicated Jumio Datadog instance - -![Improvement] Improved Jumio Liveness capturing experience [Identity Verification] - -![Change] Updated Jumio Liveness module [Identity Verification] - -![Change] Removed previous scanning functionalities, now all included in Autocatpure functionality [ID Verification] - -![Change] Removed Microblink barcode scanning, switched to MLkit [ID Verification] - -![Fix] Fixed Liveness customizaton bug [Identity Verification] - -## SDK Version: __4.6.1__ -![Fixes](https://img.shields.io/badge/Fix-success) Removed Location handling to fix potential Google Play Store rejections - -## SDK Version: __4.6.0__ -![Improvement] Added Jumio Liveness module to enhance the Liveness user experience and interface (Identity Verification) - -![Improvement] Improved Liveness customization options (Identity Verification) - -## SDK Version: __4.5.1__ -![Fixes](https://img.shields.io/badge/Fix-success) Removed Location handling to fix potential Google Play Store rejections - -## SDK Version: __4.5.0__ -![Improvement] Added possibility for users to verify their identity using [Digital Identity](../README.md#digital-identity) [ID Verification, Identity Verification] - -![Improvement] iProov SDK version update to 8.3.1 [Identity Verification] - -![Improvement] Improved user consent handling [ID Verification, Identity Verification] -
-More details - -### User consent -User consent is now acquired for all users to ensure the accordance with biometric data protection laws. Please also refer to the [User Consent section](integration_faq.md#user-consent) in our FAQ. -
- -![Fix] Bug fixes: UI bugs, passport scanning issue for certain countries [ID Verification] - -## SDK Version: __4.4.2__ -![Fixes](https://img.shields.io/badge/Fix-success) Removed Location handling to fix potential Google Play Store rejections - -## SDK Version: __4.4.1__ - -![Fix] Bug fix: Internal crashes for certain edge cases - -## SDK Version: __4.4.0__ - -![Improvement] Fully redesigned ID Autocapture experience - seamless capturing, precise guidance and faster user journey [ID Verification] - -![Improvement] Major iProov SDK version update to 8.0.3 - no more face scanning filter, improved UI and more customization options [Identity Verification] - -![Improvement] Mandatory NFC scanning option [ID Verification] - -![Fix] Bug fixes: UI bugs, internal crashes - -## SDK Version: __4.3.0__ - -![Improvement] Autocapture functionality (introduced in SDK 4.2.0) is no longer in beta stage [ID Verification] - -![Improvement] [Document Verification](../README.md#document-verification) functionality added - -![Improvement] Improved user guidance: Clear distinction between scanning frontside or backside of ID document [ID Verification] - -![Change] iProov SDK version update to 7.5.0 [Identity Verification] - -![Change] The SDK's minSdkVersion has been increased to 21 (Lollipop). Please check the [Transition Guide](transition_guide.md) for details. - -![Fix] UI bugs, internal crashes [Identity Verification] - ## SDK Version: __4.2.0__ -![Improvement] Alignment of previously existing scanning method and improved user experience through addition of Autocapture module (Beta) [ID Verification] +![Improvement] Alignment of previously existing scanning method and improved user experience through addition of Generic ID Scanning module (Beta) [ID Verification] ![Improvement] Support for device fingerprint capability [ID Verification, Identity Verification] diff --git a/docs/images/capturing_methods/autocapture_01.jpg b/docs/images/capturing_methods/autocapture_01.jpg deleted file mode 100644 index 3ca98109..00000000 Binary files a/docs/images/capturing_methods/autocapture_01.jpg and /dev/null differ diff --git a/docs/images/capturing_methods/autocapture_02.jpg b/docs/images/capturing_methods/autocapture_02.jpg deleted file mode 100644 index 94301148..00000000 Binary files a/docs/images/capturing_methods/autocapture_02.jpg and /dev/null differ diff --git a/docs/images/consent/consent_active_checked.jpg b/docs/images/consent/consent_active_checked.jpg deleted file mode 100644 index 0439d0cf..00000000 Binary files a/docs/images/consent/consent_active_checked.jpg and /dev/null differ diff --git a/docs/images/consent/consent_active_unchecked.jpg b/docs/images/consent/consent_active_unchecked.jpg deleted file mode 100644 index 8b66b756..00000000 Binary files a/docs/images/consent/consent_active_unchecked.jpg and /dev/null differ diff --git a/docs/images/consent/consent_passive.jpg b/docs/images/consent/consent_passive.jpg deleted file mode 100644 index 32c02e9a..00000000 Binary files a/docs/images/consent/consent_passive.jpg and /dev/null differ diff --git a/docs/images/happy_paths/scanpart_happy_path_diagram.png b/docs/images/happy_paths/scanpart_happy_path_diagram.png index 217e8e97..80761fca 100644 Binary files a/docs/images/happy_paths/scanpart_happy_path_diagram.png and b/docs/images/happy_paths/scanpart_happy_path_diagram.png differ diff --git a/docs/images/images_overview/confirm_screen.jpg b/docs/images/images_overview/confirm_screen.jpg new file mode 100755 index 00000000..cf9973be Binary files /dev/null and b/docs/images/images_overview/confirm_screen.jpg differ diff --git a/docs/images/images_overview/images_overview.png b/docs/images/images_overview/images_overview.png new file mode 100644 index 00000000..efa23835 Binary files /dev/null and b/docs/images/images_overview/images_overview.png differ diff --git a/docs/images/images_overview/intro_screen.jpg b/docs/images/images_overview/intro_screen.jpg new file mode 100755 index 00000000..8fc8aace Binary files /dev/null and b/docs/images/images_overview/intro_screen.jpg differ diff --git a/docs/images/images_overview/menu_screen.jpg b/docs/images/images_overview/menu_screen.jpg new file mode 100755 index 00000000..0f455c6d Binary files /dev/null and b/docs/images/images_overview/menu_screen.jpg differ diff --git a/docs/images/images_overview/overview_android_4.7.0.png b/docs/images/images_overview/overview_android_4.7.0.png deleted file mode 100644 index 0453fcfa..00000000 Binary files a/docs/images/images_overview/overview_android_4.7.0.png and /dev/null differ diff --git a/docs/integration_faq.md b/docs/integration_faq.md index fe73d4dd..67f7e22f 100644 --- a/docs/integration_faq.md +++ b/docs/integration_faq.md @@ -3,7 +3,6 @@ # FAQ ## Table of Contents -- [User Consent](#user-consent) - [Improve User Experience and Reduce Drop-off Rate](#improve-user-experience-and-reduce-drop-off-rate) - [Managing Errors](#managing-errors) - [Ad Blockers or Firewall](#ad-blockers-or-firewall) @@ -21,18 +20,8 @@ - [Java 8 Compatibility](#Java-8-compatibility) - [Overview of Scanning Methods](overview-of-scanning-methods) - [Glossary of Commonly Used Abbreviations](#glossary) -- [Google Play Store Prominent Disclosure](#google-play-store-prominent-disclosure) - [Jumio Support](#jumio-support) -## User Consent -User consent is now acquired for all users to ensure the accordance with biometric data protection laws. Depending on the legal requirements, consent can be acquired in one of two ways: __Active__ or __passive__. - -For __active__ consent instances, the user needs to accept the consent items explicitly, e.g. by enabling a UI switch or checking a checkbox for each consent item. For __passive__ consent instances, it is enough to present the consent text and URL to the user. The user implicitly accepts the passive consent items by continuing with the journey. - -Acquiring passive user consent -Acquiring active user consent -Acquired active user consent - ## Improve User Experience and Reduce Drop-off Rate When evaluating user flows, one of the most commonly used metrics is the rate of drop-offs. At Jumio, we see considerable variance in drop-off rates across industries and customer implementations. For some implementations and industries, we see a higher rate of drop-offs on the first screens when compared with the average. Scanning an ID with sensitive personal data printed on it naturally creates a high barrier for participation on the part of the end user. Therefore, conversion rates can be significantly influenced when the application establishes a sense of trust and ensures that users feel secure sharing their information. @@ -56,12 +45,12 @@ Not every error that is returned from the SDK should be treated the same. The er The following table highlights the most common error codes which are returned from the SDK and explains how to handle them appropriately in your application. -| Code | Cause | Recommended Handling | -|:-----------:|:---------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| A[xx][yyyy] | Caused by temporary network issues like a slow connection. | Advise to check the signal and retry the SDK journey. | -| E[xx][yyyy] | Flight mode is activated or no connection available. | The user should be asked to disable flight mode or to verify if the phone has proper signal. Advise to connect to WIFI and retry the SDK journey afterwards. | -| G[xx][0000] | The user pressed back or X to exit the SDK while no error view was presented. | Reasons for this could be manifold. Often it might be due to the fact that the user didn't have his identity document at hand. Give the user the option to retry. | -| J[xx][yyyy] | The SDK journey was not completed within the session's max. lifetime. (The default is 15 minutes.) | The user should be informed about the timeout and be directed to start a new Jumio SDK session. | +|Code | Cause | Recommended Handling | +|:---:|:------|:---------------------| +| A[x][yyyy] | Caused by temporary network issues like a slow connection. | Advise to check the signal and retry the SDK journey. | +| E[x][yyyy] | Flight mode is activated or no connection available. | The user should be asked to disable flight mode or to verify if the phone has proper signal. Advise to connect to WIFI and retry the SDK journey afterwards. | +| G[0][0000] | The user pressed back or X to exit the SDK while no error view was presented. | Reasons for this could be manyfold. Often it might be due to the fact that the user didn't have his identity document at hand. Give the user the option to retry. | +| J[x][yyyy] | The SDK journey was not completed within the session's max. lifetime. (The default is 15 minutes.) | The user should be informed about the timeout and be directed to start a new Jumio SDK session. | ### Ad Blockers or Firewall End users might face the situation where they are connected to a network that can't reach our Jumio endpoints. @@ -79,19 +68,20 @@ Depending on your specific needs, you may want to strip out unused functionality The following table shows a range of different product configurations with the size and modules that are linked for it. These measurements reflect the extra size that Jumio components add to your app download size and are based on our [sample application](../sample/JumioMobileSample/). -| Product Configuration | Size | Modules | -| :------------------------------------------- | :------: | :------------------------------------------------------------------------------------------: | -| Base | 2.67 MB | core | -| Base + iProov | 3.52 MB | core, iproov | -| Base + Autocapture | 4.21 MB | core, docfinder | -| Base + Autocapture, Barcode-Vision | 4.51 MB | core, docfinder, barcode-vision | -| Base + Autocapture, Barcode-Vision, iProov | 5.35 MB | core, docfinder, barcode, iproov | -| Base + Autocapture, Barcode-Vision, Liveness | 6.28 MB | core, docfinder, barcode, liveness | -| Base + Autocapture, Barcode-Vision, NFC | 7.59 MB | core, docfinder, barcode, nfc | -| All (Custom UI only) | 10.33 MB | core, docfinder, barcode-vision, iproov, nfc, devicerisk, digital-identity, camerax,liveness | -| Base + Autocapture, Default UI | 4.60 MB | core, docfinder, default-ui | -| Base + Autocapture, Default UI, Datadog | 5.21 MB | core, docfinder, default-ui, datadog | -| All (with Default UI) | 11.17 MB | core, docfinder, barcode-vision, iproov, nfc, devicerisk, default-ui, datadog, liveness | +| Product Configuration | Size | Modules | +|:-----------------------|:--------:|:------------:| +| Base | 1.78 MB | core | +| Base + Liveness | 2.23 MB | core, iproov | +| Base + MRZ | 3.15 MB | core, mrz | +| Base + MRZ, Linefinder | 3.42 MB | core, mrz, linefinder | +| Base + MRZ, Linefinder, Barcode | 4.47 MB | core, mrz, linefinder, barcode | +| Base + MRZ, Linefinder, Barcode-Vision | 3.72 MB | core, mrz, linefinder, barcode-vision | +| Base + MRZ, Linefinder, Barcode, Liveness | 4.91 MB | core, mrz, linefinder, barcode, iproov | +| Base + MRZ, Linefinder, Barcode, NFC | 6.02 MB | core, mrz, linefinder, barcode, nfc | +| All (Custom UI only) | 12.30 MB | core, mrz, linefinder, barcode, barcode-vision, iproov, nfc, docfinder, devicerisk | +| Base + MRZ, Linefinder, Default UI | 3.84 MB | core, mrz, linefinder, default-ui | +| Base + MRZ, Linefinder, Default UI, DataDog | 4.34 MB | core, mrz, linefinder, default-ui, datadog | +| All (with Default UI) | 13.13 MB | core, mrz, linefinder, barcode, barcode-vision, iproov, nfc, docfinder, devicerisk, default-ui, datadog | __Note:__ The size values in the table above depict the decompressed install size required on a device and are comparable to the estimated Play Store files size. The size value might vary by a few percent, depending on the actual device used. All sizes are calculated based on a build of our sample application using arm64 architecture, english translations and xxhdpi screen resolution. @@ -114,7 +104,7 @@ defaultConfig { } ``` -It's also possible to manually provide a split apk on Google Play. The apk can be split based on the architecture if multiple apks should be uploaded to the Google Play Store. Google Play Store manages to deliver the appropriate apk for the device. +It's also possible to manually provide a splitted apk on Google Play. The apk can be split based on the architecture if multiple apks should be uploaded to the Google Play Store. Google Play Store manages to deliver the appropriate apk for the device. ``` splits { abi { @@ -209,28 +199,17 @@ android { ## Overview of Scanning Methods -#### Autocapture -Combines all previously existing scanning methods into one automatic, seamless experience. - -![Autocapture Success](images/capturing_methods/autocapture_01.jpg) ![Autocapture Scanning](images/capturing_methods/autocapture_02.jpg) - -#### Linefinder (deprecated) -***As of SDK version 4.7.0 this module has been deprecated. Please use [Autocapture](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_faq.md#autocapture) -instead.*** +#### Linefinder Scanning using edge detection. ![Linefinder Empty](images/capturing_methods/linefinder_scanning_01.jpg) ![Linefinder Document](images/capturing_methods/linefinder_scanning_02.jpg) ![Linefinder Processing](images/capturing_methods/linefinder_scanning_03.jpg) -#### MRZ (deprecated) -***As of SDK version 4.7.0 this module has been deprecated. Please use [Autocapture](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_faq.md#autocapture) -instead.*** +#### MRZ Data extraction from passports, some identity cards and some visas. ![MRZ Empty](images/capturing_methods/mrz_scanning_01.jpg) ![MRZ Document](images/capturing_methods/mrz_scanning_02.jpg) -#### Barcode (deprecated) -***As of SDK version 4.7.0 this module has been deprecated. Please use [Autocapture](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_faq.md#autocapture) -instead.*** +#### Barcode PDF417 barcode data extraction, for example from US and Canadian driver licenses. ![Barcode Empty](images/capturing_methods/barcode_scanning_01.jpg) ![Barcode Document](images/capturing_methods/barcode_scanning_02.jpg) @@ -248,8 +227,5 @@ Data extraction from eMRTD documents, for example passports. ## Glossary A [quick guide to commonly used abbreviations](integration_glossary.md) throughout the documentation which may not be all that familiar. -## Google Play Store Prominent Disclosure -Some parts of the SDK might require prominent disclosure - please see the [Privacy Notice](integration_guide.md#privacy-notice) section in the Integration Guide for further details - ## Jumio Support The Jumio development team is constantly striving to optimize the size of our frameworks while increasing functionality, to improve your KYC and to fight fraud. If you have any further questions, please reach out to our [support team](mailto:support@jumio.com). diff --git a/docs/integration_glossary.md b/docs/integration_glossary.md index f043307e..4929d0ed 100644 --- a/docs/integration_glossary.md +++ b/docs/integration_glossary.md @@ -60,6 +60,3 @@ Passport ### 3D-Liveness Liveness check: The 3D-liveness check makes sure that a face scan performed was not of a picture, but of an actual, living person who also matches the picture on the previously scanned document - -### DID -Digital Identity diff --git a/docs/integration_guide.md b/docs/integration_guide.md index c5333740..04f10016 100644 --- a/docs/integration_guide.md +++ b/docs/integration_guide.md @@ -1,146 +1,82 @@ ![Header Graphic](images/jumio_feature_graphic.jpg) # Integration Guide for Android SDK - -Jumio’s products allow businesses to establish the genuine identity of their users by verifying government-issued IDs in real-time. ID Verification, Identity Verification and other services are used by financial service organizations and other leading brands to create trust for safe onboarding, money transfers and user authentication. +Jumio’s products allow businesses to establish the genuine identity of their users by verifying government-issued IDs in real-time. ID Verification, Identity Verification and other services are used by financial service organizations and other leading brands to create trust for safe onboarding, money transfers, and user authentication. ## Table of Contents - - [Release Notes](#release-notes) -- [Code Documentation](#code-documentation) - [Setup](#setup) - - [Dependencies](#dependencies) - - [Autocapture](#autocapture) - - [Certified Face Liveness](#certified-face-liveness) - - [Barcode Scanning](#barcode-scanning) - - [NFC Scanning](#nfc-scanning) - - [SDK Version Check](#sdk-version-check) - - [Root Detection](#root-detection) - - [Device Supported Check](#device-supported-check) - - [Privacy Notice](#privacy-notice) - - [Digital Identity (DID)](#digital-identity-did) - - [Risk Signal: Device Risk](#risk-signal-device-risk) +- [Dependencies](#dependencies) - [Initialization](#initialization) - - [Requesting a Token (via OAuth2)](#requesting-a-token-via-oauth2) - - [Initializing the Jumio SDK](#initializing-the-jumio-sdk) - [Configuration](#configuration) - - [Worfklow Selection](#worfklow-selection) - - [Transaction Identifiers](#transaction-identifiers) - - [Preselection](#preselection) - - [Miscellaneous](#miscellaneous) +- [Customization](#customization) - [SDK Workflow](#sdk-workflow) - - [Retrieving Information](#retrieving-information) -- [Default UI](#default-ui) - [Custom UI](#custom-ui) - - [Controller Handling](#controller-handling) - - [Credential Handling](#credential-handling) - - [ScanPart Handling](#scanpart-handling) - - [Result and Error Handling](#result-and-error-handling) - [Instant Feedback](#instant-feedback) -- [Customization](#customization) - - [Customization Tool](#customization-tool) - - [Default UI customization](#default-ui-customization) - - [Custom UI customization](#custom-ui-customization) +- [Callback](#callback) +- [Code Documentation](https://jumio.github.io/mobile-sdk-android/) ## Release Notes +Please refer to our [Change Log](changelog.md) for more information. Current SDK version: __4.2.1__ -Please refer to our [Change Log](changelog.md) for more information. Current SDK version: **4.8.1** - -For technical changes that should be considered when updating the SDK, please read our [Transition Guide](transition_guide.md). - -## Code Documentation - -Full API documentation for the Jumio Android SDK can be found [here](https://jumio.github.io/mobile-sdk-android/). +For breaking technical changes, please read our [Transition Guide](transition_guide.md) ## Setup - The [basic setup](../README.md#basics) is required before continuing with the following setup for the Jumio SDK. If you are updating your SDK to a newer version, please also refer to: -:arrow_right:  [Changelog](changelog.md) -:arrow_right:  [Transition Guide](transition_guide.md) - -### Dependencies +:arrow_right:  [Changelog](docs/changelog.md) +:arrow_right:  [Transition Guide](docs/transition_guide.md) +## Dependencies The [SDK Setup Tool](https://jumio.github.io/mobile-configuration-tool/out/) is a web tool that helps determine available product combinations and corresponding dependencies for the Jumio SDK, as well as an export feature to easily import the applied changes straight into your codebase. [![Jumio Setup](images/setup_tool.png)](https://jumio.github.io/mobile-configuration-tool/out/) -Below you can find a list of dependencies that can be added to your application to enable different functionality of the Jumio SDK. Some modules are mandatory, others are optional. - -If an optional module is **not linked**, some functionalities may not be available, but the library size will be reduced. The [Sample app](../sample/JumioMobileSample/) apk size is currently around **17 MB**. - -```groovy -// [Mandatory] Jumio Core library -dependencies { - implementation "com.jumio.android:core:4.8.1" - ... -} - -// [Optional] Extraction methods -dependencies { - implementation "com.jumio.android:docfinder:4.8.1" // Autocapture library, includes all previous scanning methods - implementation "com.jumio.android:barcode-mlkit:4.8.1" // Barcode scanning library, assists Autocapture - implementation "com.jumio.android:nfc:4.8.1" // NFC scanning library, assists Autocapture - implementation "com.jumio.android:iproov:4.8.1" // Face Liveness library - implementation "com.jumio.android:liveness:4.8.1" // Face Liveness library - implementation "com.jumio.android:digital-identity:4.8.1" // Digital Identity verification library - ... -} - -// [Optional] Jumio Default UI -dependencies { - implementation "com.jumio.android:defaultui:4.8.1" - ... -} +Below there is a list of dependencies the application will need to work in Android. Some modules are mandatory, others are optional. If an optional module is __not linked__, some functionalities such as certain methods may not be available, but the library size will be reduced. The [Sample app](../sample/JumioMobileSample/) apk size is currently around __17 MB__. -// [Optional] Additional functionality +``` dependencies { - implementation "com.jumio.android:camerax:4.8.1" // CameraX library - implementation "com.jumio.android:datadog:4.8.1" // Analytics library - implementation "com.jumio.android:devicerisk:4.8.1" // Device fingerprinting library - ... -} + implementation "com.jumio.android:core:4.2.1" // Jumio Core library + implementation "com.jumio.android:defaultui:4.2.1" // Jumio Default UI + implementation "com.jumio.android:mrz:4.2.1" // MRZ Scanning + implementation "com.jumio.android:nfc:4.2.1" // NFC Scanning + implementation "com.jumio.android:linefinder:4.2.1" // Linefinder Scanning + implementation "com.jumio.android:docfinder:4.2.1" // Generic ID Scanning (beta) + implementation "com.jumio.android:barcode:4.2.1" // Barcode scanning + implementation "com.jumio.android:barcode-mlkit:4.2.1" // Barcode scanning alternative + implementation "com.jumio.android:iproov:4.2.1" // Face Liveness library + implementation "com.jumio.android:datadog:4.2.1" // Analytics library + implementation "com.jumio.android:devicerisk:4.2.1" // Device fingerprinting library ``` -#### Autocapture +#### Generic ID Scanning +The module `com.jumio.android:docfinder` offers a generic scanning method across all ID documents, providing a more seamless capture experience for the end user. The SDK will automatically detect which type of ID document is presented by the user and guide them through the capturing process with live feedback. -The module `com.jumio.android:docfinder` offers one generic scanning method across all ID documents, providing a more seamless capture experience for the end user. The SDK will automatically detect which type of ID document is presented by the user and guide them through the capturing process with live feedback. -The models can be bundled with the app directly to save time on the download during the SDK runtime. Therefore download the following files from [here](https://cdn.mobile.jumio.ai/model/classifier_on_device_ep_99_float16_quant.enc) and [here](https://cdn.mobile.jumio.ai/model/normalized_ensemble_passports_v2_float16_quant.enc) and add it to the app assets folder. +⚠️  __Note:__ This feature is currently i the Beta stage and suspect to change in the next SDK version. If you intend to use it in production, please contact Jumio Customer Service at support@jumio.com. #### Certified Face Liveness - -Jumio uses Certified Liveness technology to determine liveness. Link `com.jumio.android:liveness` and `com.jumio.android:iproov` modules in order to use Jumio Liveness. - +Jumio uses Certified Liveness technology to determine liveness. The iProov SDK is referenced as a transitive dependency within the `com.jumio.android:iproov` module. If necessary, the iProov SDK version can be overwritten with a more recent one: - -```groovy -implementation "com.jumio.android:iproov:4.8.1" -implementation("com.iproov.sdk:iproov:8.3.1") { - exclude group: 'org.json', module: 'json' +``` +implementation "com.jumio.android:iproov:4.2.1" +implementation ("com.iproov.sdk:iproov:7.2.0"){ + exclude group: 'org.json', module:'json' } ``` -#### Barcode Scanning -In order to benefit from barcode scanning functionality included in the `com.jumio.android:docfinder` dependency, please add `com.jumio.android:barcode-mlkit` to your `build-gradle` file. - -This dependency includes `com.google.android.gms:play-services-mlkit-barcode-scanning` library - if your application includes **other Google ML-kit libraries**, it might be necessary to override meta-data specified in the application tag of the `play-services-mlkit-barcode-scanning` manifest by [merging multiple manifests](https://developer.android.com/studio/build/manage-manifests#merge-manifests): - -```xml +#### Barcode Scanning Alternative +As an alternative to the `com.jumio.android:barcode` dependency, you can substitute `com.jumio.android:barcode-mlkit`. This dependency includes `com.google.android.gms:play-services-mlkit-barcode-scanning` library - if your application includes __other Google ML-kit libraries__, it might be necessary to override meta-data specified in the application tag of the `play-services-mlkit-barcode-scanning` manifest by [merging multiple manifests](https://developer.android.com/studio/build/manage-manifests#merge-manifests): +``` + android:name="com.google.android.gms.vision.DEPENDENCIES" + android:value="barcode" + tools:replace="android:value"/> ``` -#### NFC Scanning -In order to benefit from NFC scanning functionality included in the `com.jumio.android:docfinder` dependency, please add `com.jumio.android:nfc` to your `build-gradle` file. - -### SDK Version Check - +#### SDK Version Check Use `JumioSDK.sdkVersion` to check which SDK version is being used. -### Root Detection - +#### Root Detection For security reasons, applications implementing the SDK should not run on rooted devices. Use either the below method or a self-devised check to prevent usage of SDK scanning functionality on rooted devices. ``` JumioSDK.isRooted(context: Context) @@ -148,889 +84,448 @@ JumioSDK.isRooted(context: Context) ⚠️  __Note:__ Please be aware that the JumioSDK root check uses various mechanisms for detection, but doesn't guarantee to detect 100% of all rooted devices. -### Device Supported Check - +#### Device Supported Check Use the method below to check if the current device platform is supported by the SDK. ``` JumioSDK.isSupportedPlatform(context: Context) ``` -### Privacy Notice - -If the module `com.jumio.android:devicerisk` is linked we collect data depending on the permissions given for fraud detection on - -- Location -- Battery Usage -- Device Identifier -- Device Storage -- MAC Address -- SIM information (MNC, MCC, IMEI, Phone Number, Phone Type (GSM/CDMA), SIM Number, etc.) -- Google Services ID - -If you submit your app to the Google Play Store a [Prominent Disclosure](https://support.google.com/googleplay/android-developer/answer/11150561) explaining the collected [User Data](https://support.google.com/googleplay/android-developer/answer/10144311) is required. The collected user data also needs to be declared in your [Data Safety Form](https://play.google.com/console/developers/app/app-content/data-privacy-security) and the [Privacy Policy](https://play.google.com/console/developers/app/app-content/privacy-policy) related to your application. - -Other stores might require something similar - please check before submitting your app to the store. - -Please see the [Jumio Privacy Policy for Online Services](https://www.jumio.com/legal-information/privacy-notices/jumio-corp-privacy-policy-for-online-services/) for further information. - -### Digital Identity (DID) -In case Digital Identity verification has been enabled for your account you can add the `com.jumio.android:digital-identity` dependency to your application. This will enable you to make use of DID verification within the SDK. - -Over the course of DID verification the SDK will launch an according third party application representing your Digital Identity. Communication between both applications (your integrating application and the Digital Identity application) is done via a so-called "deep link". For more information on deep link handling on Android please check out their [official guide](https://developer.android.com/training/app-links). - -#### Deep Link Setup -To enable your app specific deep link, our support team has to setup an according scheme of your choice for you. This scheme will be used by the SDK to identify your application while returning from the DID provider's application. For the scheme basically any string can be used, however it is recommended that it is unique to your application in some way. A suggestion would be your company name. - -Following snippet shows how the deep link needs to be setup in your application's `AndroidManifest.xml` file: +## Initialization +Using the SDK requires an activity declaration in your `AndroidManifest.xml`. -```xml - - - - - - - - - - ``` - -Please note that the properties `android:exported="true"` and `android:launchMode="singleTask"` need to be specified as well. The first parameter basically tells the Android system that your `Activity` can be found by the system and other applications. By specifying `launchMode="singleTask"` any already running task for this `Activity` will be resumed (instead of creating a new instance). Both are requirements so that the SDK can handle the according deep link correctly. - -In case you are using Jumio's Default UI in your app (see section [Default UI](#default-ui)) you also need to specify `tools:replace="android:exported"` to `JumioActivity`'s `` tag like so: - -```xml - - ... - - + android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/> ``` -As deep link handling happens on `Activity` level, the according data needs to be forwarded to the SDK via `Activity.onNewIntent()`. The following code snippet shows how this can be achieved. **If you're using Jumio's Default UI you can ignore this step**. +You can specify your own theme (see chapter [Customization](#customization)). The orientation can be sensor based or locked with the attribute `android:screenOrientation`. Please note that some SDK screens will need portrait mode. -```kotlin -override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) +Your OAuth2 credentials are constructed using your previous API token as the Client ID and your previous API secret as the Client secret. You can view and manage your Client ID and secret in the Customer Portal under: +* __Settings > API credentials > OAuth2 Clients__ - intent.data?.let { deepLink -> - val activeScanPart = scanPart ?: return +Client ID and Client secret are used to generate an OAuth2 access token. OAuth2 has to be activated for your account. Contact your Jumio Account Manager for activation. Send a workflow request using the acquired OAuth2 access token to receive the SDK token necessary to initialize the Jumio SDK. For more details, please refer to [Authentication and Encryption](../README.md#authentication-and-encryption). - JumioDeepLinkHandler.consumeForScanPart(deepLink, activeScanPart) - } -} ``` - -### Risk Signal: Device Risk -If you want to include risk signals into your application, please check our [Risk Signal guide](https://docs.jumio.com/production/Content/References/Risk%20Signals/Device%20Risk.htm). - -#### Iovation setup -To integrate the device risk vendor Iovation into your application, please follow the [Iovation integration guide](https://github.com/iovation/deviceprint-SDK-android). - -#### API call -To provide Jumio with the generated Device Risk blackbox, please follow the [Device Risk API guide](https://docs.jumio.com/production/Content/Integration/Integration%20Channels/REST%20APIs.htm). - - -## Initialization - -### Requesting a Token (via OAuth2) - -Your OAuth2 credentials are constructed using your API token as the Client ID and your API secret as the Client secret. You can view and manage your Client ID and secret in the Customer Portal under: - -- **Settings > API credentials > OAuth2 Clients** - -Client ID and Client secret are used to generate an OAuth2 access token. Send a workflow request using the acquired OAuth2 access token to receive the SDK token necessary to initialize the Jumio SDK. - -OAuth2 has to be activated for your account. Contact your Jumio Account Manager for activation. For more details, please refer to [Authentication and Encryption](../README.md#authentication-and-encryption). - -### Initializing the Jumio SDK - -Use your aquired SDK token and your according datacenter to initialize the `JumioSDK`: - -```kotlin const val YOUR_SDK_TOKEN = "" const val YOUR_DATACENTER = "" -sdk = JumioSDK(context: Context).apply { - token = "YOUR_SDK_TOKEN" - datacenter = "YOUR_DATACENTER" -} +JumioSDK sdk = JumioSDK(context: Context) +sdk.token = "YOUR_SDK_TOKEN" +sdk.datacenter = "YOUR_DATACENTER" ``` +Make sure that your SDK token is correct. If it isn't, an exception will be thrown. Then specify an instance of your activity and provide a reference to identify the scans in your reports (max. 100 characters or `null`). Data center is set to `"US"` by default. If your customer account is in the EU data center, use `"EU"` instead. Alternatively, use `"SG"` for Singapore. -Data center is set to `"US"` by default. If your customer account is in the EU data center, use `"EU"` instead. Alternatively, use `"SG"` for Singapore. - -⚠️  **Note:** We strongly recommend storing all credentials outside of your app! We suggest loading them during runtime from your server-side implementation. +⚠️  __Note:__ We strongly recommend storing all credentials outside of your app! We suggest loading them during runtime from your server-side implementation. ## Configuration - -Every Jumio SDK instance is initialized using a specific [`sdk.token`][token]. This token contains information about the workflow, credentials, transaction identifiers and other parameters. Configuration of this token allows you to provide your own internal tracking information for the user and their transaction, specify what user information is captured and by which method, as well as preset options to enhance the user journey. Values configured within the [`sdk.token`][token] during your API request will override any corresponding settings configured in the Customer Portal. +Every Jumio SDK instance is initialized using a specific `sdk.token`. This token contains information about the workflow, credentials, transaction identifiers and other parameters. Configuration of this token allows you to provide your own internal tracking information for the user and their transaction, specify what user information is captured and by which method, as well as preset options to enhance the user journey. Values configured within the `sdk.token` during your API request will override any corresponding settings configured in the Customer Portal. ### Worfklow Selection +Use ID verification callback to receive a verification status and verified data positions (see [API v3 Callback section](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#callback)). Make sure that your customer account is enabled to use this feature. A callback URL can be specified for individual transactions (for URL constraints see chapter [Callback URL](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#jumio-callback-ip-addresses)). This setting overrides any callback URL you have set in the Jumio Customer Portal. Your callback URL must not contain sensitive data like PII (Personally Identifiable Information) or account login. Set your callback URL using the `callbackUrl` parameter. -Use ID verification callback to receive a verification status and verified data positions (see [Callback section](https://jumio.github.io/kyx/integration-guide.html#callback)). Make sure that your customer account is enabled to use this feature. A callback URL can be specified for individual transactions (for URL constraints see chapter [Callback URL](https://jumio.github.io/kyx/integration-guide.html#jumio-callback-ip-addresses)). This setting overrides any callback URL you have set in the Jumio Customer Portal. Your callback URL must not contain sensitive data like PII (Personally Identifiable Information) or account login. Set your callback URL using the `callbackUrl` parameter. - -Use the correct [workflow definition key](https://jumio.github.io/kyx/integration-guide.html#workflow-definition-keys) in order to request a specific workflow. Set your key using the `workflowDefinition.key` parameter. +Use the correct [workflow definition key](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#workflow-definition-keys) in order to request a specific workflow. Set your key using the `workflowDefinition.key` parameter. For example: Use [workflow 2 "ID Verification"](https://github.com/Jumio/implementation-guides/blob/master/api-guide/workflow_descriptions.md#workflow-2-id-verification) to verify an ID document and extract data from that document. Use [workflow 3 "ID and Identity Verification"](https://github.com/Jumio/implementation-guides/blob/master/api-guide/workflow_descriptions.md#workflow-3-id-and-identity-verification) to verify a photo ID document and extract data from that document, as well as compare the user's face with the photo on the ID and perform a liveness check to ensure the person is physically present. -```json -{ +``` +'{ "customerInternalReference": "CUSTOMER_REFERENCE", "workflowDefinition": { - "key": "X" + "key": X, }, "callbackUrl": "YOUR_CALLBACK_URL" -} +}' ``` -For more details, please refer to our [Workflow Description Guide](https://support.jumio.com/hc/en-us/articles/4408958923803-KYX-Workflows-User-Guide). +For more details, please refer to our [Workflow Description Guide](https://github.com/Jumio/implementation-guides/blob/master/api-guide/workflow_descriptions.md). -ℹ️  **Note:** Identity Verification requires portrait orientation in your app. +ℹ️  __Note:__ Identity Verification requires portrait orientation in your app. ### Transaction Identifiers - There are several options in order to uniquely identify specific transactions. `customerInternalReference` allows you to specify your own unique identifier for a certain scan (max. 100 characters). Use `reportingCriteria`, to identify the scan in your reports (max. 100 characters). You can also set a unique identifier for each user using `userReference` (max. 100 characters). -For more details, please refer to our [API Guide](https://jumio.github.io/kyx/integration-guide.html#request-body). +For more details, please refer to our [API Guide](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#request-body). -```json -{ +``` +'{ "customerInternalReference": "CUSTOMER_REFERENCE", "workflowDefinition": { - "key": "X" + "key": X, }, "reportingCriteria": "YOUR_REPORTING_CRITERIA", "userReference": "YOUR_USER_REFERENCE" -} +}' ``` -⚠️  **Note:** Transaction identifiers must not contain sensitive data like PII (Personally Identifiable Information) or account login. +⚠️  __Note:__ Transaction identifiers must not contain sensitive data like PII (Personally Identifiable Information) or account login. ### Preselection - You can specify issuing country using [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) country codes, as well as ID types to skip selection during the scanning process. In the example down below, Austria ("AUT") and the USA ("USA") have been preselected. PASSPORT and DRIVER_LICENSE have been chosen as preselected document types. If all parameters are preselected and valid and there is only one given combination (one country and one document type), the document selection screen in the SDK can be skipped entirely. -For more details, please refer to our [API Guide](https://jumio.github.io/kyx/integration-guide.html#request-body). +For more details, please refer to our [API Guide](https://github.com/Jumio/implementation-guides/blob/master/api-guide/api_guide.md#request-body). -⚠️  **Note:** "Digital Identity" document type can not be preselected! - -```json -{ +``` +'{ "customerInternalReference": "CUSTOMER_REFERENCE", "workflowDefinition": { - "key": X, - "credentials": [ - { - "category": "ID", - "type": { - "values": [ - "DRIVING_LICENSE", - "PASSPORT" - ] - }, - "country": { - "values": [ - "AUT", - "USA" - ] - } - } - ] + "key": X, + "credentials": [ + { + "category": "ID", + "type": { + "values": ["DRIVING_LICENSE", "PASSPORT"] + }, + "country": { + "values": ["AUT", "USA"] + } + } + ] } -} +}' ``` ### Miscellaneous - -Use [`cameraFacing`][camerafacing] attribute of [`JumioScanView`][jumioscanview] to configure the default camera and set it to `FRONT` or `BACK`. - -```kotlin -scanView.cameraFacing = JumioCameraFacing.FRONT +Use `cameraFacing` attribute of `JumioScanView` to configure the default camera and set it to `FRONT` or `BACK`. +``` +scanView.cameraFacing = JumioCameraPosition.FRONT ``` -## SDK Workflow +## Customization -### Retrieving Information +### Customization Tool +[Jumio Surface](https://jumio.github.io/surface-android/4.0.0) is a web tool that offers the possibility to apply and visualize, in real-time, all available customization options for the Jumio SDK, as well as an export feature to import the applied changes straight into your codebase. -The SDK returns a [`JumioResult`][jumioresult] object which contains the result of the finished workflow. Extracted ID data will not be returned by default - please contact **Jumio Customer Service** at [support@jumio.com](mailto:support@jumio.com) in case this is needed. - -The following tables give information on the specification of all data parameters and errors: - -- [`JumioIDResult`][jumioidresult] -- [`JumioFaceResult`][jumiofaceresult] -- [`JumioRejectReason`][jumiorejectreason] -- [`JumioError`][jumioerror] - -#### Class **_JumioIDResult_** - -| Parameter | Type | Max. length | Description | -| :--------------- | :------------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| issuingCountry | String | 3 | Country of issue as [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) country code | -| idType | String | | PASSPORT, DRIVER_LICENSE, IDENTITY_CARD or VISA as provided or selected | -| firstName | String | 100 | First name of the customer | -| lastName | String | 100 | Last name of the customer | -| dateOfBirth | String | | Date of birth | -| issuingDate | String | | Date of issue | -| expiryDate | String | | Date of expiry | -| documentNumber | String | 100 | Identification number of the document | -| personalNumber | String | 14 | Personal number of the document | -| gender | String | | Gender M, F or X | -| nationality | String | | Nationality of the customer | -| placeOfBirth | String | 255 | Place of birth | -| country | String | | Country of residence | -| address | String | 64 | Street name of residence | -| city | String | 64 | City of residence | -| subdivision | String | 3 | Last three characters of [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US) or [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA) subdivision code | -| postalCode | String | 15 | Postal code of residence | -| mrzLine1 | String | 50 | MRZ line 1 | -| mrzLine2 | String | 50 | MRZ line 2 | -| mrzLine3 | String | 50 | MRZ line 3 | -| extractionMethod | JumioScanMode | | Extraction method used during scanning (MRZ, BARCODE, MANUAL, OCR_CARD, NFC) | -| imageData | JumioImageData | | Wrapper class for accessing image data of all credential parts from an ID verification session. This feature has to be enabled by your account manager. | - -#### Class **_JumioFaceResult_** - -| Parameter | Type | Max. length | Description | -| :--------------- | :------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | -| passed | Boolean | | -| extractionMethod | JumioScanMode | | Extraction method used during scanning (FACE_MANUAL, FACE_IPROOV) | -| imageData | JumioImageData | | Wrapper class for accessing image data of all credential parts from an ID verification session. This feature has to be enabled by your account manager. | - -#### Class **_JumioRejectReason_** - -List of all possible reject reasons returned if Instant Feedback is used: - -| Code | Message | Description | Check enabled server-side (2022-05-25) | -|:-----|:-----------------|:---------------------------------------------------|:--------------------------------------:| -| 102 | BLACK_WHITE_COPY | Document appears to be a black and white photocopy | x | -| 103 | COLOR_PHOTOCOPY | Document appears to be a colored photocopy | | -| 104 | DIGITAL_COPY | Document appears to be a digital copy | x | -| 200 | NOT_READABLE | Document is not readable | | -| 201 | NO_DOC | No document could be detected | x | -| 206 | MISSING_BACK | Backside of the document is missing | x | -| 214 | MISSING_FRONT | Frontside of the document is missing | x | -| 2001 | BLURRY | Document image is unusable because it is blurry | x | -| 2003 | MISSING_PART_DOC | Part of the document is missing | x | -| 2004 | HIDDEN_PART_DOC | Part of the document is hidden | | -| 2005 | DAMAGED_DOCUMENT | Document appears to be damaged | | -| 2006 | GLARE | Document image is unusable because of glare | x | +[![Jumio Surface](images/surface_tool.png)](https://jumio.github.io/surface-android/4.0.0) -#### Error Codes +The surface tool lets you go through all available screens and visualizes all the colors that can be customized. As visualized in the code there, the SDK can be customized to fit your application's look and feel by specifying `Theme.Jumio` as a parent style and overriding attributes within this theme. -List of all **_error codes_** that are available via the `code` and `message` properties of the [`JumioError`][jumioerror] object. The first letter (A-J) represents the error case. The remaining characters are represented by numbers that contain information helping us understand the problem situation (format: [xx][yyyy]). +After customizing the SDK, you can click the __Android-Xml__ button in the __Output__ menu on the bottom right to copy the code from the theme `AppThemeCustomJumio` to your Android app's `styles.xml` file. -| Code | Message | Description | -|:-----------:|:-------------------------------------------------------------------|:--------------------------------------------------------------| -| A[xx][yyyy] | We have encountered a network communication problem | Retry possible, user decided to cancel | -| B[xx][yyyy] | Authentication failed | Secure connection could not be established, retry impossible | -| C[xx]0401 | Authentication failed | API credentials invalid, retry impossible | -| E[xx]0000 | Connection error | Retry possible, user decided to cancel | -| F[xx]0000 | Scanning not available at this time, please contact the app vendor | Resources cannot be loaded, retry impossible | -| G[xx]0000 | Cancelled by end-user | No error occurred | -| H[xx]0000 | The camera is currently not available | Camera cannot be initialized, retry impossible | -| I[xx]0000 | Certificate not valid anymore. Please update your application | End-to-end encryption key not valid anymore, retry impossible | -| J[xx]0000 | Transaction already finished | User did not complete SDK journey within session lifetime | -| N[xx]0000 | Scanning not available at this time, please contact the app vendor | Required images are missing to finalize the acquisition | +### Customizing Theme in AndroidManifest +Apply the custom theme that you defined before by replacing `Theme.Jumio` in the `AndroidManifest.xml:` +``` + +``` -⚠️  **Note:** Please always include error code and message when filing an error related issue to our support team. +### Dark Mode +`Theme.Jumio` attributes can also be customized for dark mode. If you haven't done so already, create a `values-night` folder in your resources directory and add a new `styles.xml` file. Adapt your custom Jumio theme for dark mode. The SDK will switch automatically to match the system settings of the user device. -## Default UI +## SDK Workflow -In case you're using Jumio's Default UI module (see [Dependencies](#dependencies)) you may declare the `JumioActivity` in your `AndroidManifest.xml`. With this you can use Jumio's default theme or specify a custom theme (see [Customization](#customization) for details). Also you can set the orientation to be sensor based or locked by using the attribute `android:screenOrientation`. Please note though that some screens in Jumio SDK launch in portrait mode only. +### Retrieving Information +The following tables give information on the specification of all data parameters and errors. + +#### Class ___JumioIDResult___ +| Parameter | Type | Max. length | Description | +|:-------------------|:-----------|:-------------|:-----------------| +| issuingCountry | String | 3 | Country of issue as [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) country code | +| idType | String | | PASSPORT, DRIVER_LICENSE, IDENTITY_CARD or VISA as provided or selected | +| firstName | String | 100 | First name of the customer | +| lastName | String | 100 | Last name of the customer | +| dateOfBirth | String | | Date of birth | +| issuingDate | String | | Date of issue | +| expiryDate | String | | Date of expiry | +| documentNumber | String | 100 | Identification number of the document | +| personalNumber | String | 14 | Personal number of the document | +| gender | String | | Gender M, F or X | +| nationality | String | | Nationality of the customer | +| placeOfBirth | String | 255 | Place of birth | +| country | String | | Country of residence | +| address | String | 64 | Street name of residence | +| city | String | 64 | City of residence | +| subdivision | String | 3 | Last three characters of [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US) or [ISO 3166-2:CA](https://en.wikipedia.org/wiki/ISO_3166-2:CA) subdivision code | +| postalCode | String | 15 | Postal code of residence | +| mrzLine1 | String | 50 | MRZ line 1 | +| mrzLine2 | String | 50 | MRZ line 2 | +| mrzLine3 | String | 50 | MRZ line 3 | +| rawBarcodeData | String | 50 | Extracted barcode data | +| extractionMethod | JumioScanMode | | Extraction method used during scanning (MRZ, BARCODE, MANUAL, OCR_CARD, NFC) | +| imageData | JumioImageData | | Wrapper class for accessing image data of all credential parts from an ID verification session. This feature has to be enabled by your account manager. | + +#### Class ___JumioFaceResult___ +|Parameter |Type | Max. length | Description | +|:----------|:--------|:------------|:-----------------| +| passed | Boolean | | +| extractionMethod | JumioScanMode | | Extraction method used during scanning (FACE_MANUAL, FACE_IPROOV) | +| imageData | JumioImageData | | Wrapper class for accessing image data of all credential parts from an ID verification session. This feature has to be enabled by your account manager. | + +#### Class ___JumioRejectReason___ +List of all possible reject reasons returned if Instant Feedback is used: + +| Code | Message | Description | Check enabled server-side (2022-05-25) | +|:--------------|:---------|:-----------------|:-----------------:| +| 102 | BLACK_WHITE_COPY | Document appears to be a black and white photocopy | x | +| 103 | COLOR_PHOTOCOPY | Document appears to be a colored photocopy | | +| 104 | DIGITAL_COPY | Document appears to be a digital copy | x | +| 200 | NOT_READABLE | Document is not readable | | +| 201 | NO_DOC | No document could be detected | x | +| 206 | MISSING_BACK | Backside of the document is missing | x | +| 214 | MISSING_FRONT | Frontside of the document is missing | x | +| 2001 | BLURRY | Document image is unusable because it is blurry | x | +| 2003 | MISSING_PART_DOC | Part of the document is missing | x | +| 2005 | DAMAGED_DOCUMENT | Document appears to be damaged | | +| 2004 | HIDDEN_PART_DOC | Part of the document is hidden | | +| 2006 | GLARE | Document image is unusable because of glare | x | -```xml - -``` +#### Error Codes +List of all **_error codes_** that are available via the `code` and `message` property of the `JumioError` object. The first letter (A-J) represents the error case. The remaining characters are represented by numbers that contain information helping us understand the problem situation([x][yyyy]). + +|Code | Message | Description | +|:-------------:|:---------|:-----------------| +|A[x][yyyy]| We have encountered a network communication problem | Retry possible, user decided to cancel | +|B[x][yyyy]| Authentication failed | Secure connection could not be established, retry impossible | +|C[x]0401| Authentication failed | API credentials invalid, retry impossible | +|E[x]0000| No Internet connection available | Retry possible, user decided to cancel | +|F00000| Scanning not available at this time, please contact the app vendor | Resources cannot be loaded, retry impossible | +|G00000| Cancelled by end-user | No error occurred | +|H00000| The camera is currently not available | Camera cannot be initialized, retry impossible | +|I00000| Certificate not valid anymore. Please update your application | End-to-end encryption key not valid anymore, retry impossible | +|J00000| Transaction already finished | User did not complete SDK journey within session lifetime | +|N00000| Scanning not available at this time, please contact the app vendor | Required images are missing to finalize the acquisition | + +⚠️  __Note:__ Please always include error code and message when filing an error related issue to our support team. ## Custom UI - -ID Verification can be also implemented as a **custom scan view.** This means that only the scan view (including the scan overlays) are provided by the SDK. +ID Verification can be also implemented as a __custom scan view.__ This means that only the scan view (including the scan overlays) are provided by the SDK. The handling of the lifecycle, document selection, readability confirmation, intermediate callbacks, and all other steps necessary to complete a scan have to be handled by the client application that implements the SDK. The following sequence diagram outlines components, callbacks and methods for a basic ID Verification workflow: ![Custom UI Happy Path Diagram](images/happy_paths/custom_ui_happy_path_diagram.png) -⚠️  **Note:** The new 3D face liveness capturing technology is not optimized for tablets. When using Identity Verification, the face scanner will fallback to a simple face capturing functionality instead. Portrait orientation support is required in your app. +⚠️  __Note:__ The new 3D face liveness capturing technology is not optimized for tablets. When using Identity Verification, the face scanner will fallback to a simple face capturing functionality instead. Portrait orientation support is required in your app. -CustomUI enables you to use a custom scan view with a plain scanning user interface. Initialize the Jumio SDK and set [`token`][token] and [`datacenter`][datacenter]. +CustomUI enables you to use a custom scan view with a plain scanning user interface. Initialize the Jumio SDK and set `sdk.token` and `sdk.datacenter` and specify an instance of your class that implements `JumioControllerInterface`. -```kotlin -sdk = JumioSDK(context: Context).apply { - token = "YOUR_SDK_TOKEN" - datacenter = JumioDataCenter.YOUR_DATACENTER -} +``` +sdk = JumioSDK(context: Context) +sdk.token = "YOUR_SDK_TOKEN" +sdk.datacenter = JumioDataCenter.YOUR_DATACENTER ``` -- [`JumioDataCenter`][datacenter] values: `US`, `EU`, `SG` +* `JumioDataCenter` values: `US`, `EU`, `SG` ### Controller Handling +Start the SDK by passing `context` and the `JumioControllerInterface` instance. You will receive a `JumioController` object in return. -Start the SDK by passing `context` and an instance of your class that implements [`JumioControllerInterface`][jumiocontrollerinterface]. You will receive a [`JumioController`][jumiocontroller] object in return: - -```kotlin -val jumioController: JumioController = sdk.start(context, jumioControllerInterface) -``` +`val jumioController: JumioController = sdk.start(context, jumioControllerInterface)` When the `jumioController` is initialized, the following callback will be triggered: -```kotlin -onInitialized(credentials: List, consentItems: List?) -``` - -#### Consent Handling -To support compliance with various data protection laws, if a user’s consent is required the parameter `consentItems` will provide a list of [`JumioConsentItems`][jumioconsentitem]. Each consent item contains a text, a consent type and an URL that will redirect the user to Jumio’s consent details. Each [`JumioConsentItem`][jumioconsentitem] also provides a method `spannedTextWithLinkColor(color: Int)` that will return a spanned string containing the consent text and the link holder. If no color is specified, the link portion of the spanned string will only be underlined. - -If no consent is required, the parameter `consentItems` will be `null`. - -Each consent item can be one of two types: -* [`JumioConsentType.ACTIVE`][jumioconsenttype] -* [`JumioConsentType.PASSIVE`][jumioconsenttype] +`onInitialized(credentials: List, policyUrl: String?)` -For `ACTIVE` types, the user needs to accept the consent items explicitly, e.g. by enabling a UI switch or checking a checkbox for each consent item. For `PASSIVE` types, it is enough to present the consent text and URL to the user. The user implicitly accepts the passive consent items by continuing with the journey. For details please check out consent handling [(1)](https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/src/main/java/com/jumio/sample/customui/CustomUiActivity.kt#L218-L234) [(2)](https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/src/main/java/com/jumio/sample/customui/CustomUiActivity.kt#L252-L260) and [consent adapter](https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/src/main/java/com/jumio/sample/customui/adapter/CustomConsentAdapter.kt) in our sample app. +If a user’s consent is required, the parameter `policyUrl` will provide a valid URL that will redirect the user to Jumio’s consent details. User can open and continue to this link if they choose to do so. If the user consents to the Jumio policy, `jumioController.userConsented()` is required to be called internally before any credential can be initialized and the user journey can continue. If no consent is required, the parameter `policyUrl` will be null. -The user can open and continue to the provided consent link if they choose to do so. If the user consents to Jumio's policy, [`jumioController.userConsented(consentItem: JumioConsentItem, userConsent: Boolean)`][userconsented] is required to be called internally before any credential can be initialized and the user journey can continue. If no consent is required, the list of [`JumioConsentItems`][jumioconsentitem] will be `null`. If the user does not consent or if [`jumioController.userConsented(consentItem: JumioConsentItem, userConsent: Boolean)`][userconsented] is not called for all the items inside the `consentItems` list, the user will not be able to continue the user journey. - -⚠️  **Note:** Please be aware that in cases where the list of `consentItems` is not `null`, the user **must consent** to Jumio's processing of personal information, including biometric data, and be provided a link to Jumio's Privacy Notice. Do not accept automatically without showing the user any terms. +⚠️  __Note:__ Please be aware that in cases where `policyUrl` is not null, the user is __legally required__ to __actually consent__ to Jumio's policy. Do not accept automatically without showing the user any terms. ### Credential Handling +Create a JumioCredential which will contain all necessary information about the scanning process. For ID verification you will receive a `JumioIDCredential`, for Identity Verification a `JumioFaceCredential`, and so on. Initialize the necessary credential and check whether the credential is already preconfigured. If this is the case, the parameter `isConfigured` will be true. In this case, the credential can be started right away. -Obtain an instance of [`JumioCredential`][jumiocredential] which will contain all necessary information about the verification process by calling `start` on the `JumioController`. - -For ID verification you will receive a [`JumioIDCredential`][jumioidcredential], for Identity Verification a [`JumioFaceCredential`][jumiofacecredential], and so on. Call [`isConfigured`][isconfigured] to check if the credential is already pre-configured. If so, it can be started right away. - -```kotlin -val currentCredentialInfo = ... - -val currentCredential = jumioController.start(currentCredentialInfo) -if (currentCredential?.isConfigured == true) { - // credential can be started -} ``` - -If the credential is not configured yet, it needs some more configuration before scan parts can be initialized. Details on how to configure each credential and retrieve the first [scan part][jumioscanpart] can be found below. - -- [`JumioCredentialCategory`][jumiocredentialcategory] values = `ID`, `FACE`, `DOCUMENT`, `DATA` - -#### Jumio ID Credential - -In case of [`JumioIDCredential`][jumioidcredential], you can retrieve all available countries from [`supportedCountries`][supportedcountries]. After selecting a specific country from that list, you can query available documents for that country by either calling [`getPhysicalDocumentsForCountry`][getphysicaldocuments] or [`getDigitalDocumentsForCountry`][getdigitaldocuments]. To configure the [`JumioIDCredential`][jumioidcredential], pass your desired document as well as the country to [`setConfiguration()`][setidconfiguration]. - -Retrieve the supported countries: -```kotlin -idCredential = ... // Credential received via jumioController.start - -val countries: List = idCredential.countries - -val country = countries.first { ... } // Select your desired country +currentCredentialInfo: val currentCredential = jumioController.start(currentCredentialInfo!!) +currentCredential?.isConfigured == true ``` -Query available physical documents (e.g. passports or driving licenses): +If the credential is not configured yet, the credential needs some more configuration before scan parts can be initialized. -```kotlin -val jumioDocuments = idCredential.getPhysicalDocumentsForCountry(country) - -val document = jumioDocuments.first { it.type == JumioDocumentType.PASSPORT } -``` +* `JumioCredentialCategory` values = `ID`, `FACE`, `DOCUMENT` -Query available digital documents ("Digital Identities"): - -```kotlin -val jumioDocuments = idCredential.getDigitalDocumentsForCountry(country) - -val document = jumioDocuments.first() -``` - -Set a valid country / document configuration: - -```kotlin -idCredential.setConfiguration(country, document) -``` - -- [`JumioPhysicalDocument`][jumiophysicaldocument] represents a single `JumioDocumentType` and `JumioDocumentVariant` combination - - - [`JumioDocumentType`][jumiodocumenttype] values: `PASSPORT`, `VISA`, `DRIVING_LICENSE`, `ID_CARD` - - - [`JumioDocumentVariant`][jumiodocumentvariant] values: `PAPER`, `PLASTIC` - -- [`JumioDigitalDocument`][jumiodigitaldocument] represents a digital document ("Digital Identity") - -Once the credential is configured, it is ready to initialize it's first scan part and start the verification process: - -```kotlin -val credentialPart = idCredential.credentialParts.first() -idCredential.initScanPart(credentialPart, yourScanPartInterface) -``` - -#### Jumio Face Credential - -In case of [`JumioFaceCredential`][jumiofacecredential], depending of the configuration the SDK uses the Certified Liveness technology from iProov to determine liveness or the manual face detection. The mode can be detected by checking the [`JumioScanMode`][jumioscanmode] of the [`JumioScanPart`][jumioscanpart]. Make sure to also implement `FACE_MANUAL` as a fallback, in case `FACE_IPROOV` is not available. - -Retrieve the credential part of the credential to start the scanning process by calling: +#### Jumio ID Credential +In case of `JumioIDCredential`, query the available country and document combinations by checking the countries map provided by the credential. After that, specify country and document details by setting the credential configuration to receive all relevant scan parts for your chosen document. Use `setConfiguration()` to set a valid country / document combination from that list: -```kotlin -val credentialPart = currentCredential?.credentialParts?.first() -val scanPart = currentCredential?.initScanPart(credentialPart, yourScanPartInterface) ``` +val countries:Map> = (currentCredential as JumioIDCredential)?.countries -or use the convenience method - -```kotlin -val scanPart = currentCredential?.initScanPart(yourScanPartInterface) +val country = “USA” +val jumioDocument = countries.get(“USA”) +(currentCredential as JumioIDCredential).setConfiguration(country, jumioDocument) ``` -#### Jumio Document Credential - -In case of [`JumioDocumentCredential`][jumiodocumentcredential], there is the option to either acquire the image using the camera or selecting a PDF file from the device. Call `setConfiguration` with a [`JumioAcquireMode`][acquiremode] to select the preferred mode as described in the code documentation. +* `JumioDocument` values: `JumioDocumentType`, `JumioDocumentVariant` -- [`JumioAcquireMode`][acquiremode] values: `CAMERA`, `FILE` +* `JumioDocumentType` values: `PASSPORT`, `VISA`, `DRIVING_LICENSE`, `ID_CARD` -```kotlin -val acquireModes: List = (credential as JumioDocumentCredential).availableAcquireModes +* `JumioDocumentVariant` values: `PAPER`, `PLASTIC` -(currentCredential as JumioDocumentCredential).setConfiguration(acquireModes[0]) +Retrieve the first credential part of the credential to start the scanning process by calling: ``` - -Retrieve the credential part of the credential to start the scanning process by calling: - -```kotlin val credentialPart = currentCredential?.credentialParts?.first() -val scanPart = currentCredential?.initScanPart(credentialPart, yourScanPartInterface) -``` - -or use the convenience method - -```kotlin -val scanPart = currentCredential?.initScanPart(yourScanPartInterface) -``` - -If [`JumioAcquireMode`][acquiremode] `FILE` is used, the [`JumioFileAttacher`][jumiofileattacher] needs to be utilized -to add a File or FileDescriptor for the selected [`JumioScanPart`][jumioscanpart]. - -```kotlin -val fileAttacher = JumioFileAttacher() -fileAttacher.attach(scanPart) - -val file = File("/path/to/your/file.pdf") -fileAttacher.setFile(file) +currentCredential?.initScanPart(credentialPart, yourScanPartInterface) ``` #### Jumio Data Credential - -[`JumioDataCredential`][jumiodatacredential] is used for the device fingerprinting. There are some optional configurations you can do to enhance it's behavior. - -1. Add the following Android permissions to your `AndroidManifest.xml`, if not already added: - -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -ℹ️  **Note:** - -- The reason for the requirement of the given permission is added as inline comment. -- Some of them are `dangerous` permissions, and you have to ask for the permission from the user. More information about permissions can be found in the official [Android documentation](https://developer.android.com/guide/topics/permissions/overview) -- The above permissions imply to add some features to your manifest file: - -```xml +`JumioDataCredential` is used for the device fingerprinting. There are some optional configurations you can do to enhance it's behaviour. + +1. Add the following Android permissions to your AndroidManifest.xml, if not already added: +``` + // Get user's GPS Location. + // Get user's GPS Location. + // Get User's Wifi name and Status. + // Get User's Network information and State. + // Get Phone and Network information (MNC, MCC, IMEI, Phone Number, Phone Type (GSM/CDMA), SIM Number, ...etc). + // Get user's Biometric authentication settings (Face or Fingerprint authentication). + // Get user's Biometric authentication settings (Face or Fingerprint authentication). + // Write data into device to check re-installation behaviour. + // Get External storage status, total size, free size...etc. + // Get GSFID (Google Services Id) for accurate identification for unique users. +``` + +Note: +* the reason for the requirement of the given permission is added as inline comment +* some of them are `dangerous` permissions, and you have to ask for the permission from the user. More information about permissions can be found in the official [Android documentation](https://developer.android.com/guide/topics/permissions/overview) +* The above permissions imply to add some features to your manifest file: +``` - + android:name="android.hardware.location" + android:required="false" /> - + android:name="android.hardware.telephony" + android:required="false" /> + android:name="android.hardware.wifi" + android:required="false" /> ``` -2. If you use proguard for obfuscation, you have to add some rules to your [`proguard-rules.pro`][proguardrules] - configuration file: - -```text +2. If you use proguard for obfuscation, you have to add some rules to your proguard-rules.pro configuration file: +``` -keep com.google.android.gms.* -keep com.google.android.gms.tasks.* -keep com.google.android.gms.ads.identifier.AdvertisingIdClient ``` -### ScanPart Handling +### ScanPart Handling The following sequence diagram outlines an overview of ScanPart handling details: ![ScanPart Happy Path Diagram](images/happy_paths/scanpart_happy_path_diagram.png) -Start the scanning process by initializing the [`JumioScanPart`][jumioscanpart]. A list of mandatory [`JumioCredentialPart`][jumiocredentialpart]s is retrievable over [`currentCredential?.credentialParts`](credentialPartsList) as soon as the credential is configured. Possible values are: +Start the scanning process by initializing the scan part. Provide a `JumioCredentialPart` from the list below: `currentScanPart = currentCredential?.initScanPart(credentialPart, yourJumioScanPartInterface)` -- [`JumioCredentialPart`][jumiocredentialpart] values: `FRONT`, `BACK`, `MULTIPART`, `FACE`, `DOCUMENT`, `NFC`, `DEVICE_RISK` - -`MULTIPART` handles the scanning of multiple sides in one seamless capture experience. When a [`MULTIPART`][jumiomultipart] scan part is started, an additional [`NEXT_PART`][nextpart] step is sent after [`IMAGE_TAKEN`][imagetaken]. This signals that another side of the document should be scanned now. The step returns the [`JumioCredentialPart`][jumiocredentialpart] that should be scanned next. We suggest to actively guide the user to move to the next part, e.g. by showing an animation and by disabling the extraction during the animation. Please also check the new [`NEXT_PART`][nextpart] scan step for this [`JumioCredentialPart`][jumiocredentialpart] - -Start the execution of the acquired [`JumioScanPart`][jumioscanpart] by calling [`currentScanPart?.start()`][startscanpart]. +* `JumioCredentialPart` values: `FRONT`, `BACK`, `FACE`, `DOCUMENT`, `NFC`, `DEVICE_RISK` -When the scanning is done, the parameter [`JumioScanStep.CAN_FINISH`][canfinish] will be received and the scan part can be finished by calling [`currentScanPart?.finish()`][finishscanpart]. +When the scanning is done, the parameter `JumioScanStep.CAN_FINISH` will be received and the scan part can be finished by calling `currentScanPart?.finish()`. -Check if the credential is complete by calling [`currentCredential?.isComplete`][iscompletecredential] and finish the current credential by calling [`currentCredential?.finish()`][finishcredential]. +Check if the credential is complete by calling `currentCredential?.isComplete` and finish the current credential by calling `currentCredential?.finish()`. -Continue that procedure until all needed credentials (e.g. `ID`, `FACE`, `DOCUMENT`) are finished. Check if all credentials are finished with [`jumioController.isComplete`][iscompletecontroller], then call [`jumioController?.finish()`][finishcontroller] to finish the user journey. +Continue that procedure until all needed credentials (e.g. `ID`, `FACE`, `DOCUMENT`) are finished. Check if all credentials are finished with `controller.isComplete`, then call `jumioController?.finish()` to finish the user journey. -The callback [`onFinished()`][onfinished] will be received after the controller has finished: +The callback `onFinished() ` will be received after the controller has finished: -```kotlin +``` override fun onFinished(result: JumioResult) { log("onFinished") sdkResult.value = result } ``` -#### Scan steps - -During the scanning process [`onScanStep()`][onscanstep] will be called as soon as the [`JumioScanPart`][jumioscanpart] needs additional input to continue the scanning journey. The provided [`JumioScanStep`][jumioscanstep] indicates what needs to be done next. +During the scanning process, use the `scanPart` method `onScanStep()` to check on the scanning progress. The scan step `CAN_FINISH` indicates that the scanning process for this part is done. -[`JumioScanStep`][jumioscanstep] covers lifecycle events which require action from the customer to continue the process. -[`JumioScanStep`][jumioscanstep] values: `PREPARE`, `STARTED`, `ATTACH_ACTIVITY`, `ATTACH_FILE`, `SCAN_VIEW`, `NEXT_PART`, `IMAGE_TAKEN`, `PROCESSING`, `CONFIRMATION_VIEW`, `REJECT_VIEW`, `RETRY`, `CAN_FINISH`, `ADDON_SCAN_PART`, `DIGITAL_IDENTITY_VIEW`, `THIRD_PARTY_VERIFICATION` +`JumioScanStep` covers lifecycle events which require action from the customer to continue the process. -[`PREPARE`][prepare] is only sent if a scan part requires upfront preparation and the customer should be notified (e.g. by displaying a loading screen): +* `JumioScanStep` values: `PREPARE`, `STARTED`, `ATTACH_ACTIVITY`, `SCAN_VIEW`, `IMAGE_TAKEN`, `PROCESSING`, `CONFIRMATION_VIEW`, `REJECT_VIEW`, `RETRY`, `CAN_FINISH`, `ADDON_SCAN_PART` -```kotlin +`PREPARE` is only sent if a scan part requires upfront preparation and the customer should be notified (e.g. by displaying a loading screen): +``` JumioScanStep.PREPARE -> { showLoadingView() } ``` -[`STARTED`][started] is always sent when a scan part is started. If a loading spinner was triggered before, it can now be dismissed: - -```kotlin +`STARTED` is always sent when a scan part is started. If a loading spinner was triggered before, it can now be dismissed: +``` JumioScanStep.STARTED -> { hideLoadingView() } ``` -[`ATTACH_ACTIVITY`][attachactivity] indicates that an Activity Context is needed. Please see [`JumioActivityAttacher`][jumioactivityattacher] for more information. +`IMAGE_TAKEN` is triggered as soon as the image is taken and has been uploaded to the Jumio server. The camera preview is stopped during that step -```kotlin -JumioScanStep.ATTACH_ACTIVITY -> { - currentScanPart?.let { - JumioActivityAttacher(this).attach(it) - } -} -``` +When background processing is executed, `JumioScanStep.PROCESSING` is triggered. -[`ATTACH_FILE`][attachfile] is called when a File through the [`JumioFileAttacher`][jumiofileattacher] can be added to the [`JumioScanPart`][jumioscanpart]. +When a confirmation view should be displayed, depending on the outcome either `JumioScanStep.CONFIRMATION_VIEW` or `JumioScanStep.REJECT_VIEW` is displayed. To display the ScanPart in the confirmation or reject view, simply attach the views once the steps are triggered: -```kotlin -JumioScanStep.ATTACH_FILE -> { - currentScanPart?.let { - val jumioFileAttacher = JumioFileAttacher() - jumioFileAttacher.attach(it) - // Choose how the file should be attached - // jumioFileAttacher.setFileDescriptor() - // jumioFileAttacher.setFile() - } -} ``` - -[`SCAN_VIEW`][scanview] points out that a [`JumioScanView`][jumioscanview] needs to be attached to the [`JumioScanPart`][jumioscanpart]. The [`JumioScanView`][jumioscanview] is a custom view that can be placed in your layout. During runtime it just needs to be attached to the [`JumioScanPart`][jumioscanpart]. - -```kotlin -JumioScanStep.SCAN_VIEW -> { - currentScanPart?.let { - jumioScanView.attach(it) - } -} -``` - -[`IMAGE_TAKEN`][imagetaken] is triggered as soon as the image is taken and has been uploaded to the Jumio server. The camera preview is stopped during that step if no additional part needs to be scanned. Otherwise [`NEXT_PART`][nextpart] will be triggered with additional information on which part has to be scanned next. - -When background processing is executed, [`JumioScanStep.PROCESSING`][processing] is triggered. - -If images for confirmation or rejection need to be displayed then [`JumioScanStep.CONFIRMATION_VIEW`][confirmationview] or [`JumioScanStep.REJECT_VIEW`][rejectview] is triggered. Simply attach the [`JumioConfirmationHandler`][jumioconfirmationhandler] or [`JumioRejectHandler`][jumiorejecthandler] once the steps are triggered and render the available [`JumioCredentialParts`][jumiocredentialpart] in [`JumioConfirmationView`][jumioconfirmationview] or [`JumioRejectView`][jumiorejectview] objects: - -```kotlin JumioScanStep.CONFIRMATION_VIEW -> { - val confirmationHandler = ConfirmationHandler() - confirmationHandler.attach(scanPart) - confirmationHandler.parts.forEach { - val confirmationView = JumioConfirmationView(context) - confirmationHandler.renderPart(it, confirmationView) - ... - } + confirmationView.setVisibility(View.VISIBLE) + confirmationView.attach(scanPart!!) } JumioScanStep.REJECT_VIEW -> { - val rejectHandler = RejectHandler() - rejectHandler.attach(scanPart) - rejectHandler.parts.forEach { - val rejectView = JumioRejectView(context) - rejectHandler.renderPart(it, rejectView) - ... - } -} -``` - -The scan part can be confirmed by calling [`confirmationView.confirm()`][confirm] or retaken by calling [`confirmationView.retake()`][retakeconfirmation] or [`rejectView.retake()`][retakereject]. - -The retry scan step returns a data object of type [`JumioRetryReason`][jumioretryreason]. On [`RETRY`][retry], a retry should be triggered on the scan part. - -```kotlin -JumioScanStep.RETRY -> { - val reason = data as? JumioRetryReason ?: return - - val retryCode = reason.code - val retryMessage = reason.message - ... - - currentScanPart?.retry(reason) + rejectView.setVisibility(View.VISIBLE) + rejectView.attach(scanPart!!) } ``` +The scan part can be confirmed by calling `confirmationView.confirm()` or retaken by calling `confirmationView.retake()` or `rejectView.retake()` -For possible retry codes please checkout [`JumioRetryReasonGeneric`][jumioretrygeneric], [`JumioRetryReasonDocumentVerification`][jumioretrydv], [`JumioRetryReasonNfc`][jumioretrynfc], [`JumioRetryReasonIproov`][jumioretryiproov] and [`JumioRetryReasonDigitalIdentity`][jumioretrydi]. - -[`DIGITAL_IDENTITY_VIEW`][digitalidentityview] points out that the current [`JumioScanPart`][jumioscanpart] needs to be attached to a [`JumioDigitalIdentityView`][jumiodiview]. The [`JumioDigitalIdentityView`][jumiodiview] is a custom view that can be placed in your layout. - -```kotlin -JumioScanStep.DIGITAL_IDENTITY_VIEW -> { - currentScanPart?.let { - jumioDigitalIdentityView.attach(it) - } -} +The retry scan step returns a data object of type `JumioRetryReason`. On `RETRY`, a retry has to be triggered on the credential. ``` - -[`THIRD_PARTY_VERIFICATION`][thirdpartyverification] is triggered in case the current [`JumioScanPart`][jumioscanpart] will switch to a third party's application to continue the verification process (e.g. for Digital Identity verification). As this might take some time, showing a loading indicator is recommended. - -```kotlin -JumioScanStep.THIRD_PARTY_VERIFICATION -> { - showLoadingView() +if (data is JumioRetryReason) { + log("retry reason: ${data.code}") + log("retry message: ${data.message}") } ``` -As soon as the scan part has been confirmed and all processing has been completed [`CAN_FINISH`][canfinish] is triggered. [`scanPart.finish()`][finishscanpart] can now be called. During the finish routine the SDK checks if there is an add-on functionality for this part available, e.g. possible NFC scanning after an MRZ scan part. In this case [`ADDON_SCAN_PART`][addonscanpart] will be called - -When an add-on to the current scan part is available, [`JumioScanStep.ADDON_SCAN_PART`][addonscanpart] is sent. The add-on scan part can be retrieved using the method `addonScanPart = currentCredential?.getAddonPart()`. +As soon as the scan part has been confirmed and all processing has been completed `CAN_FINISH` is triggered. `scanPart.finish()` can now be called. During the finish routine the SDK checks if there is an add-on functionality for this part available, e.g. possible NFC scanning after an MRZ scan part. In this case `ADDON_SCAN_PART` will be called -#### Scan Updates +When an add-on to the current scan part is available, `JumioScanStep.ADDON_SCAN_PART` is sent. The add-on scan part can be retrieved using the method `addonScanPart = currentCredential?.getAddonPart()`. -Apart from the scan steps, there are also scan updates distributed the `scanPart` method [`onUpdate()`][onupdate]. They cover additional scan information that is relevant and might need to be displayed during scanning. The parameters are [`JumioScanUpdate`][jumioscanupdate] and an optional value `data` of type `Any` that can contain additional information for each scan update as described. +`JumioScanUpdate` covers scan information that is relevant and might need to be displayed during scanning. -[`JumioScanUpdate`][jumioscanupdate] values: `CAMERA_AVAILABLE`, `FALLBACK`, `NFC_EXTRACTION_STARTED`, `NFC_EXTRACTION_PROGRESS`, `NFC_EXTRACTION_FINISHED`, `CENTER_ID`, `HOLD_STRAIGHT`, `MOVE_CLOSER`, `TOO_CLOSE`, `HOLD_STILL`, `MOVE_FACE_CLOSER`, `FACE_TOO_CLOSE` - -For `FALLBACK`, there are 2 possible [`JumioFallbackReason`][fallbackreason]'s sent in the optional `data` value to indicate the reason of the fallback. +* `JumioScanUpdate` values: `LEGAL_HINT`, `CAMERA_AVAILABLE`, `FALLBACK`, `NFC_EXTRACTION_STARTED`, `NFC_EXTRACTION_PROGRESS`, `NFC_EXTRACTION_FINISHED` ### Result and Error Handling +Instead of using the standard method `onActivityResult()`, implement the following methods within your `jumioControllerInterface` for successful scans and error notifications: -Instead of using the standard method `onActivityResult()`, implement the following methods within your [`jumioControllerInterface`][jumiocontrollerinterface] for successful scans and error notifications: - -The method `onFinished(result: JumioResult)` has to be implemented to handle data after a successful scan, which will return [`JumioResult`][jumioresult]. +The method `onFinished(result: JumioResult)` has to be implemented to handle data after a successful scan. -```kotlin +``` override fun onFinished(result: JumioResult) { - val data = result - // handle success case - finish() -} + val data = result + // handle success case + finish() + } ``` -The method `onError(error: JumioError)` has to be implemented to handle data after an unsuccessful scan, which will return [`JumioError`][jumioerror]. Check the parameter [`error.isRetryable`][isretryable] to see if the failed scan attempt can be retried. +The method `onError(error: JumioError)` has to be implemented to handle data after an unsuccessful scan. Check the parameter `error.isRetryable` to see if the failed scan attempt can be retried. -```kotlin +``` override fun onError(error: JumioError) { - if (error.isRetryable) { - // retry scan attempt - } else { - // handle error case - } - log(String.format("onError: %s, %s, %s", error.code, error.message, if (error.isRetryable) "true" else "false")) -} + if(error.isRetryable) { + // retry scan attempt + } else { + // handle error case + } + log(String.format("onError: %s, %s, %s", error.code, error.message, if + (error.isRetryable) "true" else "false" ) + } ``` +If an error is retryable, `jumioController.retry()` should be called to execute a retry. -If an error is retryable, [`jumioController.retry()`][retrycontroller] should be called to execute a retry. - -### Instant Feedback - +#### Instant Feedback The use of Instant Feedback provides immediate end user feedback by performing a usability check on any image the user took and prompting them to provide a new image immediately if this image is not usable, for example because it is too blurry. Please refer to the [JumioRejectReason table](#class-jumiorejectreason) for a list of all reject possibilities. -## Customization - -The Jumio SDK provides various options to customize its UI. If you are using [Default UI](#default-ui) you can change each screen to fulfil your needs. In case you decide to implement the verification workflow on your own (see [Custom UI](#custom-ui)) you also have the possibility to influence the look and feel of some views provided by the SDK, e.g. [`JumioScanView`][jumioscanview]. - -### Customization Tool - -[Jumio Surface](https://jumio.github.io/surface-tool/) is a web tool that offers the possibility to apply and visualize all available customization options for the Jumio SDK, as well as an export feature that generates all data needed to import the desired changes straight into your codebase. - -[![Jumio Surface](images/surface_tool.png)](https://jumio.github.io/surface-tool/) - -### Default UI customization - -The surface tool utilizes each screen of Jumio's [Default UI](#default-ui) to visualize all items and colors that can be customized. If you are planning to use the [Default UI](#default-ui) implementation, you can specify the `Theme.Jumio` as a parent style in your application and override according attributes within this theme to match your application's look and feel. - -After customizing the SDK via the surface tool, you can click the **Android-Xml** button in the **Output** menu on the bottom right to copy the code from the theme `AppThemeCustomJumio` to your Android app's `styles.xml` file. - -Apply your custom theme that you defined before by replacing `Theme.Jumio` in the `AndroidManifest.xml:` - -```xml - - ... - -``` - -#### Dark Mode - -`Theme.Jumio` attributes can also be customized for dark mode. If you haven't done so already, create a `values-night` folder in your resources directory and add a new `styles.xml` file. Adapt your custom Jumio theme for dark mode. The SDK will switch automatically to match the system settings of the user device. - -### Custom UI customization - -If you implement your own UI, you can still customize how some views provided by the SDK look. In particular this means you can customize Jumio's **scan overlay**, **NFC scanning** and **iProov Face liveness** views at the moment. - -By following the steps explained in [Default UI customization](#default-ui-customization) you can see potential attributes to override in the generated XML file. - # Security - -All SDK related traffic is sent over HTTPS using TLS and public key pinning. Additionally, the information itself within the transmission is also encrypted utilizing **Application Layer Encryption** (ALE). ALE is a Jumio custom-designed security protocol that utilizes RSA-OAEP and AES-256 to ensure that the data cannot be read or manipulated even if the traffic was captured. +All SDK related traffic is sent over HTTPS using TLS and public key pinning. Additionally, the information itself within the transmission is also encrypted utilizing __Application Layer Encryption__ (ALE). ALE is a Jumio custom-designed security protocol that utilizes RSA-OAEP and AES-256 to ensure that the data cannot be read or manipulated even if the traffic was captured. # Support ## Licenses - The software contains third-party open source software. For more information, see [licenses](licenses). This software is based in part on the work of the Independent JPEG Group. ## Contact - -If you have any questions regarding our implementation guide please contact **Jumio Customer Service** at [support@jumio.com](mailto:support@jumio.com). The [Jumio online helpdesk](https://support.jumio.com) contains a wealth of information regarding our services including demo videos, product descriptions, FAQs, and other resources that can help to get you started with Jumio. +If you have any questions regarding our implementation guide please contact Jumio Customer Service at support@jumio.com. The [Jumio online helpdesk](https://support.jumio.com) contains a wealth of information regarding our services including demo videos, product descriptions, FAQs, and other resources that can help to get you started with Jumio. ## Copyright - © Jumio Corporation, 395 Page Mill Road, Suite 150, Palo Alto, CA 94306 The source code and software available on this website (“Software”) is provided by Jumio Corp. or its affiliated group companies (“Jumio”) "as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall Jumio be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including but not limited to procurement of substitute goods or services, loss of use, data, profits, or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this Software, even if advised of the possibility of such damage. In any case, your use of this Software is subject to the terms and conditions that apply to your contractual relationship with Jumio. As regards Jumio’s privacy practices, please see our privacy notice available here: [Privacy Policy](https://www.jumio.com/legal-information/privacy-policy/). - -[token]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/token.html -[datacenter]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/data-center.html -[sdkversion]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/-companion/version.html -[isrooted]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/-companion/is-rooted.html -[camerafacing]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-camera-facing/index.html -[acquiremode]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-acquire-mode/index.html -[fallbackreason]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-fallback-reason/index.html -[userconsented]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/user-consented.html -[isconfigured]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/is-configured.html -[setidconfiguration]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/set-configuration.html -[supportedcountries]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/supported-countries.html -[getphysicaldocuments]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/get-physical-documents-for-country.html -[getdigitaldocuments]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/get-digital-documents-for-country.html -[iscompletecredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/is-complete.html -[iscompletecontroller]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/is-complete.html -[startscanpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/start.html -[finishscanpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/finish.html -[finishcredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/finish.html -[finishcontroller]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/finish.html -[isretryable]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.error/-jumio-error/is-retryable.html -[confirm]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-confirmation-view/confirm.html -[retakeconfirmation]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-confirmation-view/retake.html -[retakereject]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-reject-view/retake.html -[retrycontroller]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/retry.html -[onfinished]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/on-finished.html -[onscanstep]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-scan-part-interface/on-scan-step.html -[onupdate]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-scan-part-interface/on-update.html -[canfinish]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-c-a-n_-f-i-n-i-s-h/index.html -[prepare]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-p-r-e-p-a-r-e/index.html -[started]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-s-t-a-r-t-e-d/index.html -[attachactivity]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-a-t-t-a-c-h_-a-c-t-i-v-i-t-y/index.html -[attachfile]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-a-t-t-a-c-h_-f-i-l-e/index.html -[scanview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-s-c-a-n_-v-i-e-w/index.html -[digitalidentityview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-d-i-g-i-t-a-l_-i-d-e-n-t-i-t-y_-v-i-e-w/index.html -[imagetaken]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-i-m-a-g-e_-t-a-k-e-n/index.html -[nextpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-n-e-x-t_-p-a-r-t/index.html -[processing]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-p-r-o-c-e-s-s-i-n-g/index.html -[confirmationview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-c-o-n-f-i-r-m-a-t-i-o-n_-v-i-e-w/index.html -[rejectview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-r-e-j-e-c-t_-v-i-e-w/index.html -[retry]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-r-e-t-r-y/index.html -[addonscanpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-a-d-d-o-n_-s-c-a-n_-p-a-r-t/index.html -[thirdpartyverification]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/-t-h-i-r-d_-p-a-r-t-y_-v-e-r-i-f-i-c-a-t-i-o-n/index.html -[jumioactivityattacher]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-activity-attacher/index.html -[jumiofileattacher]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-file-attacher/index.html -[jumioscanview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-scan-view/index.html -[jumiocontroller]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/index.html -[jumiocontrollerinterface]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/index.html -[jumioresult]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.result/-jumio-result/index.html -[jumioidresult]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.result/-jumio-i-d-result/index.html -[jumiofaceresult]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.result/-jumio-face-result/index.html -[jumiorejectreason]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.reject/-jumio-reject-reason/index.html -[jumioerror]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.error/-jumio-error/index.html -[jumiocredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/index.html -[jumioidcredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/index.html -[jumiodocumentcredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-document-credential/index.html -[jumiofacecredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-face-credential/index.html -[jumiodatacredential]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-data-credential/index.html -[jumiocredentialcategory]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential-category/index.html -[jumiophysicaldocument]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-physical-document/index.html -[jumiodigitaldocument]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-digital-document/index.html -[jumiodocumenttype]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-document-type/index.html -[jumiodocumentvariant]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-document-variant/index.html -[jumiocredentialpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-credential-part/index.html -[jumioscanstep]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/index.html -[jumioretryreason]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.retry/-jumio-retry-reason/index.html -[jumioretrygeneric]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.retry/-jumio-retry-reason-generic/index.html -[jumioretrydv]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.retry/-jumio-retry-reason-document-verification/index.html -[jumioretrynfc]: https://jumio.github.io/mobile-sdk-android/jumio-nfc/com.jumio.sdk.retry/-jumio-retry-reason-nfc/index.html -[jumioretryiproov]: https://jumio.github.io/mobile-sdk-android/jumio-iproov/com.jumio.sdk.retry/-jumio-retry-reason-iproov/index.html -[jumioretrydi]: https://jumio.github.io/mobile-sdk-android/jumio-digital-identity/com.jumio.sdk.retry/-jumio-retry-reason-digital-identity/index.html -[jumioconfirmationview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-confirmation-view/index.html -[jumiorejectview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-reject-view/index.html -[jumioconfirmationhandler]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-confirmation-handler/index.html -[jumiorejecthandler]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-reject-handler/index.html -[jumioscanupdate]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-update/index.html -[jumiofileattacher]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-file-attacher/index.html -[jumioscanpart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/index.html -[jumiomultipart]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-credential-part/-m-u-l-t-i-p-a-r-t/index.html -[jumioscanmode]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-mode/index.html -[jumioconsenttype]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-consent-type/index.html -[jumioconsentitem]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.consent/-jumio-consent-item/index.html -[credentialpartslist]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/credential-parts.html -[proguardrules]: https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/proguard-rules.pro -[jumiodiview]: https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-digital-identity-view/index.html diff --git a/docs/known_issues.md b/docs/known_issues.md index 4f1dbef3..78412289 100644 --- a/docs/known_issues.md +++ b/docs/known_issues.md @@ -3,8 +3,6 @@ # Known Issues ## Table of Contents -- [SDK Version 4.0.0 and Above](#sdk-version-400-and-above) - - [Duplicate Files for 'libc++_shared.so' Library](#duplicate-lib-c) - [SDK Version 3.9.2 and 4.0.0](#sdk-version-392-and-400) - [Face Scan Crash at Start](#face-scan-crash-at-start) - [SDK Version 3.9.0](#sdk-version-390) @@ -21,29 +19,6 @@ - [Static Interface Methods Are only Supported with Android N](#Static-interface-methods-are-only-supported-with-Android-N) - [SDK Crashes Trying to Display Animations (Android Version 5 and Lower)](#sdk-crashes-trying-to-display-animations-(android-version-4-and-lower)) - [Country Missing from the Country List](#country-missing-from-the-country-list) - - [Datadog in Dynamic feature modules](#datadog-in-dynamic-feature-modules) - -# SDK Version 4.0.0 and Above - -
-

Duplicate Files for 'libc++_shared.so' Library

-
- -If build fails with error message: - -_2 files found with path 'lib/arm64-v8a/libc++\_shared.so' from inputs ..._ - -Please add the following `packagingOptions` to the configuration in your `build.gradle` file: - -``` -android{ - packagingOptions { - pickFirst 'lib/armeabi-v7a/libc++_shared.so' - pickFirst 'lib/arm64-v8a/libc++_shared.so' - } -} - -``` # SDK Version 3.9.2 and 4.0.0 @@ -102,7 +77,7 @@ android.jetifier.blacklist=bcprov-jdk15on Please note that the naming of this will change with the Android Gradle Plugin 4 release and will become `android.jetifier.ignorelist` ## Custom UI -On using iProov in CustomUI, in case `NetverifySDKController$retry` function is called for an error EXX0000, the SDK can fail with the following exception: `java.lang.NoClassDefFoundError: Failed resolution of: Lcom/jumio/zoom/custom/ZoomCustomScanPresenter`. This issue was fixed in SDK version 3.9.0. As a workaround it is possible to only add `implementation "com.jumio.android:zoom:3.8.0@aar"` to the build.gradle dependencies. +On using iProov in CustomUI, in case `NetverifySDKController$retry` function is called for an error EX0000, the SDK can fail with the following exception: `java.lang.NoClassDefFoundError: Failed resolution of: Lcom/jumio/zoom/custom/ZoomCustomScanPresenter`. This issue was fixed in SDK version 3.9.0. As a workaround it is possible to only add `implementation "com.jumio.android:zoom:3.8.0@aar"` to the build.gradle dependencies. # SDK Version 3.7.x @@ -140,10 +115,3 @@ implementation "com.jumio.android:nv-barcode:3.9.0@aar" A complete list of all dependencies [can be found here.](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_guide.md#dependencies) __Note:__ Version numbers may vary. - -## Datadog in Dynamic feature modules -Datadog registers a Content Receiver through its AndroidManifest. Therefore Datadog needs to be linked in the base app, otherwise the app will crash during start. -``` -api "com.datadoghq:dd-sdk-android-rum:2.0.0" -``` -__Note:__ Version numbers may vary. \ No newline at end of file diff --git a/docs/maintenance_policy.md b/docs/maintenance_policy.md deleted file mode 100644 index eb1d5ad6..00000000 --- a/docs/maintenance_policy.md +++ /dev/null @@ -1,51 +0,0 @@ -![Header Graphic](images/jumio_feature_graphic.jpg) - -# Maintenance and Support Policy - -## Overview -This document outlines the maintenance policy for Jumio’s Software Development Kits (“SDKs”), including Mobile and Web SDK and their dependencies. -Our SDK releases are published publicly as indicated in our documentation as well as to package managers. Documentation and sample implementations are available as source code on GitHub ([Android](https://github.com/Jumio/mobile-sdk-android) and [iOS](https://github.com/Jumio/mobile-sdk-ios)). - -We are consistently updating the Jumio SDKs in order to provide the best possible experience for you. Upgrading to the latest SDK version will not only ensure you benefit from various performance enhancements and bug fixes, but will also allow you to take advantage of new capabilities. All releases undergo comprehensive testing by our teams before being deployed. - -If you are using a Mobile SDK, please ensure your apps have been released and your end-users have updated before the End-of-Support date. Jumio does not provide support after the End-of-Support date. - -Customers should review the [Jumio Terms and Conditions](https://www.jumio.com/legal-information/privacy-notices/) for requirements related to the implementation of updates. - -## Versioning -Jumio SDK release versions are in the form of X.Y.Z: -* X major version - very rarely updated -* Y minor version - normally updated once in a quarter -* Z patch version - updated on demand - -Major versions of Jumio’s SDKs are released rarely, and only in case of substantial changes to support new features and patterns. Breaking changes can happen in Major and Minor versions. Applications need to be updated in order for them to work with the newest SDK version. Breaking changes are highlighted in our [Android](https://github.com/Jumio/mobile-sdk-android) and [iOS](https://github.com/Jumio/mobile-sdk-ios) implementation guides for each release. - -Jumio will only provide patches or additional updates on the latest version regardless if it’s Major, Minor or Patch. - -## SDK Version Lifecycle -The life-cycle for SDK versions consists of these phases, which are outlined below: -* __Developer Preview__ (Phase 0) - During this phase, SDKs are not supported, must not be used in production environments, and are meant for early access and feedback purposes only. It is possible for future releases to introduce breaking changes. It can be alpha, beta, or release candidate. -* __General availability / Full support__ (Phase 1) - During this phase, SDKs are fully supported. Jumio will provide active support on this version and will provide required bug fixes or security fixes within new / upcoming versions (major, minor, patch). -* __End-of-Support__ (Phase 2) - Each SDK version reaches end of support 9 months after the release date. Issues that appear after the End-of-Support date will only be addressed in the upcoming SDK releases. Previously published releases will continue to be available via public package managers and the code will remain on GitHub. Use of an SDK that has reached End-of-Support is done at the business customers’ discretion. We recommend upgrading to the latest version. -* __End-of-Life__ (Phase 3) - By default, our SDK will reach the end of life 24 months after the release date. The SDK may continue to work but Jumio will no longer provide support or updates. Customers will be notified at least 3 months prior to the end of life of a product should it be less than 24 months. - -The following table is a visual representation of the SDK 4.x.x version life-cycle. SDK 3.x.x End-of-Life is set to December 31, 2023. - -| Version | Release | End of Support | End of Life | -|:-------:|:-----------------:|:-----------------:|:-----------------:| -| 4.8.1 | 23 October 2023 | 17 July 2024 | 17 October 2025 | -| 4.8.0 | 17 October 2023 | 17 July 2024 | 17 October 2025 | -| 4.7.1 | 23 October 2023 | 27 June 2024 | 27 September 2025 | -| 4.7.0 | 27 September 2023 | 27 June 2024 | 27 September 2025 | -| 4.6.1 | 23 October 2023 | 5 March 2024 | 5 June 2025 | -| 4.6.0 | 5 June 2023 | 5 March 2024 | 5 June 2025 | -| 4.5.1 | 23 October 2023 | 14 January 2024 | 14 April 2025 | -| 4.5.0 | 14 April 2023 | 14 January 2024 | 14 April 2025 | -| 4.4.2 | 23 October 2023 | 18 October 2023 | 18 January 2025 | -| 4.4.1 | 18 January 2023 | 18 October 2023 | 18 January 2025 | -| 4.4.0 | 20 December 2022 | 20 September 2023 | 20 December 2024 | -| 4.3.0 | 30 August 2022 | 30 May 2023 | 30 August 2024 | -| 4.2.0 | 25 May 2022 | 25 February 2023 | 25 May 2024 | -| 4.1.1 | 23 October 2023 | 28 November 2022 | 28 February 2024 | -| 4.1.0 | 28 February 2022 | 28 November 2022 | 28 February 2024 | -| 4.0.0 | 16 November 2021 | 16 August 2022 | 16 November 2023 | diff --git a/docs/transition_guide.md b/docs/transition_guide.md index 197c30ab..00647aeb 100644 --- a/docs/transition_guide.md +++ b/docs/transition_guide.md @@ -1,157 +1,14 @@ ![Header Graphic](images/jumio_feature_graphic.jpg) # Transition Guide for Android SDK -This section covers all technical changes that should be considered when updating from previous versions, including, but not exclusively: API breaking changes or new functionality in the public API, major dependency changes, attribute changes, deprecation notices. +This section only covers the breaking technical changes that should be considered when updating from the previous version. ⚠️  When updating your SDK version, __all__ changes/updates made in in the meantime have to be taken into account and applied if necessary. __Example:__ If you're updating from SDK version __3.7.2__ to __3.9.2__, the changes outlined in __3.8.0, 3.9.0__ and __3.9.1__ are __still relevant__. -## 4.8.1 +## 4.2.1 No backward incompatible changes -## 4.8.0 -No backward incompatible changes - -## 4.7.1 -No backward incompatible changes - -## 4.7.0 -#### Public API Changes -* `rawBarcodeData` has been removed from [`JumioIDResult`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.result/-jumio-i-d-result/index.html) -* `LEGAL_HINT` has been removed from [`JumioScanUpdate`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-update/index.html) -* `giveDataDogConsent` has been removed from [`JumioSDK`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/-companion/index.html) - -#### Dependency Updates -* Removed MRZ dependency: ~~`implementation "com.jumio.android:mrz:4.6.0"`~~ -* Removed Linefinder dependency: ~~`implementation "com.jumio.android:linefinder:4.6.0"`~~ -* Removed Barcode dependency: ~~`implementation "com.jumio.android:barcode:4.6.0"`~~ -* Datadog update: ~~`"com.datadoghq:dd-sdk-android:1.19.3"`~~ is replaced by `"com.datadoghq:dd-sdk-android-rum:2.0.0"` - If Datadog is used in a dynamic feature module please have a look at [this known issue](known_issues.md#datadog-in-dynamic-feature-modules). - -#### Custom UI Changes -* The platform check has been moved from the [`JumioSDK`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/-companion/index.html) constructor to the [`JumioController`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/index.html) constructor. In case the platform is not supported there will be a non-retryable F000001 [`JumioError`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.error/-jumio-error/index.html) delivered in [`JumioControllerInterface$onError`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/on-error.html) instead of a [`PlatformNotSupportedException`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.exceptions/-platform-not-supported-exception/index.html) being thrown. Please also make sure to check [`isSupportedPlatform`](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_guide.md#device-supported-check) before using the SDK. - -#### Localization Changes -* SDK string translations for Brazilian Portuguese (pt-rBR) have been added - -#### Customization Changes -* Customization attribute ~~``~~ has been removed - -#### Documentation Changes -* Functions `persist` and `stop` in [`JumioController`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.controller/-jumio-controller/index.html) need to be called independently from `isComplete` as long as the workflow is not yet finished or canceled. - -## 4.6.1 -No backward incompatible changes - -## 4.6.0 -#### Public API Changes -* `JUMIO_LIVENESS` has been added to [`JumioScanMode`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-mode/index.html) -* `MOVE_FACE_CLOSER` has been added to [`JumioScanUpdate`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-update/index.html) -* `FACE_TOO_CLOSE` has been added to [`JumioScanUpdate`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-update/index.html) - -#### Customization Changes -* A new customization theme `@style/CustomFaceHelp` has been added to help customize the newly added Jumio Liveness solution. This style includes the following attributes: - * `` - * `` - - -* The following customization attributes have been added to `@style/CustomOverlay` theme: - * `` - * `` - * ``~~ - * ~~``~~ - - -* See also: [Jumio sample `styles.xml`](../sample/JumioMobileSample/src/main/res/values/styles.xml) - -#### Dependency Updates -* NEW Liveness dependency: `implementation "com.jumio.android:liveness:4.6.0"` - -## 4.5.1 -No backward incompatible changes - -## 4.5.0 -#### Public API Changes -* ~~`onPause`~~ has been removed from [JumioScanPart](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/index.html) - -* [`JumioError.code`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.error/-jumio-error/index.html) format updated from `[A][x][yyyy]` to `[A][xx][yyyy]` - -* Property [`countries`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/countries.html) of `JumioIDCredential` has been deprecated. Instead the following new property and functions have been added: - * [`JumioIDCredential.supportedCountries`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/supported-countries.html) - * [`JumioIDCredential.getPhysicalDocumentsForCountry(countryCode:)`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/get-physical-documents-for-country.html) - * [`JumioIDCredential.getDigitalDocumentsForCountry(countryCode:)`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-i-d-credential/get-digital-documents-for-country.html) - -* [`JumioDeepLinkHandler`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.util/-jumio-deep-link-handler/index.html) has been added - -* [`JumioPhysicalDocument`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-physical-document/index.html) and [`JumioDigitalDocument`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-digital-document/index.html) have been added - -* [`JumioDocument`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.document/-jumio-document/index.html) type has changed to interface. (Original `JumioDocument` class has been replaced by `JumioPhysicalDocument`) - -* `DIGITAL` has been added in [`JumioCredentialPart`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-credential-part/index.html) - -* `DIGITAL_IDENTITY_VIEW` and `THIRD_PARTY_VERIFICATION` have been added in [`JumioScanStep`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/index.html) - -* [`JumioRetryReasonDigitalIdentity`](https://jumio.github.io/mobile-sdk-android/jumio-digital-identity/com.jumio.sdk.retry/-jumio-retry-reason-digital-identity/index.html) has been added - -* [`JumioConsentItem`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.consent/-jumio-consent-item/index.html) class and [`JumioConsentType`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-consent-type/index.html) enum have been added - -* [`onInitialized()`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/on-initialized.html) callback has been changed from ~~`onInitialized(credentials: List, policyUrl: String?)`~~ to [`onInitialized(credentials: List, consentItems: List?)`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/on-initialized.html) - * Please refer to the [Consent Handling section](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_guide.md#consent-handling) in our integration guide for more details. - -#### Localization Keys -The following keys have been added to `strings.xml`: - * jumio_idtype_di - * jumio_di_vendor_selection_title - * jumio_di_retry_unknown - * jumio_di_retry_third_party_verification_error - * jumio_di_retry_service_error - * jumio_di_retry_expired - * jumio_di_back_to_document_selection - -#### Dependency Updates -* IProov update: ~~`"com.iproov.sdk:iproov:8.0.3"`~~ is replaced by `"com.iproov.sdk:iproov:8.3.1"` - -## 4.4.2 -No backward incompatible changes - -## 4.4.1 -No backward incompatible changes - -## 4.4.0 -#### Public API Changes -* `credentialParts` property of [`JumioCredential` class](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.credentials/-jumio-credential/credential-parts.html) has been changed from `ArrayList` to `List` -* [`JumioConfirmationHandler`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-confirmation-handler/index.html) has been added. Attach a [JumioScanPart](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/index.html) to this class to retrieve all accepted images and render them to [`JumioConfirmationView`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-confirmation-view/index.html) objects for confirmation. -* [`JumioRejectHandler`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-reject-handler/index.html) has been added. Attach a [JumioScanPart](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.scanpart/-jumio-scan-part/index.html) to this class to retrieve all rejected images and render them to [`JumioRejectView`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-reject-view/index.html) objects for retaking. -* Functions in [`JumioConfirmationView`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-confirmation-view/index.html) have been moved to [`JumioConfirmationHandler`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-confirmation-handler/index.html). -* Functions in [`JumioRejectView`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.views/-jumio-reject-view/index.html) have been moved to [`JumioRejectHandler`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.handler/-jumio-reject-handler/index.html) -* `MULTIPART` has been added in [`JumioCredentialPart`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-credential-part/index.html) as a new Autocapture scan part: Instead of having a single scan part for all parts of a document (front, back), there is now a single `MULTIPART` scan part that combines the two. Within this scan part all needed parts of a document are captured at once. -* `NEXT_PART` has been added in [`JumioScanStep`](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-scan-step/index.html): This scan step shows that the previous part has been captured and the next one can be started (e.g. frontside has been captured, now switch to the backside of the document) - -#### Customization Updates -* Attributes changed and added to [`Iproov.Customization` theme](https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/src/main/res/values/styles.xml#L95) - -#### Dependency Updates -* IProov update: ~~`"com.iproov.sdk:iproov:7.5.0"`~~ is replaced by `"com.iproov.sdk:iproov:8.0.3"` - -## 4.3.0 -#### Minimum SDK Version Changes -* minSdkVersion has been increased to 21. The SDK can still be integrated in Apps that support lower minSdkVersions - check if the [platform is supported](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk/-jumio-s-d-k/-companion/is-supported-platform.html) before initializing the JumioSDK, otherwise it will throw a [PlatformNotSupportedException](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.exceptions/-platform-not-supported-exception/index.html). - -#### Dependency Updates -* IProov update: ~~`"com.iproov.sdk:iproov:7.2.0"`~~ is replaced by `"com.iproov.sdk:iproov:7.5.0"` - -#### Public API Changes -* Document Verification is now supported. Please check the [Integration Guide](https://github.com/Jumio/mobile-sdk-android/blob/master/docs/integration_guide.md#jumio-document-credential) for more information. - -#### Public API Changes -* ~~`JumioCameraPosition`~~ from package `com.jumio.sdk.enums` in `com.jumio.sdk:core` is replaced by `JumioCameraFacing` -* `JumioAcquireMode` has been added to package `com.jumio.sdk.enums` in `com.jumio.sdk:core`, containing fields `FILE` and `CAMERA` -* [`JumioDataCredential` class](integration_guide.md/#jumio-data-credential) has been added for handling of Device Fingerprinting -* [`JumioDocumentCredential` class](integration_guide.md/#jumio-document-credential) has been added for Document Verification handling - ## 4.2.0 #### Public API Changes * In [JumioControllerInterface](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.interfaces/-jumio-controller-interface/index.html) the signature of function `onInitialized` has been changed. Parameter `credentials` has been changed from `ArrayList` to `List` @@ -159,7 +16,7 @@ No backward incompatible changes * `JumioScanSide` from package `com.jumio.sdk.enums` in `com.jumio.sdk:core` has been renamed to [JumioCredentialPart](https://jumio.github.io/mobile-sdk-android/jumio-core/com.jumio.sdk.enums/-jumio-credential-part/index.html) #### Dependency Updates -* NEW Autocapture dependency (Beta): `implementation "com.jumio.android:docfinder:4.2.0"` +* NEW Generic ID Scanning dependency (Beta): `implementation "com.jumio.android:docfinder:4.2.0"` #### Customization Updates * Boolean `iproov_floating_prompt_enabled` has been added to [`Iproov.Customization` theme](https://github.com/Jumio/mobile-sdk-android/blob/master/sample/JumioMobileSample/src/main/res/values/styles.xml#L84) @@ -250,6 +107,7 @@ No backward incompatible changes ## 3.9.3 No backward incompatible changes + ## 3.9.2 #### Dependency Changes * IProov update: ~~`"com.iproov.sdk:iproov:6.3.1"`~~ is replaced by `"com.iproov.sdk:iproov:6.4.1"`. This version improves conversion and offers additional customization options. @@ -306,7 +164,7 @@ No backward incompatible changes * `recreate(NetverifyCustomScanView scanView, NetverifyCustomConfirmationView confirmationView, NetverifyCustomScanInterface netverifyCustomScanInterface)` has been added to [NetverifyCustomScanPresenter](https://jumio.github.io/mobile-sdk-android/com/jumio/nv/custom/NetverifyCustomScanPresenter.html#recreate-com.jumio.nv.custom.NetverifyCustomScanView-com.jumio.nv.custom.NetverifyCustomConfirmationView-com.jumio.nv.custom.NetverifyCustomScanInterface-) - this needs to be called in case the hosting activity is recreated. -* The initialization and start of scan presenters has been split. This allows displaying a help view with the help animation prior to starting the scan presenter: +* The initialization and start of scan presenters has been splitted. This allows displaying a help view with the help animation prior to starting the scan presenter: * `startScanForPart(ScanSide scanSide, NetverifyCustomScanView scanView, NetverifyCustomConfirmationView confirmationView, NetverifyCustomScanInterface scanViewInterface` has been replaced with `initScanForPart(ScanSide scanSide, NetverifyCustomScanView scanView, NetverifyCustomConfirmationView confirmationView, NetverifyCustomScanInterface scanViewInterface)` * The following method was added to `NetverifyCustomScanPresenter` to trigger scanning start after the initialization. This method needs to be called on the `NetverifyCustomScanPresenter` after it was initialized with `initScanForPart(..)`. @@ -374,7 +232,7 @@ Several additions and changes, mostly in regards to the new liveness flow. * Button style: ~~` @style/Custom.Netverify.Confirmation.MaterialButton.Outlined`~~ is replaced by `@style/Custom.Netverify.Confirmation.MaterialButton.Outlined` -* NEW IProov attribute: `@style/CustomIproov` +* NEW Iproov attribute: `@style/CustomIproov` * NEW IProov theme: ` - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-nl/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-nl/strings-jumio-sdk.xml index d214104d..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-nl/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-nl/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-pl/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-pl/strings-jumio-sdk.xml index e74d6962..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-pl/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-pl/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-pt-rBR/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-pt-rBR/strings-jumio-sdk.xml deleted file mode 100644 index ce86ce5d..00000000 --- a/sample/JumioMobileSample/src/main/res/values-pt-rBR/strings-jumio-sdk.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-pt/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-pt/strings-jumio-sdk.xml index c4c15ce7..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-pt/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-pt/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-ro/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-ro/strings-jumio-sdk.xml index aaed90b7..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-ro/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-ro/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-ru/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-ru/strings-jumio-sdk.xml index 9fec788b..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-ru/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-ru/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-sk/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-sk/strings-jumio-sdk.xml index ccd698a7..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-sk/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-sk/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-sl/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-sl/strings-jumio-sdk.xml index 60e7da03..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-sl/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-sl/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-sv/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-sv/strings-jumio-sdk.xml index 9e39f977..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-sv/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-sv/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-th/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-th/strings-jumio-sdk.xml index 0a1aa81b..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-th/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-th/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-tr-rTR/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-tr-rTR/strings-jumio-sdk.xml index eb542a46..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-tr-rTR/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-tr-rTR/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-uk-rUA/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-uk-rUA/strings-jumio-sdk.xml deleted file mode 100644 index 4434dbf4..00000000 --- a/sample/JumioMobileSample/src/main/res/values-uk-rUA/strings-jumio-sdk.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-vi/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-vi/strings-jumio-sdk.xml index 3159a845..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-vi/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-vi/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-zh-rTW/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-zh-rTW/strings-jumio-sdk.xml index 5975906f..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-zh-rTW/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-zh-rTW/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-zh/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-zh/strings-jumio-sdk.xml index bcb6842f..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-zh/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-zh/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values-zu/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values-zu/strings-jumio-sdk.xml index 5ffda5df..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values-zu/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values-zu/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values/dimens.xml b/sample/JumioMobileSample/src/main/res/values/dimens.xml index 90ec64a4..afb57f63 100644 --- a/sample/JumioMobileSample/src/main/res/values/dimens.xml +++ b/sample/JumioMobileSample/src/main/res/values/dimens.xml @@ -1,9 +1,6 @@ - 16dp - 16dp + 16dp + 16dp 16dp - - - 9:16 diff --git a/sample/JumioMobileSample/src/main/res/values/strings-jumio-sdk.xml b/sample/JumioMobileSample/src/main/res/values/strings-jumio-sdk.xml index 50a177c4..7a30101b 100644 --- a/sample/JumioMobileSample/src/main/res/values/strings-jumio-sdk.xml +++ b/sample/JumioMobileSample/src/main/res/values/strings-jumio-sdk.xml @@ -2,209 +2,14 @@ - - - \ No newline at end of file diff --git a/sample/JumioMobileSample/src/main/res/values/strings.xml b/sample/JumioMobileSample/src/main/res/values/strings.xml index 8e65f110..c7d8d28c 100644 --- a/sample/JumioMobileSample/src/main/res/values/strings.xml +++ b/sample/JumioMobileSample/src/main/res/values/strings.xml @@ -2,7 +2,13 @@ + Jumio Sample Java Jumio Sample Kotlin + MainActivity + Start %1$s + Default UI + Custom UI + Options: Open navigation drawer Close navigation drawer diff --git a/sample/JumioMobileSample/src/main/res/values/styles.xml b/sample/JumioMobileSample/src/main/res/values/styles.xml index 22ccf3f0..37f81a20 100644 --- a/sample/JumioMobileSample/src/main/res/values/styles.xml +++ b/sample/JumioMobileSample/src/main/res/values/styles.xml @@ -18,23 +18,11 @@ @color/colorSecondary - - - - - - \ No newline at end of file