# Получение источника установки мобильного приложения
## AppsFlyer

Если вам нужно отслеживать источник установки приложения (например, для оценки эффективности рекламных кампаний), выполните следующие шаги:

### 1. Установите библиотеку AppsFlyer SDK

Следуйте официальной инструкции: <Link to="https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin?tab=readme-ov-file#-guides">GitHub — AppsFlyer Flutter Plugin￼</Link>.

### 2. Инициализируйте AppsFlyer SDK

Создайте экземпляр AppsFlyerSdk и выполните инициализацию в initState() вашего виджета. Это позволит SDK начать обработку атрибуции сразу после запуска приложения.

```dart
import 'package:appsflyer_sdk/appsflyer_sdk.dart';

late AppsflyerSdk _appsflyerSdk;

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

void _initAppsFlyerSdk() async {
  // Настройки SDK
  final AppsFlyerOptions options = AppsFlyerOptions(
    afDevKey: 'YOUR_AF_DEV_KEY',           // Ваш AppsFlyer Dev Key
    appId: 'YOUR_IOS_APP_ID',              // ID приложения (только iOS)
    showDebug: true,
  );

  _appsflyerSdk = AppsflyerSdk(options);

  // Инициализация SDK
  await _appsflyerSdk.initSdk(
    registerConversionDataCallback: true,
    registerOnAppOpenAttributionCallback: true,
    registerOnDeepLinkingCallback: true,
  );

  // Обработка данных о конверсии
  _appsflyerSdk.onInstallConversionData((data) {
    print("onInstallConversionData data:");
    data.forEach((key, value) {
      print('$key : $value');
    });

    final status = data['af_status'];

    if (status == 'Non-organic') {
      final sourceID = data['media_source'];
      final campaign = data['campaign'];
      print('Неорганическая установка. Источник: $sourceID Кампания: $campaign');
    } else if (status == 'Organic') {
      print('Органическая установка.');
    }

    final isFirstLaunch =
        data['is_first_launch'] == 'true' || data['is_first_launch'] == true;

    if (isFirstLaunch) {
      print('Первый запуск приложения.');
    } else {
      print('Не первый запуск приложения.');
    }
  });
}
```

### 3. Передача sourceID в Mindbox

1. Создайте <Link to="https://developers.mindbox.ru/docs/get-app-install-source">операцию</Link> в Mindbox с действием и/или заполнением дополнительного поля. Инструкция представлена в документации Mindbox.
2. После получения sourceID из AppsFlyer отправьте его в кастомное поле операции:

```dart
Mindbox.instance.executeAsyncOperation(
  operationSystemName: "<operationSystemName>",
  operationBody: {
    // передайте полученный sourceID
  },
);
```

Более подробную информацию можно найти в [примере AppsFlyer SDK для Flutter.](https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin)

***

## Общая информация

Ошибки:

1. **404** — указан неверный afDevKey или appID.
2. **403** — план AppsFlyer Zero не позволяет просматривать данные об установках.
