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

Есть два способа получения источника установки: через Google Play и через AppsFlyer.

<Tabs defaultValue="1" className="w-full">
  <ScrollArea className="w-full">
    <TabsList className="flex w-max gap-2">
      <TabsTrigger value="1">AppsFlyer</TabsTrigger>
      <TabsTrigger value="2">GooglePlay</TabsTrigger>
    </TabsList>
    <ScrollBar orientation="horizontal" />
  </ScrollArea>
  
  <TabsContent value="1">
  1. Добавьте библиотеку [AppsFlyer](https://dev.appsflyer.com/hc/docs/install-android-sdk)

    ```groovy
    dependencies {
        ...
        implementation 'com.appsflyer:af-android-sdk:6.3.2'
        implementation "com.android.installreferrer:installreferrer:2.2"
    }
    ```

    2. Интегрируйте AppsFlyer по инструкции [здесь](https://dev.appsflyer.com/hc/docs/integrate-android-sdk)

    3. Реализуйте методы протокола **AppsFlyerConversionListener**, а именно **onConversionDataSuccess**. Данный метод вызывается при первичной установке приложения по ссылке, и предоставляет данные по установкам / источнику / кампании и т.д.

    ```java
    AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
        @Override
        public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
            String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
            
            if (status.equals("Non-organic")) {
                String sourceID = (String) conversionData.get("media_source");
                String campaign = (String) conversionData.get("campaign");
                if (Objects.requireNonNull(conversionDataMap.get("is_first_launch")).toString().equals("true")) {
                    Log.d(LOG_TAG, "Conversion: First Launch");
                } else {
                    Log.d(LOG_TAG, "Conversion: Not First Launch");
                }
            } else {
                Log.d(LOG_TAG, "Conversion: This is an organic install.");
            }
        }
    }
    ```

    4. Создайте [операцию](https://help.mindbox.ru/docs/%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-v-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F) с выдачей действия и/или заполнением дополнительного поля

    5. Полученную строку **sourceID** нужно отправить в кастомное поле к действию в Mindbox.

    ```java
    Mindbox.executeAsyncOperation(applicationContext, "<operationSystemName>", "{<тело запроса с передачей полученого sourceId>}")
    ```
  </TabsContent>
  <TabsContent value="2">

    1. Добавьте библиотеку [installreferrer](https://developer.android.com/google/play/installreferrer/library) в файл **build.gradle**

    ```groovy
    dependencies {
        ...
        implementation "com.android.installreferrer:installreferrer:2.2"
    }
    ```

    2. Подключитесь к Google Play Services

    ```java
    InstallReferrerClient referrerClient;

    referrerClient = InstallReferrerClient.newBuilder(this).build();
    referrerClient.startConnection(new InstallReferrerStateListener() {
        @Override
        public void onInstallReferrerSetupFinished(int responseCode) {
            switch (responseCode) {
                case InstallReferrerResponse.OK:
                    ReferrerDetails response = referrerClient.getInstallReferrer();
                    String referrerUrl = response.getInstallReferrer();
                    long referrerClickTime = response.getReferrerClickTimestampSeconds();
                    long appInstallTime = response.getInstallBeginTimestampSeconds();
                    boolean instantExperienceLaunched = response.getGooglePlayInstantParam();
                    break;
                case InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
                    // API not available on the current Play Store app.
                    break;
                case InstallReferrerResponse.SERVICE_UNAVAILABLE:
                    // Connection couldn't be established.
                    break;
            }
        }

        @Override
        public void onInstallReferrerServiceDisconnected() {
            // Try to restart the connection on the next request to
            // Google Play by calling the startConnection() method.
        }
    });
    ```

    3. Создайте операцию с выдачей действия и/или заполнением дополнительного поля

    4. Полученную строку **referrerUrl** вида **utm\_source=google-play\&utm\_medium=organic** нужно отправить в кастомное поле к действию в Mindbox.

    ```java
    Mindbox.executeAsyncOperation(applicationContext, "<operationSystemName>", "{<тело запроса с передачей полученого referrerUrl>}")
    ```
  </TabsContent>
</Tabs>
