---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://appmetrica.yandex.com/docs/en/data-collection/attribution-integration-android.md
  - https://appmetrica.yandex.com/docs/ru/data-collection/attribution-integration-android.md
---
> **Documentation Index:** Fetch the complete configuration index at https://appmetrica.yandex.com/docs/en/llms.txt

# Importing attributions on Android

To set up import, call the attribution retrieval method on the client, then call the attribution sending method `AppMetrica.reportExternalAttribution` in the АppMetrica SDK.

## AppsFlyer {#appsflyer}

1. [Register](https://dev.appsflyer.com/hc/docs/conversion-data-android#appsflyerconversionlistener-overview/) `AppsflyerConversionListener`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `AppsflyerConversionListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val appsflyerConversionListener = object : AppsFlyerConversionListener {
	  // ...
      override fun onConversionDataSuccess(value: MutableMap<String, Any>?) {
          AppMetrica.reportExternalAttribution(ExternalAttributions.appsflyer(value))
      }
      // ...
  }

  AppsFlyerLib.getInstance().init(appsflyerKey, appsFlyerConversionListener, context)
  ```

- Java

  ```java translate=no
  AppsFlyerConversionListener appsFlyerConversionListener = new AppsFlyerConversionListener() {
	  // ...
      @Override
      public void onConversionDataSuccess(Map<String, Object> value) {
          AppMetrica.reportExternalAttribution(ExternalAttributions.appsflyer(value));
      }
      // ....
  };

  AppsFlyerLib.getInstance().init(appsflyerKey, appsFlyerConversionListener, context);
  ```

{% endlist %}

## Adjust {#adjust}

### Version 4.\*.\* {#adjust-4}

1. [Register](https://dev.adjust.com/en/sdk/android/features/attribution/) `OnAttributionChangedListener`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `OnAttributionChangedListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val config = AdjustConfig(context, adjustToken, adjustEnvironment)

  config.setOnAttributionChangedListener { attribution ->
      AppMetrica.reportExternalAttribution(ExternalAttributions.adjust(attribution))
  }

  Adjust.onCreate(config)
  ```

- Java

  ```java translate=no
  AdjustConfig config = new AdjustConfig(context, adjustToken, adjustEnvironment);

  config.setOnAttributionChangedListener(attribution -> {
      // ...
      AppMetrica.reportExternalAttribution(ExternalAttributions.adjust(attribution));
      // ...
  });

  Adjust.onCreate(config);
  ```

{% endlist %}

### Version 5.\*.\* {#adjust-5}

1. [Register](https://dev.adjust.com/en/sdk/android/features/attribution/) `OnAttributionChangedListener`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from  `OnAttributionChangedListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val config = AdjustConfig(context, adjustToken, adjustEnvironment)

  config.setOnAttributionChangedListener { attribution ->
      AppMetrica.reportExternalAttribution(ExternalAttributions.adjust(attribution))
  }

  Adjust.initSdk(config)
  ```

- Java

  ```java translate=no
  AdjustConfig config = new AdjustConfig(context, adjustToken, adjustEnvironment);

  config.setOnAttributionChangedListener(attribution -> {
      // ...
      AppMetrica.reportExternalAttribution(ExternalAttributions.adjust(attribution));
      // ...
  });

  Adjust.initSdk(config);
  ```

{% endlist %}

## Kochava {#kochava}

1. [Make an asynchronous attribution request by calling ](https://support.kochava.com/sdk-integration/android-sdk-integration/android-using-the-sdk/) `Tracker#retrieveInstallAttribution()`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `RetrievedInstallAttributionListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  Tracker.getInstance().retrieveInstallAttribution { installAttribution ->
      AppMetrica.reportExternalAttribution(ExternalAttributions.kochava(installAttribution.toJson()))
  }
  ```

- Java

  ```java translate=no
  Tracker.getInstance().retrieveInstallAttribution(installAttribution ->        
      AppMetrica.reportExternalAttribution(ExternalAttributions.kochava(installAttribution.toJson()))
  );
  ```

{% endlist %}

## Tenjin {#tenjin}

1. Make an asynchronous attribution request by calling `TenjinSDK#getAttributionInfo`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `AttributionInfoCallback`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val tenjinSdk = TenjinSDK.getInstance(context, tenjinToken)
  tenjinSdk.connect()

  tenjinSdk.getAttributionInfo { attribution ->
      // ...
      AppMetrica.reportExternalAttribution(ExternalAttributions.tenjin(attribution))
      // ...
  }
  ```

- Java

  ```java translate=no
  TenjinSDK tenjinSDK = TenjinSDK.getInstance(context, tenjinToken);
  tenjinSDK.connect();

  tenjinSDK.getAttributionInfo(attribution ->
      // ...
      AppMetrica.reportExternalAttribution(ExternalAttributions.tenjin(attribution))
      // ...
  ).
  ```

{% endlist %}

## Airbridge {#airbridge}

### Version 2.\*.\* {#airbridge-2}

1. [Register](https://help.airbridge.io/en/developers/android-sdk#attribution-result-callback-setup) `OnAttributionResultReceiveListener`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `OnAttributionResultReceiveListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val config = AirbridgeConfig.Builder(airbridgeAppName, airbridgeSdkAppToken)
      .setOnAttributionResultReceiveListener { map ->
        // ...
        AppMetrica.reportExternalAttribution(ExternalAttributions.airbridge(map))
        // ...
    }
    .build()

  Airbridge.init(context, config)
  ```

- Java

  ```java translate=no
  AirbridgeConfig config = new AirbridgeConfig.Builder(airbridgeAppName, airbridgeSdkAppToken)
      .setOnAttributionResultReceiveListener(map -> {
        // ...
        AppMetrica.reportExternalAttribution(ExternalAttributions.airbridge(map));
        // ...
    })
    .build();

  Airbridge.init(application, config);
  ```

{% endlist %}

### Version 4.\*.\* {#airbridge-4}

1. [Register](https://help.airbridge.io/en/developers/android-sdk#attribution-result-callback-setup) `OnAttributionResultReceiveListener`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from  `OnAttributionResultReceiveListener`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val config = AirbridgeOptionBuilder(airbridgeAppName, airbridgeSdkAppToken)
      .setOnAttributionReceived { map ->
          // ...
          AppMetrica.reportExternalAttribution(ExternalAttributions.airbridge(map))
          // ...
      }
      .build()
  Airbridge.initializeSDK(application, config)
  ```

