# MyId Android SDK
## Table of contents
- [Getting started](#getting-started)
- [Before you begin](#11-before-you-begin)
- [Setup MyId Android SDK](#12-setup-myid-android-sdk)
- [Permissions](#13-permissions)
- [Usage](#usage)
- [Methods](#11-methods)
- [Handling callbacks](#12-handling-callbacks)
- [SDK error codes](#sdk-error-codes)
- [Localization](#localization)
## Getting started
### 1.1 Before you begin
Install or update Android Studio to its latest version.
The SDK supports API level 21 and above
Make sure that your app meets the following requirements:
- `minSdkVersion = 21`
- `targetSdkVersion = 31`
- `android.useAndroidX = true`
- `Kotlin = 1.5+`
- `Gradle = 4.1.2+`
```
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
```
- myid-sdk-***.aar, has been provided to you, it contains SDK public interface and implementation.
Archive name contains ever increasing release version number.
### 1.2 Setup MyId Android SDK
Create new project in AndroidStudio. Inside mobile application folder create new folder to store SDK
libraries (For example libs) and copy MyId SDK provided libraries.
Add reference to library to module **_build.gradle_**:
``` gradle
implementation(files("libs/myid-sdk-2.1.0-release.aar"))
```
**Note:** You can get `myid-sdk-2.1.0-release.aar` file from [here](app/libs/myid-sdk-2.1.0-release.aar)
After synchronization, You should be able to access to SDK classes from your source code.
MyId Android SDK also requires following libraries to be added:
``` gradle
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.appcompat:appcompat:1.4.2")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1")
def cameraVersion = "1.2.0-alpha01"
implementation("androidx.camera:camera-camera2:$cameraVersion")
implementation("androidx.camera:camera-lifecycle:$cameraVersion")
implementation("androidx.camera:camera-view:$cameraVersion")
implementation("com.google.android.gms:play-services-mlkit-face-detection:17.0.1")
implementation("com.google.android.gms:play-services-mlkit-text-recognition:18.0.0")
implementation("com.google.android.gms:play-services-mlkit-barcode-scanning:18.0.0")
implementation("io.ktor:ktor-client-android:2.0.1")
implementation("io.sentry:sentry-android:5.7.4")
```
### 1.3 Permissions
Add following lines to the **_AndroidManifest.xml_**:
``` xml
```
## Usage
``` kotlin
class YourActivity : AppCompatActivity(), MyIdResultListener {
private val client: MyIdClient = MyIdClient()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startMyId()
}
private fun startMyId() {
val organizationDetails = OrganizationDetails(
phoneNumber = "1234567",
logo = R.drawable.image_logo
)
val myIdConfig = MyIdConfig.builder(clientId = /* Your client id */)
.withPassportData(passportData)
.withBirthDate(dateOfBirth)
.withExternalId(externalId)
.withThreshold(threshold)
.withEntryType(MyIdEntryType.AUTH)
.withOrganizationDetails(organizationDetails)
.withBuildMode(MyIdBuildMode.PRODUCTION)
.withPhoto(false)
.build()
val intent = client.createIntent(activity = this, myIdConfig = myIdConfig)
result.launch(intent)
}
private val result = takeUserResult(listener = this)
}
```
### 1.1 Methods
Method | Notes | Default
--- | --- | ---
`withPassportData(value: String)` | Passport serial number or PINFL data | Optional
`withBirthDate(value: String)` | Date of birth in. Format: `dd.MM.yyyy` | Optional
`withExternalId(value: String)` | 36 characters long. Should match with UUID4 regex | Optional
`withThreshold(value: Float)` | The value can be in the range of `0.50` - `0.99` | 0.50
`withEntryType(value: MyIdEntryType)` | Customizing the SDK. Entry types: AUTH, FACE | MyIdEntryType.AUTH
`withOrganizationDetails(value: OrganizationDetails)` | Custom Organization Details | Optional
`withBuildMode(value: MyIdBuildMode)` | Build mode: DEBUG, PRODUCTION | MyIdBuildMode.PRODUCTION
`withPhoto(value: Boolean)` | Return SDK face bitmap | false
**Note 1.1.** `MyIdEntryType` contains **AUTH** and **FACE** types.
- **AUTH** is used to identify the user through the MyId services.
- **FACE** is used to detect a face and returns a picture (bitmap).
**Note 1.2.** You can customize the screen for entering passport data and date of birth in your
application, in which case you can pass these parameters during initialization to the SDK, otherwise
the SDK requires the input of passport data and date of birth for user identification.
**Note 1.3.** `MyIdBuildMode` contains **DEBUG** and **PRODUCTION** modes.
- **DEBUG** is used to sandbox.
- **PRODUCTION** is used to production.
**Note 1.4.** If the externalId is not empty, has a length of 36 characters and corresponds to the regular expression UUID4, we will display a [recommendation](images/screen01.jpg) screen in case the sdk detects a blurry photo.
### 1.2 Handling callbacks
```kotlin
val resultListener: MyIdResultListener = object : MyIdResultListener {
override fun onSuccess(result: MyIdResult) {
// Get face bitmap and result code
val bitmap = result.bitmap
val code = result.code
val comparison = result.comparison
}
override fun onUserExited() {
// User left the SDK
}
override fun onError(e: MyIdException) {
// Get error message and code:
val message = e.message
val code = e.code
}
}
```
| Attribute | Notes |
| -----|-------|
| `onSuccess` | `MyIdResult` contains information about the face captures made during the flow, result code and comparison value. |
| `onUserExited` | User left the SDK flow without completing it. |
| `onError` | Some error happened. `MyIdException` contains information about the error message and code |
## SDK error codes
The error code in the following list may appear during the call of SDK. The list below is for your
reference.
| Code | Error message
|:----------:|:-------------
| 2 | Паспортные данные введены неправильно
| 3 | Не удалось подтвердить жизненность
| 4 | Не удалось распознать
| 5 | Внешний сервис недоступен или работает некорректно
| 6 | Запрашиваемый пользовател скончался
| 7 | Фото с ресурсов не получено
| 8 | Внутренняя ошибка MyID
| 9 | Срок выполнения задачи истек
| 10 | Срок ожидания задачи в очереди истек
| 11 | Сервис MyID не может обработать запрос. Попробуйте повторить позже
| 12 | Сервис MyID не может обработать запрос. Попробуйте повторить позже
| 13 | Сервис MyID не может обработать запрос. Попробуйте повторить позже
| 14 | Не удалось подтвердить жизненность. Некорректная фотография
| 15 | Сервис MyID не может обработать запрос. Попробуйте повторить позже
| 16 | Сервис MyID не может обработать запрос. Попробуйте повторить позже
| 17 | Не удалось распознать. Некорректная фотография
| 18 | Сервис проверки жизненности не может обработать запрос
| 19 | Сервис распознования не может обработать запрос
| 20 | Размытая фотография
| 21 | Лицо не полностью изображено
| 22 | Обнаружено несколько лиц
| 23 | Представленное изображение в градациях серого, требуется цветное изображение
| 24 | Обнаружены затемненные очки
| 25 | Тип фотографии не поддерживается
| 26 | Глаза закрыты либо не видны
| 101 | Непредвиденная ошибка
| 102 | Доступ к камере запрещен
| 103 | Ошибка при получении данных с сервера
| 120 | Размытое фото обнаружено в SDK
## Localization
The MyId Android SDK supports translations for the following languages:
- Uzbek (uz) 🇺🇿
- English (en) 🇬🇧
- Russian (ru) 🇷🇺
By default, we infer the language to use from the parent app settings.
The MyId Android SDK also allows for the selection of a specific custom language for locales that MyId does not currently support. You can have an additional XML strings file inside your resources folder for the desired locale (for example, `res/values-kk/myid_strings.xml` for 🇰🇿 translation), with the content of our [strings.xml](myid_strings.xml) file, translated for that locale.
## Custom Organization Details
You can customize the SDK, for it to match your organization's brand book, by providing `OrganizationDetails` object to `withOrganizationDetails` method.
The object allows you to customize following fields:
- *phoneNumber* - by default 712022202, which is MyID's call center. If you would like the customer to call your own call center, you can display your own phone number on the error screen, by providing it in this field ([sample](images/screen01.jpg)).
- *logo* - the drawable asset, that will be displayed on the input screen. If you would like to display your own logo on the top of the screen, this is the place to provide it. Make sure it fits the imageView element, which has the *240x60* size.