> For the complete documentation index, see [llms.txt](https://doc.ozforensics.com/oz-knowledge-ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.ozforensics.com/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/sdk/oz-mobile-sdk/flutter/ustanovka-i-ispolzovanie-plagina-dlya-flutter.md).

# Установка и использование плагина для Flutter

Образец кода для Flutter вы можете найти [здесь](https://gitlab.com/oz-forensics/oz-mobile-flutter-plugin/-/tree/develop/example?ref_type=heads).

## **Установка и лицензирование** <a href="#installation-and-licensing" id="installation-and-licensing"></a>

Добавьте строки из блока ниже в **pubspec.yaml** проекта, где планируется использовать плагин.

Для 8.22 и новее:

<pre class="language-yaml"><code class="lang-yaml">ozsdk: ^<a data-footnote-ref href="#user-content-fn-1">8.22.0</a>
</code></pre>

До 8.21 включительно:

<pre class="language-dart"><code class="lang-dart">  ozsdk:
    git:
      url: https://gitlab.com/oz-forensics/oz-mobile-flutter-plugin.git
      ref: '<a data-footnote-ref href="#user-content-fn-1">8.8.2</a>'
</code></pre>

Поместите файл лицензии (например, *license.json* или *forensics.license*) в папку **Flutter application/assets**. В pubspec.yaml добавьте asset:

```dart
assets
  - assets/license.json // название файла лицензии должно совпадать с названием из папки assets
```

Для Android укажите путь к репозиторию Oz в **/android/build.gradle**, раздел **allprojects → repositories**:

```dart
allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url ‘https://ozforensics.jfrog.io/artifactory/main’ } // ссылка на репозиторий
    }
}
```

Для Flutter 8.24.0 и новее или Android Gradle plugin 8.0.0 и новее добавьте строку в **android/gradle.properties**:

```dart
android.nonTransitiveRClass=false
```

Минимальная версия Android SDK (API Level) – 24 или новее:

```yaml
defaultConfig {
  ...
  minSDKVersion 24
  ...
}
```

Для iOS в **Runner → Info → Deployment target → iOS Deployment Target** установите версию 13 или новее.

В ios/Podfile закомментируйте строку `use_frameworks!` (`#use_frameworks!`).

## **Начало работы с Flutter** <a href="#getting-started-with-flutter" id="getting-started-with-flutter"></a>

### **Инициализация SDK** <a href="#initialize-sdk" id="initialize-sdk"></a>

Для инициализации вызовите метод `init`. Название и путь к файлу лицензии должны совпадать с теми, которые вы указали в pubspec.yaml (например, *assets/license.json*).

```dart
await OZSDK.initSDK([<% название файла лицензии и путь к нему %>]);
```

### **Подключение SDK к API** <a href="#connect-sdk-to-oz-api" id="connect-sdk-to-oz-api"></a>

Для подключения используйте полученные от нас логин, пароль и адрес API сервера.

```dart
await OZSDK.setApiConnectionWithCredentials(<login>, <password>, <host>);
```

На стадии коммерческого использования вместо логина и пароля мы рекомендуем использовать токен доступа, который можно получить с помощью метода API `/api/authorize/auth`.

```dart
 await OZSDK.setApiConnectionWithToken(token, host);
```

#### Телеметрия

По умолчанию логи сохраняются вместе с данными по анализам. Если вы планируете хранить логи отдельно от этих данных, настройте отдельное подключение для [телеметрии](/oz-knowledge-ru/other/faq.md#chto-takoe-telemetriya-i-zachem-ee-podklyuchat).

{% hint style="warning" %}
Подключение к API нужно устанавливать до подключения к телеметрии, иначе токен телеметрии может быть перезаписан.
{% endhint %}

```dart
await OZSDK.setEventConnectionWithCredentials(<login>, <password>, <host>);
```

или

```dart
await OZSDK.setEventConnectionWithToken(<token>, <host>);
```

### **Съемка видео** <a href="#add-face-recording" id="add-face-recording"></a>

Для запуска съемки и получения результата вызовите метод `startLiveness`:

```dart
await OZSDK.startLiveness(<actions>, <use_main_camera>);
```

| **Параметр**      | **Тип**                   | **Описание**                                                              |
| ----------------- | ------------------------- | ------------------------------------------------------------------------- |
| actions           | List\<VerificationAction> | Действия на видео                                                         |
| use\_main\_camera | Boolean                   | Если установлено `True`, используется основная камера, `False` – передняя |

Обратите внимание: для версий до 8.11 включительно метод для запуска называется `executeLiveness`. Он возвращает результат съемки.

Для получения результата съемки в версии 8.12 и новее подпишитесь на `livenessResult`, как показано ниже:

```dart
class Screen extends StatefulWidget {
  static const route = 'liveness';

  const Screen({super.key});

  @override
  State<Screen> createState() => _ScreenState();
}

class _ScreenState extends State<Screen> {
  late StreamSubscription<List<Media>> _subscription;

  @override
  void initState() {
    super.initState();

    // подписка на результат liveness
    _subscription = OZSDK.livenessResult.listen(
      (List<Media> medias) {
          // содержит медиафайл liveness
      },
      onError: (Object error) {
        // обработка ошибок, чаще всего PlatformException
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    // пропущено для сокращения образца кода
  }

  void _startLiveness() async {
    // запустите экран съемки с помощью метода startLiveness
    OZSDK.startLiveness(<list of actions>);
  }

  @override
  void dispose() {
    // cancel subscription
    _subscription.cancel();
    super.dispose();
  }
}
```

### **Выполнение проверок** <a href="#run-analyses" id="run-analyses"></a>

Размещенный ниже код поможет вам запустить анализы.

Создайте объект `Analysis`:

```dart
List<Analysis> analysis = [ Analysis(Type.quality, Mode.serverBased, <media>, {}), ];
```

Запустите созданный анализ:

```dart
final analysisResult = await OZSDK.analyze(analysis, [], {});
```

Если вы хотите запустить анализ для конкретной папки, укажите ее идентификатор:

```dart
final analysisResult = await OZSDK.analyze(analysis, folderID, [], {});
```

Результат анализа запишется в массив объектов `analysisResult`.

Для анализа медиафайла, полученного не нашим SDK, используйте следующий код:

```dart
media = Media(FileTypedocumentPhoto, VerificationAction.oneShot, “photo_selfie”, null, <pat
```

Итоговый блок кода (пример):

{% tabs %}
{% tab title="Liveness" %}

```dart
// замените VerificationAction.blank, если у вас используется другой жест Livenes
final cameraMedia = await OZSDK.executeLiveness([VerificationAction.blank], use_main_camera);

final analysis = [
  Analysis(Type.quality, Mode.serverBased, cameraMedia, {}),
];

final analysisResult = await OZSDK.analyze(analysis, [], {});
```

{% endtab %}

{% tab title="Biometry" %}

```dart
// замените VerificationAction.blank, если у вас используется другой жест Liveness
final cameraMedia = await OZSDK.executeLiveness([VerificationAction.blank], use_main_camera);
final biometryMedia = [...cameraMedia];
biometryMedia.add(
  Media(
    FileType.documentPhoto,
    VerificationAction.blank,
    MediaType.movement,
    null,
    <путь к референсному фото>,
    null,
    null,
    MediaTag.photoSelfie,
  ),
);

final analysis = [
  Analysis(Type.quality, Mode.serverBased, cameraMedia, {}),
  Analysis(Type.biometry, Mode.serverBased, biometryMedia, {}),
];

final analysisResult = await OZSDK.analyze(analysis, [], {});

```

{% endtab %}
{% endtabs %}

[^1]: Номер версии


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://doc.ozforensics.com/oz-knowledge-ru/rukovodstva/rukovodstvo-razrabotchika/sdk/oz-mobile-sdk/flutter/ustanovka-i-ispolzovanie-plagina-dlya-flutter.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
