> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.qonversion.io/llms.txt
> Use this file to discover all available pages before exploring further.

# AppMetrica

> Send in-app subscription and purchases events to AppMetrica

Qonversion sends [subscription events](integrations-overview#tracked-events) to AppMetrica to help you match your users' behavior with their payment history and inform your product decisions.

## 1. Setup the SDKs

1. Make sure you have AppMetrica SDK installed. More about the AppMetrica SDKs read [here](https://yandex.com/support2/appmetrica-io/en/sdk/platforms).

2. Set Qonversion SDK by following [installing the SDK guide](install-sdk).

3. To attribute sent from Qonversion events to a particular AppMetrica user, set AppMetrica Device ID Hash (`AppMetrica.deviceIDHash`):

   <CodeGroup>
     ```swift Swift theme={null}
     let completionBlock: (String?, Error?) -> Void = { deviceId, error in
       if let error = error {
         // Handle error here
       } else if let deviceId = deviceId {
         Qonversion.shared().setUserProperty(.appmetricaDeviceId, value: deviceId)
       }
     }

     // Specify the dispatch queue on which you want to execute the completion block, main queue as an example
     let queue = DispatchQueue.main // Use the main queue as an example

     YMMYandexMetrica.requestAppMetricaDeviceID(withCompletionQueue: queue, completionBlock: completionBlock)
     ```

     ```objectivec Objective-C theme={null}
     YMMAppMetricaDeviceIDRetrievingBlock completionBlock = ^(NSString * _Nullable deviceId, NSError * _Nullable error) {
       if (error) {
         // Handle error here
       } else {
         [[Qonversion sharedInstance] setUserProperty:QONUserPropertyKeyAppMetricaDeviceId value:deviceId];
       }
     };

     // Specify the dispatch queue on which you want to execute the completion block, main queue as an example
     dispatch_queue_t queue = dispatch_get_main_queue();

     [YMMYandexMetrica requestAppMetricaDeviceIDWithCompletionQueue:queue
                                                    completionBlock:completionBlock];
     ```

     ```java Java theme={null}
     StartupParamsCallback startupParamsCallback = new StartupParamsCallback() {
         @Override
         public void onReceive(@Nullable Result result) {
             if (result != null) {
                 // Note, that `deviceIdHash` is used, not `deviceId`
                 Qonversion.getSharedInstance().setUserProperty(QUserPropertyKey.AppMetricaDeviceId, result.deviceIdHash);
             }
         }

         @Override
         public void onRequestError(@NonNull Reason reason, @Nullable Result result) {
             // ...
         }
     };
     AppMetrica.requestStartupParams(
             this,
             startupParamsCallback,
             Arrays.asList(
                     // Note, that `APPMETRICA_DEVICE_ID_HASH` is used, not `APPMETRICA_DEVICE_ID`
                     StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH
             )
     );
     ```

     ```kotlin Kotlin theme={null}
     val startupParamsCallback = object : StartupParamsCallback {
         override fun onReceive(result: StartupParamsCallback.Result?) {
             // Note, that `deviceIdHash` is used, not `deviceId`
             result?.deviceIdHash?.let {
                 Qonversion.shared.setUserProperty(QUserPropertyKey.AppMetricaDeviceId, it)
             }
         }

         override fun onRequestError(
             reason: StartupParamsCallback.Reason,
             result: StartupParamsCallback.Result?
         ) {
             // Handle error here
         }
     }
     AppMetrica.requestStartupParams(
         this,
         startupParamsCallback,
         listOf(
             // Note, that `APPMETRICA_DEVICE_ID_HASH` is used, not `APPMETRICA_DEVICE_ID`
             StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH
         )
     )
     ```

     ```dart Flutter theme={null}
     String deviceId = await AppMetrica.requestAppMetricaDeviceID();
     Qonversion.getSharedInstance().setUserProperty(QUserPropertyKey.appMetricaDeviceId, deviceId);
     ```

     ```typescript React Native theme={null}
     AppMetrica.requestAppMetricaDeviceID((deviceId, reason) => {
       if (deviceId) {
         Qonversion.getSharedInstance().setUserProperty(UserPropertyKey.APP_METRICA_DEVICE_ID, deviceId);
       } else {
         // Handle error here
       }
     });
     ```

     ```csharp Unity theme={null}
     AppMetrica.Instance.RequestAppMetricaDeviceID((deviceId, error) =>
         {
             if (error != null)
             {
                 // Handle error here
             }
             else
             {
                 Qonversion.GetSharedInstance().SetUserProperty(UserPropertyKey.AppMetricaDeviceId, deviceId);
             }
         });
     ```
   </CodeGroup>

4. (Optionally) To improve attribution quality, set the same user ID to AppMetrica and Qonversion SDKs:

   <CodeGroup>
     ```swift Swift theme={null}
     YMMYandexMetrica.setUserProfileID("yourSideUserID")
     Qonversion.shared().setUserProperty(.appMetricaUserProfileId, value: "yourSideUserID")
     ```

     ```objectivec Objective-C theme={null}
     [YMMYandexMetrica setUserProfileID:@"yourSideUserID"];
     [[Qonversion sharedInstance] setUserProperty:QONUserPropertyKeyAppMetricaUserProfileId, value: @"yourSideUserID";
     ```

     ```java Java theme={null}
     AppMetrica.setUserProfileID("yourSideUserID");
     Qonversion.getSharedInstance().setUserProperty(QUserPropertyKey.AppMetricaUserProfileId, "yourSideUserID");
     ```

     ```kotlin Kotlin theme={null}
     AppMetrica.setUserProfileID("yourSideUserID")
     Qonversion.shared.setUserProperty(QUserPropertyKey.AppMetricaUserProfileId, "yourSideUserID")
     ```

     ```dart Flutter theme={null}
     await AppMetrica.setUserProfileID('yourSideUserID');
     Qonversion.getSharedInstance().setUserProperty(QUserPropertyKey.appMetricaUserProfileId, 'yourSideUserID');
     ```

     ```typescript React Native theme={null}
     AppMetrica.setUserProfileID('yourSideUserID');
     Qonversion.getSharedInstance().setUserProperty(UserPropertyKey.APP_METRICA_USER_PROFILE_ID, 'yourSideUserID');
     ```

     ```csharp Unity theme={null}
     AppMetrica.Instance.SetUserProfileID("yourSideUserID");
     Qonversion.GetSharedInstance().SetUserProperty(UserPropertyKey.AppMetricaUserProfileId, "yourSideUserID");
     ```
   </CodeGroup>

## 2. Configure the AppMetrica integration

1. Navigate to your [AppMetrica dashboard](https://appmetrica.yandex.com/), select Settings and collect the following keys:

   1. **Application ID**. It can be found right below the Application name in the General tab.
   2. **Post API key**. It can be found in the General settings section as well.

<img src="https://mintcdn.com/qonversion/i4lAeIKmC47lf8K-/images/docs/009c78a-Screenshot_2024-02-08_at_14.44.23.png?fit=max&auto=format&n=i4lAeIKmC47lf8K-&q=85&s=314623a0713749e38b569205bb70c11b" alt="" width="2696" height="1706" data-path="images/docs/009c78a-Screenshot_2024-02-08_at_14.44.23.png" />

2. Navigate to the [Integrations](https://dash.qonversion.io/app/integration/) section of your Qonversion project, select [AppMetrica](https://dash.qonversion.io/app/integration/create?name=appmetrica), provide the **Application ID** and **Post API key**, and click Save.

<img src="https://mintcdn.com/qonversion/5c527iOH0vIMjiW3/images/docs/c5637bb-Screenshot_2024-02-08_at_15.24.25.png?fit=max&auto=format&n=5c527iOH0vIMjiW3&q=85&s=c88feb713f55f8729d8dc078b2f63bb0" alt="" width="2544" height="1494" data-path="images/docs/c5637bb-Screenshot_2024-02-08_at_15.24.25.png" />

3. You can use the default event names provided by Qonversion or change them as you need.

**→[Read more about tracked events here](integrations-overview#tracked-events)**

<Check>
  ### Done

  Now Qonversion starts sending in-app purchases and subscription data to your AppMetrica account.
</Check>

## Event Payload

In case you need details about data sent to AppMetrica, follow the example below:

<CodeGroup>
  ```json JSON theme={null}
  {
    "post_api_key": "your_post_api_key",
    "application_id": "your_application_id",
    "revenue_event_type": "example_event_type",
    "event_timestamp": "1707206995",
    "product_id": "example_product_id",
    "app_package_name": "com.example.app",
    "appmetrica_device_id": "8f65b16df378e7a6bece9614e1530fb55",
    "price": "19.99",
    "currency": "USD",
    "transaction_id": "example_transaction_id",
    "order_id": "example_order_id",
    "ios_ifa": "example_advertising_id_for_ios",
    "google_aid": "example_advertising_id_for_android",
    "os_name": "iOS",
    "os_version": "15.0",
    "device_model": "iPhone13,2",
    "device_locale": "en_US",
    "app_version_name": "1.0.0"
  }
  ```
</CodeGroup>

***

[Amplitude](amplitude)

[AppsFlyer](appsflyer)
