---
title: "AppMetrica"
description: "AppMetricaをAdaptyと統合して、サブスクリプション分析を深化させましょう。"
---

[AppMetrica](https://appmetrica.yandex.com/about) は、ユーザーの行動を追跡し、モバイルアプリのパフォーマンスをリアルタイムで分析できる無料の解析ツールです。AppMetricaをAdaptyと統合することで、サブスクリプション指標やユーザーエンゲージメントについてより深い洞察を得られます。

## AppMetrica連携の設定方法 \{#how-to-set-up-appmetrica-integration\}

AppMetrica連携の設定は、主に2つのステップで構成されます。

1. Adapty ダッシュボードで連携を設定する
2. アプリのコードに連携を実装する

### ダッシュボードの設定 \{#dashboard-configuration\}

AppMetrica連携を設定するには：

1. [AppMetricaアプリ一覧](https://appmetrica.yandex.ru/application/list)を開く
2. トラッキングしたいアプリを選択する
3. **Settings > Main** に移動し、**Application ID** と **Post API key** をコピーする

  <img src="/assets/shared/img/appmetrica.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

4. Adapty ダッシュボードの [Integrations > AppMetrica](https://app.adapty.io/integrations/appmetrica) に移動する
5. AppMetricaの認証情報を貼り付ける

  <img src="/assets/shared/img/appmetrica_creds.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### イベントとタグ \{#events-and-tags\}

Adaptyでは、3つのグループのイベントをAppMetricaに送信できます。アプリのパフォーマンスを追跡するために必要なイベントを有効化してください。利用可能なイベントの完全なリストは、[イベントドキュメント](events)をご参照ください。

:::note
AppMetricaは4時間ごとにイベントを同期するため、ダッシュボードにイベントが表示されるまで遅延が生じる場合があります。
:::

  <img src="/assets/shared/img/6ed2d88-CleanShot_2023-08-18_at_14.59.042x.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

:::tip
一貫性を保つためにAdaptyのデフォルトイベント名の使用を推奨しますが、既存のアナリティクス設定に合わせてカスタマイズすることも可能です。
:::

### 収益の設定 \{#revenue-settings\}

デフォルトでは、Adaptyは収益データをイベントのプロパティとして送信し、AppMetricaのEventsレポートに表示されます。この収益データの計算と表示方法を設定できます。

- **収益の計算方法**: 財務レポートのニーズに合わせて収益値の計算方法を選択します：
  - **総収益（Gross revenue）**: 控除前の総収益を表示します。顧客が支払う全額の追跡に役立ちます
  - **ストア手数料控除後の収益（Proceeds after store commission）**: App Store/Play Storeの手数料を差し引いた収益を表示します。実際の収益の追跡に役立ちます
  - **ストア手数料・税金控除後の収益（Proceeds after store commission and taxes）**: ストア手数料と適用される税金の両方を差し引いた純収益を表示します。最も正確な収益の把握ができます

- **ユーザーの通貨で報告（Report user's currency）**: 有効にすると、売上がユーザーのローカル通貨で報告され、地域別の収益分析がしやすくなります。無効にすると、異なる市場間での一貫したレポートのためにすべての売上がUSDに変換されます。

- **収益イベントを送信（Send revenue events）**: このオプションを有効にすると、収益データがEventsレポートだけでなく、AppMetricaの[アプリ内・広告収益](https://appmetrica.yandex.com/docs/en/mobile-reports/revenue-report)レポートにも表示されます。収益の重複を避けるため、他の場所からすでに収益を送信していないことを確認してください。

- **過去のイベントを除外（Exclude historical events）**: 有効にすると、ユーザーがAdapty SDKを含むアプリをインストールする前に発生したイベントは送信されません。Adaptyを統合する前からアナリティクスにイベントを送信していた場合のデータ重複を防ぐのに役立ちます。

  <img src="/assets/shared/img/appmetrica_revenue.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### SDKの設定 \{#sdk-configuration\}

アプリでAppMetrica連携を有効にするには、2つの識別子を設定する必要があります。

1. `appmetrica_device_id`: 基本的な連携に必要
2. `appmetrica_profile_id`: 任意ですが、アプリにユーザー登録機能がある場合は推奨

これらの値を設定するには `setIntegrationIdentifier()` メソッドを使用します。各プラットフォームでの実装方法は以下のとおりです。

---
no_index: true
---

import Callout from '../../../components/Callout.astro';

<Callout type="note">
サードパーティSDKはユーザーIDを非同期で生成します。`Adapty.activate()` の実行時にIDがまだ準備できていない場合があります。**Customer User ID** がこれらのSDKのいずれかから取得される場合は、IDなしで `Adapty.activate()` を呼び出してください。IDが取得できたら、`setIntegrationIdentifier()` を呼び出し、次にCUIDで `identify()` を呼び出してください。
</Callout>

<Tabs groupId="current-os" queryString>
<TabItem value="Swift" label="iOS (Swift)" default>

**appmetrica_device_idの設定**

```swift showLineNumbers
AppMetrica.requestStartupIdentifiers(on: nil) { ids, error in
  if let error {
    // handle AppMetrica error    
    return
  }

  guard let deviceIDHash = ids?[.deviceIDHashKey] as? String else {
    // handle AppMetrica error
    return
  }

  Task {
    do {
      try await Adapty.setIntegrationIdentifier(
        key: "appmetrica_device_id",
        value: deviceIDHash
      )
    } catch {
      // handle the error
    }
  }
}
```

**appmetrica_profile_idの設定**

```swift showLineNumbers
do {
  try await Adapty.setIntegrationIdentifier(
    key: "appmetrica_profile_id",
    value: "YOUR_APPMETRICA_PROFILE_ID"
  )
} catch {
  // handle the error
}
```
</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

**appmetrica_device_idの設定**

```kotlin showLineNumbers 
val startupParamsCallback = object: StartupParamsCallback {
    override fun onReceive(result: StartupParamsCallback.Result?) {
        val deviceIdHash = result?.deviceIdHash ?: return

        Adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash) { error ->
            if (error != null) {
                // handle the error
            }
        }
    }

    override fun onRequestError(
        reason: StartupParamsCallback.Reason,
        result: StartupParamsCallback.Result?
    ) {
        //handle the error
    }
}

AppMetrica.requestStartupParams(context, startupParamsCallback, listOf(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH))
```

**appmetrica_profile_idの設定**

```kotlin showLineNumbers
val startupParamsCallback = object: StartupParamsCallback {
    override fun onReceive(result: StartupParamsCallback.Result?) {
        val deviceIdHash = result?.deviceIdHash ?: return

        Adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash) { error ->
            if (error != null) {
                // handle the error
            }
        }
        
        Adapty.setIntegrationIdentifier("appmetrica_profile_id", "YOUR_ADAPTY_CUSTOMER_USER_ID") { error ->
            if (error != null) {
                // handle the error
            }
        }
    }

    override fun onRequestError(
        reason: StartupParamsCallback.Reason,
        result: StartupParamsCallback.Result?
    ) {
        //handle the error
    }
}

AppMetrica.requestStartupParams(context, startupParamsCallback, listOf(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH))
```
</TabItem>
<TabItem value="Flutter" label="Flutter (Dart)" default>

**appmetrica_device_idの設定**

```javascript showLineNumbers

final startupParams = await AppMetrica.requestStartupParams([AppMetricaStartupParams.deviceIdHashKey]);
final deviceIdHash = startupParams.result?.deviceIdHash;

if (deviceIdHash != null) {
  try {
    await Adapty().setIntegrationIdentifier(
        key: "appmetrica_device_id", 
        value: deviceIdHash,
    );
  } on AdaptyError catch (adaptyError) {
    // handle the error
  } catch (e) {
    // handle the error
  }
}
```

**appmetrica_profile_idの設定**

```javascript showLineNumbers

try {
    await Adapty().setIntegrationIdentifier(
        key: "appmetrica_profile_id", 
        value: "YOUR_APPMETRICA_PROFILE_ID",
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```
</TabItem>
<TabItem value="Unity" label="Unity (C#)" default>

**appmetrica_device_idの設定**

```csharp showLineNumbers
using AdaptySDK;
using Io.AppMetrica;

AppMetrica.RequestStartupParams(
    (result, errorReason) => {
        string deviceIdHash = result.DeviceIdHash;

        if (deviceIdHash != null) {
            Adapty.SetIntegrationIdentifier(
                "appmetrica_device_id",
                deviceIdHash,
                (error) => {
                    // handle the error
                });
          }
      },
      new List<string>() { StartupParamsKey.AppMetricaDeviceIDHash }
);
```

**appmetrica_profile_idの設定**

```csharp showLineNumbers
Adapty.SetIntegrationIdentifier(
  "appmetrica_profile_id",
  "YOUR_APPMETRICA_PROFILE_ID",
  (error) => {
    // handle the error
});
```
</TabItem>
<TabItem value="RN" label="React Native (TS)" default>

**appmetrica_device_idの設定**

```typescript showLineNumbers

// ...
const startupParamsCallback = async (
  params?: StartupParams,
  reason?: StartupParamsReason
) => {
  const deviceIdHash = params?.deviceIdHash
  if (deviceIdHash) {
    try {
      await adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash);
    } catch (error) {
      // handle `AdaptyError`
    }
  }
}

AppMetrica.requestStartupParams(startupParamsCallback, [DEVICE_ID_HASH_KEY])
```

**appmetrica_profile_idの設定**

```typescript showLineNumbers

try {
  await adapty.setIntegrationIdentifier("appmetrica_profile_id", 'YOUR_ADAPTY_CUSTOMER_USER_ID');
} catch (error) {
  // handle `AdaptyError`
}
```
</TabItem>
</Tabs>

## AppMetricaのイベント構造 \{#appmetrica-event-structure\}

AdaptyはPOSTリクエストを通じてAppMetricaにイベントを送信し、パラメーターはクエリパラメーターとして渡されます。Adaptyの各イベントに対して、AppMetricaは最大**2つの個別リクエスト**を受け取ります。

1. **プロファイルイベント**（常に送信）: イベントのメタデータを含む
2. **収益イベント**（任意）: Adapty ダッシュボードで「収益イベントを送信」オプションが有効な場合に収益データを含む

### プロファイルイベントリクエスト \{#profile-event-request\}

送信先: `https://api.appmetrica.yandex.ru/logs/v1/import/events`

クエリパラメーター付きのURLの例：

```
POST https://api.appmetrica.yandex.ru/logs/v1/import/events?post_api_key=your_key&application_id=your_app_id&event_name=subscription_renewed&event_timestamp=1709294400&event_json=%7B%22vendor_product_id%22%3A%22yearly.premium%22...%7D&os_name=ios&ios_ifa=00000000-0000-0000-0000-000000000000&ios_ifv=12345678-1234-1234-1234-123456789012&profile_id=user_12345&session_type=foreground
```

クエリパラメーター：

| パラメーター           | 型     | 説明                                                                                                                                                |
|:-----------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`         | String | AppMetricaのPost APIキー                                                                                                                            |
| `application_id`       | String | AppMetricaのアプリケーションID                                                                                                                      |
| `event_name`           | String | イベント名（Adaptyのイベントからマッピング）                                                                                                        |
| `event_timestamp`      | Long   | イベントのUNIXタイムスタンプ（秒単位）。7日以上前の場合は直近7日以内に制限されます                                                                |
| `event_json`           | String | 利用可能な[イベントフィールド](webhook-event-types-and-fields#for-most-event-types)をすべて含むURLエンコードされたJSON文字列。nullでないフィールドのみ含まれます |
| `os_name`              | String | "ios" または "android"                                                                                                                              |
| `profile_id`           | String | AppMetricaのプロファイルID（設定されている場合）、それ以外はカスタマーユーザーID（利用可能な場合）                                                  |
| `appmetrica_device_id` | String | AppMetricaのデバイスIDハッシュ。`profile_id` が利用できない場合のみ送信されます                                                                     |
| `session_type`         | String | 常に "foreground"                                                                                                                                   |
| `ios_ifa`              | String | **iOSのみ**。広告主向けID（IDFA）                                                                                                                   |
| `ios_ifv`              | String | **iOSのみ**。ベンダー向けID（IDFV）                                                                                                                 |
| `google_aid`           | String | **Androidのみ**。Google広告ID                                                                                                                       |

### 収益イベントリクエスト（任意） \{#revenue-event-request-optional\}

送信先: `https://api.appmetrica.yandex.ru/logs/v1/import/revenue`

このリクエストは、Adapty ダッシュボードの連携設定で「収益イベントを送信」オプションが有効な場合にのみ送信されます。

クエリパラメーター付きのURLの例：

```
POST https://api.appmetrica.yandex.ru/logs/v1/import/revenue?post_api_key=your_key&application_id=your_app_id&revenue_event_type=subscription_renewed&price=9.99&currency=USD&product_id=yearly.premium&quantity=1&transaction_id=GPA.3383...&payload=%7B%22vendor_product_id%22%3A%22yearly.premium%22...%7D&os_name=ios&ios_ifa=00000000-0000-0000-0000-000000000000&profile_id=user_12345&session_type=foreground
```

クエリパラメーター：

| パラメーター           | 型      | 説明                                                                                                                                                                              |
|:---------------------|:--------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`       | String  | AppMetricaのPost APIキー                                                                                                                                                          |
| `application_id`     | String  | AppMetricaのアプリケーションID                                                                                                                                                    |
| `revenue_event_type` | String  | 収益イベントのタイプ（例："subscription_renewed"、"refund"、"intro_started"）。[AppMetricaのイベントマッピング](#revenue-event-type-mapping)をご参照ください                       |
| `price`              | Float   | 収益額（収益計算設定に基づく）                                                                                                                                                    |
| `currency`           | String  | 通貨コード（例："USD"）                                                                                                                                                           |
| `product_id`         | String  | ストアのプロダクトID                                                                                                                                                              |
| `quantity`           | Integer | 常に1                                                                                                                                                                             |
| `transaction_id`     | String  | ストアのトランザクションID                                                                                                                                                        |
| `payload`            | String  | イベントの詳細を含むURLエンコードされたJSON文字列。30KBを超える場合は、最も重要なデータを保持するために重要度の低いフィールドから順に削除されて自動的にトリミングされます         |
| `os_name`            | String  | "ios" または "android"                                                                                                                                                            |
| `profile_id`         | String  | AppMetricaのプロファイルID（設定されている場合）、それ以外はカスタマーユーザーID（利用可能な場合）                                                                                |
| `appmetrica_device_id` | String  | AppMetricaのデバイスIDハッシュ。`profile_id` が利用できない場合のみ送信されます                                                                                                   |
| `session_type`       | String  | 常に "foreground"                                                                                                                                                                 |
| `ios_ifa`            | String  | **iOSのみ**。広告主向けID（IDFA）                                                                                                                                                 |
| `ios_ifv`            | String  | **iOSのみ**。ベンダー向けID（IDFV）                                                                                                                                               |
| `google_aid`         | String  | **Androidのみ**。Google広告ID                                                                                                                                                     |