README.md 8.6 KB
Newer Older
Javokhir Savriev's avatar
2.0.7  
Javokhir Savriev committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# 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)
- [Sample app](#sample-app)

## 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.0.7-release.aar"))
```

After synchronization, You should be able to acces 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.2")

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.4.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.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("com.google.code.gson:gson:2.9.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
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
```

## Usage

``` kotlin
class YourActivity : AppCompatActivity(), MyIdResultListener {

    private val client: MyIdClient = MyIdClient()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        startMyId()
    }

    private fun startMyId() {
        val myIdConfig = MyIdConfig.builder(clientId = /* Your client id */)
            .withPassportData(passportData)
            .withBirthDate(dateOfBirth)
            .withExternalId(externalId)
            .withEntryType(MyIdEntryType.AUTH)
            .withBuildMode(MyIdBuildMode.PRODUCTION)
            .withLocale(MyIdLocale.EN)
            .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
`withEntryType(value: MyIdEntryType)` | Customizing the SDK. Entry types: AUTH, FACE | MyIdEntryType.AUTH
`withBuildMode(value: MyIdBuildMode)` | Build mode: DEBUG, PRODUCTION | MyIdBuildMode.PRODUCTION
`withLocale(value: MyIdLocale)` | To set a specific language | MyIdLocale.RU
`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.

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

    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 and result code |
| `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  |  Ошибка в MyId SDK
|  102  |  Доступ к камере запрещен
|  103  |  Ошибка при получении данных с сервера

## Localization

The MyId Android SDK supports translations for the following languages:

- Uzbek      (uz) 🇺🇿
- English    (en) 🇬🇧
- Russian    (ru) 🇷🇺

By default, the Russian language is used. However, you can also call the `withLocale(MyIdLocale)`
method of the `MyIdConfig.Builder` configuration to set the language.

## Sample App

We have included a [sample app](app) to show how to integrate the MyId Android SDK.