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

# プラットフォーム間で SDK を連携する

> Kameleoon SDK を Web、モバイル、バックエンドのプラットフォームに同時にデプロイする際に、統一された訪問者 ID と一貫した実験処理を維持します。

Kameleoon SDK をウェブサイト、モバイルアプリ、バックエンドサーバー間で連携させ、統一された訪問者 ID を維持します。この連携により、すべてのプラットフォームで一貫した実験処理とデータフローが保証されます。

プロジェクトが複数の Kameleoon SDK を実装する場合、本ガイドを使用してください。

* Web 環境向けの JavaScript SDK または `engine.js`。
* Android または iOS アプリ向けのモバイル SDK。
* バックエンド統合と意思決定ロジック向けのサーバーサイド SDK。

## アーキテクチャ概要

典型的なマルチ環境セットアップは、次のコンポーネントで構成されます。

* **ウェブサイト**: JavaScript SDK または `engine.js` を使用して、クライアントサイドの実験とパーソナライゼーションキャンペーンを実行します。
* **モバイルアプリ**: モバイル SDK を使用して、バリエーションを表示し、コンバージョンをトラッキングします。
* **バックエンドサーバー**: サーバーサイド SDK を使用して、バリエーションの集中決定または訪問者データの同期を行います。

## データと訪問者コードのフロー

* **訪問者コード**は、すべての環境間でユーザーを一貫して識別します。
* **サーバーサイド SDK** は、必要に応じてバリエーション決定を調整します。
* 各 SDK は、分析およびトラッキングデータを Kameleoon プラットフォームに直接送信します。

## 訪問者コードとクロスデバイス管理

### 訪問者コードの生成と共有

各ユニークな訪問者は、すべてのプラットフォーム間で一貫した1つの訪問者コードを持つ必要があります。このコードにより、Kameleoon は実験決定とトラッキングを統一できます。

次のクロスプラットフォームフローに従ってください。

1. エンジン、Web SDK、サーバーサイド SDK、またはモバイルアプリケーションが訪問者コードを生成します。
2. バックエンドは、ユーザーが新しいプラットフォームでログインしたときに既存の訪問者コードを取得します。
3. システムは、訪問者コードをモバイル、サーバーサイド、Web SDK に渡します。これにより、すべてのプラットフォームで同じユーザーが一貫して評価されます。

### 訪問者コードを同期する

* 訪問者コードをバックエンドまたはユーザーデータベースに安全に保存し、ユーザー ID にリンクします。
* ユーザーが別のプラットフォームでログインした場合は、次の手順に従います。
  * **モバイルアプリ**: バックエンドから訪問者コードをリクエストします。
  * **サーバーサイド SDK**: すべてのバリエーションおよびトラッキングコールに同じ訪問者コードを使用します。
  * **Web SDK**: JavaScript API を使用して訪問者コードを設定します。

```javascript theme={null}
kameleoon.API.Visitor.setVisitorCode(visitorCode);
```

<Note>
  Web SDK とサーバーサイド SDK は、`kameleoonVisitorCode` Cookie を介して自動的に通信します。これら2つをリンクするための追加手順を実行する必要はありません。
</Note>

### ベストプラクティス

* 既存のユーザー識別子 (例: `userId`) を、すべてのプラットフォーム間で単一の Kameleoon 訪問者コードにマッピングします。
* バックエンドを訪問者コードの真実の情報源として維持します。
* 既知のユーザーの既存の訪問者コードが SDK によって上書きされないようにします。

統一された識別により、すべてのユーザーアクション、コンバージョン、バリエーション決定が Kameleoon の同じ訪問者にリンクされます。

## 環境間の実験処理

モバイルとバックエンドなど、複数の環境にまたがる実験のために、決定とバリエーション表示を調整します。

### シナリオ例

このシナリオでは:

* **モバイルアプリ**がバリエーションを表示します。
* **バックエンドサーバー**が割り当てられるバリエーションを決定します。

#### 実装オプション

**オプション 1: サーバーサイド決定ロジック**

1. **モバイルアプリ**が訪問者コードをバックエンドに送信します。
2. **サーバーサイド SDK** が `getVariation()` (またはその同等メソッド) を呼び出して、割り当てられたバリエーションを取得します。
3. バックエンドはバリエーション ID または名前をモバイルアプリに返します。
4. **モバイルアプリ**がバリエーションを表示し、エクスポージャーをトラッキングします。
5. **モバイル**および**サーバー SDK** の両方が、イベントトラッキングに同じ訪問者コードを使用します。

**利点:**

* バリエーションロジックを集中化し、一貫した決定を保証します。
* バックエンドロジックと UI 要素の両方に影響する実験をサポートします。

**オプション 2: クライアントサイド (モバイル) 決定ロジック**

1. **モバイル SDK** が訪問者コードを使用してバリエーション割り当てを取得します。
2. モバイルアプリがバリエーションをローカルに適用し、エクスポージャーを直接トラッキングします。
3. (*オプション*) バックエンドもトラッキングまたは検証に参加する場合、**サーバーサイド SDK** が同じ訪問者コードを再利用して、一貫したレポートを保証します。

**利点:**

* 同期で遅延のない決定を提供します。
* サーバーへの往復を回避することで遅延を削減します。
* バックエンドロジックに依存しない UI 中心の実験を最適化します。

## 適切なセットアップを選ぶ

| ユースケース               | 決定レイヤー      | 訪問者コードのソース   | 備考              |
| :------------------- | :---------- | :----------- | :-------------- |
| **モバイル UI 実験**       | モバイル SDK    | バックエンド       | バリエーションをローカルに処理 |
| **バックエンドまたは API 駆動** | サーバーサイド SDK | アプリまたはウェブサイト | 集中化された決定ロジック    |
| **クロスデバイス一貫性**       | 任意          | バックエンド       | 統一されたトラッキングを保証  |

## コード例: レイヤー間で訪問者コードを渡す

<CodeGroup>
  ```javascript Web (JS) theme={null}
  const visitorCode = kameleoon.API.Visitor.code;
  fetch("/api/syncVisitor", {
    method: "POST",
    body: JSON.stringify({ visitorCode }),
  });
  ```

  ```swift Mobile (iOS) theme={null}
  let kameleoonClient = try KameleoonClientFactory.create(
      siteCode: siteCode, 
      visitorCode: visitorCodeFromBackend
  )
  let variation = try kameleoonClient.getVariation(featureKey: featureKey)
  ```

  ```python Server (Python) theme={null}
  client = KameleoonClientFactory.create(SITE_CODE, config)
  variation = client.get_variation(visitor_code, feature_key)
  ```
</CodeGroup>

***

異なるレイヤー間で SDK 実装を処理するには:

* すべてのプラットフォームで、ユーザーごとに単一の訪問者コードを割り当てます。
* バックエンドから訪問者コードを管理および配布します。
* 実験タイプに基づいてバリエーションロジックレイヤーを選択します (集中化されたロジックにはサーバー、アプリ駆動の UI にはクライアントサイド)。
* 同じ訪問者コードですべてのユーザーアクティビティをトラッキングして、一貫したクロスデバイスデータを維持します。

***