- Java

  ```java translate=no
  AirbridgeConfig config = new AirbridgeOptionBuilder(airbridgeAppName, airbridgeSdkAppToken)
      .setOnAttributionReceived(map -> {
          // ...
          AppMetrica.reportExternalAttribution(ExternalAttributions.airbridge(map));
          // ...
      })
      .build();

  Airbridge.initializeSDK(application, config);
  ```

{% endlist %}

## Singular {#singular}

1. Register `SingularDeviceAttributionHandler`.
2. Set up the sending of attribution data (the `AppMetrica.reportExternalAttribution` method) in the AppMetrica SDK from `SingularDeviceAttributionHandler`.

{% list tabs group=instructions %}

- Kotlin

  ```kotlin translate=no
  val config = SingularConfig(SINGULAR_SDK_KEY, SINGULAR_SDK_SECRET)
      .withSingularDeviceAttribution { map ->
        // ...
        AppMetrica.reportExternalAttribution(ExternalAttributions.singular(map))
        // ...
      }

  Singular.init(context, config)
  ```

- Java

  ```java translate=no
  SingularConfig singularConfig = new SingularConfig(SINGULAR_SDK_KEY, SINGULAR_SDK_SECRET)
      .withSingularDeviceAttribution(map -> {
          // ...
          AppMetrica.reportExternalAttribution(ExternalAttributions.singular(map));
          // ...
      });

  Singular.init(context, singularConfig);
  ```

{% endlist %}

<!-- source: en/_includes/feedback-button.md -->
If you didn't find the answer you were looking for, you can use the feedback form to submit your question. Please describe the problem in as much detail as possible. Attach a screenshot if possible.

<a href="../troubleshooting/feedback-new">
  <span class="button">Contact support</span>
</a>

<a href="../troubleshooting/feedback-docs">
  <span class="button">Suggest an improvement for documentation</span>
</a>
<!-- endsource: en/_includes/feedback-button.md -->
