# Flutter
Последний релиз: версия 1.31.2
# Подготовка к работе с плагинами
Для работы любого из наших плагинов необходимо предварительно получить accessToken.
- В дашборде IDnGO сгенерируйте
appTokenиsecretKey. - Используя их, выполните API-запрос для получения
accessToken.
Подробная инструкция - Полученный токен используйте при инициализации SDK.
# Установка
- Добавьте зависимость в файл
pubspec.yaml:
dependencies:
cyberity_mobilesdk_flutter_plugin: ^1.31.2
- В командной строке выполните:
flutter pub get
- Добавьте в iOS и Android части приложения зависимости от нашего MobileSDK:
# Android
- API уровня 23 (Android 5.0) или новее
- Kotlin 1.9.25 или новее
Добавьте репозиторий в android/build.gradle:
allprojects {
repositories {
// ...
maven { url "https://maven.cyberity.ru/repository/maven-public/" }
// ...
}
}
# iOS
Внимание:
Убедитесь, что в вашем проекте отключен Bitcode.
- Добавьте в верхнюю часть
ios/Podfile:
platform :ios, '13.0'
source 'https://cdn.cocoapods.org/'
source 'https://github.com/idngo/specs.git'
- После установки пакета выполните команду:
npx pod-install
Совет:
Если возникает ошибка совместимости «CocoaPods could not find compatible versions for pod "CyberityMobileSDK"», выполните:
cd ios && pod update CyberityMobileSDK && cd ..
# Доступы к аппаратным функциям
Фреймворк запросит доступ к камере и микрофону, галерее фотографий и геолокации. По этой причине требуется наличие соответствующих описаний использования в файле Info.plist приложения. Тексты описаний можно изменять в соответствии с вашими требованиями.
plutil -insert "NSCameraUsageDescription" -string "Предоставьте доступ к камере для съемки фото" ios/Runner/Info.plist
plutil -insert "NSMicrophoneUsageDescription" -string "Предоставьте доступ к микрофону для записи видео с голосом" ios/Runner/Info.plist
plutil -insert "NSPhotoLibraryUsageDescription" -string "Предоставьте доступ к галерее для выбора фотографий" ios/Runner/Info.plist
plutil -insert "NSLocationWhenInUseUsageDescription" -string "Предоставьте доступ к вашему местоположению" ios/Runner/Info.plist
# Инициализация
# Настройка
Импортируйте класс в коде приложения.
import 'package:cyberity_mobilesdk_flutter_plugin/cyberity_mobilesdk_flutter_plugin.dart';
void launchCBRMobileSDK() async {
// Перед запуском убедитесь, что настроен уровень проверки и получен accessToken для правильного окружения
final String accessToken = "your_access_token";
final onTokenExpiration = () async {
// Вызывается при истечении срока действия токена
// Получите новый accessToken от своего бэкэнда
// Пример реализации
return Future<String>.delayed(
Duration(seconds: 2),
() => "your_new_access_token"
);
};
// Необязательный обработчик для получения уведомлений о событиях
final CBRStatusChangedHandler onStatusChanged =
(CBRMobileSDKStatus newStatus, CBRMobileSDKStatus prevStatus) {
print("The SDK status was changed: $prevStatus -> $newStatus");
};
final cbrMobileSDK = CBRMobileSDK.init(accessToken, onTokenExpiration)
.withHandlers(onStatusChanged: onStatusChanged)
.withDebug(true)
.withLocale(Locale("en")) // Необязательный колбек для назначения другого системного языка
.build();
final CBRMobileSDKResult result = await cbrMobileSDK.launch();
print("Completed with result: $result");
}
Метод cbrMobileSDK.launch() возвращает Future объекта CBRMobileSDKResult, который содержит статус SDK при его закрытии.
Результат CBRMobileSDKResult
Объект, описывающий результат последнего запуска SDK:
| Поле | Тип | Описание |
|---|---|---|
success | Boolean | TRUE — ошибок не было, FALSE — была ошибка. |
status | CBRMobileSDKStatus | Статус SDK. |
errorType | CBRMobileSDKErrorType? | Тип ошибки (если есть). |
errorMsg | String? | Подробное описание ошибки (если есть). |
CBRMobileSDKResult(
success: false,
status: CBRMobileSDKStatus.Failed,
errorType: CBRMobileSDKErrorType.Unauthorized,
errorMsg: "Unauthorized access with accessToken=[your_access_token]",
actionResult: null
)
# Запуск SDK
Далее вы можете использовать launchCBRMobileSDK, чтобы запустить SDK.
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
...
Container(
alignment: Alignment.center,
child: ElevatedButton(onPressed: () => launchCBRMobileSDK(),
child: Text("Запустить SDK")),
),
...
],
),
),
# Закрытие SDK
По умолчанию, как только пользователь будет одобрен, SDK автоматически закрывается через 3 секунды. Вы можете настроить этот интервал времени или отключить автоматическое закрытие, установив значение 0:
cbrMobileSDK.withAutoCloseOnApprove(0)
Чтобы закрыть SDK программно воспользуйтесь:
cbrMobileSDK.dismiss()
# Дополнительные настройки
# Данные пользователя
При необходимости вы можете передавать эл. почту и/или номер телефона, которые будут изначально присвоены пользователю.
.withApplicantConf({
"email": "...",
"phone": "..."
})
# Предпочитаемые документы
Для шагов IDENTITY* (проверка документа) можно указать страну и тип документа, которые будут выбраны автоматически, минуя экран выбора типа документа.
Обратите внимание, что переданные параметры будут применяться только в том случае, если соответствующая комбинация страны и типа документа (idDocType) разрешена на этом шаге согласно настройкам уровня.
.withPreferredDocumentDefinitions({
"IDENTITY": {
"idDocType": "PASSPORT",
"country": "USA"
},
"IDENTITY2": {
"idDocType": "DRIVERS",
"country": "FRA"
}
})
# Переводы
Вы можете настроить тексты, используемые в SDK, в разделе Дешборда «Интеграции SDK».
Язык текста будет установлен в соответствии с настройками системы, но вы можете изменить его на нужный вам язык.
Для переопределения системного языка:
.withLocale(Locale("en"))
# Текстовые строки
Часть текста может быть задана локально и сохраняться при смене настроек языка SDK. Например, для ситуаций, когда сервер с переводом недоступен из-за отсутствия интернета, но нужно гарантированно отобразить определённый текст, используется локальное управление строками.
.withStrings({
"sns_oops_network_title": "Oops! Seems like the network is down.",
"sns_oops_network_html": "Please check your internet connection and try again.",
"sns_oops_action_retry": "Try again"
})
# Аналитика
SDK собирает и отправляет данные об использовании на серверы IDnGO. Мы не отслеживаем чувствительные данные, отправляется только общая статистика использования. Она включает навигацию по экранам, взаимодействие с элементами интерфейса и так далее.
Мы анализируем эти данные для улучшения IDnGO. Данные не передаются третьим сторонам, и не используются для рекламы.
Для отключения аналитики данных воспользуйтесь:
.withAnalyticsEnabled(false)
# События
События SDK можно получать через onEvent:
final CBREventHandler onEvent = (CBRMobileSDKEvent event) {
print("onEvent: $event");
};
final cbrMobileSDK = CBRMobileSDK.init(accessToken, onTokenExpiration)
.withHandlers(
onEvent: onEvent
)
Каждое событие содержит eventType и набор параметров, упакованных в словарь payload.
CBRMobileSDKEvent(
eventType: "StepInitiated",
payload: {
"idDocSetType": "IDENTITY"
}
)
Поля элемента eventType
| Тип события | Полезная нагрузка | Описание |
|---|---|---|
ApplicantLoaded | { | Анкета пользователя загружена. |
StepInitiated | { | Шаг проверки инициирован. |
StepCompleted | { | Шаг проверки выполнен или отменён. |
Analytics | { | Произошло аналитическое событие. |
# Действия пользователя
Чтобы использовать SDK в режиме действий пользователя необходимо создать уровень верификации с шагом проверки «Действие пользователя» (см. подробнее).
Токен доступа создается с параметрами userId, levelName, externalActionId.
# Справочник API
# Статусы SDK
| Статус | Описание |
|---|---|
Ready | SDK инициализирован и готов к запуску. |
Failed | SDK завершился с ошибкой. |
Initial | Шаги проверки еще не пройдены. |
Incomplete | Пройдена часть шагов проверки. |
Pending | Ожидается проверка пользователя. |
TemporarilyDeclined | Временный отказ. |
FinallyRejected | Окончательный отказ. |
Approved | Анкета пользователя одобрена. |
# Типы ошибок errorType
| Ошибка | Описание |
|---|---|
Unknown | Неизвестная ошибка. |
InvalidParameters | Некорректные параметры. |
Unauthorized | Неавторизованный доступ (недействительный или истекший токен). |
InitialLoadingFailed | Ошибка начальной загрузки с сервера. |
ApplicantNotFound | Анкета пользователя не найдена. |
ApplicantMisconfigured | Анкета пользователя найдена, но настройки некорректные (например, отсутствует idDocs). |
InitializationError | Ошибка инициализации. |
NetworkError | Ошибка сети (пользователь видит экран «Network Oops»). |
UnexpectedError | Неожиданная ошибка (экран «Fatal Oops»). |