For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.
実験 React Native SDK(レガシー)
レガシーSDKに対しては廃止されるまでバグ修正のみが提供されます。SDK統合、React Native Web、Expoなどをサポートするv1.0.0+にアップグレードすることを推奨します。
Amplitude ExperimentのクライアントサイドReact Native SDKに関する公式ドキュメントです。
インストール
ウェブ互換性
Experiment React Native SDKは、iOSおよびAndroidのReact Nativeプロジェクトとのみ互換性があります。JavaScript SDKを使用して、これら3つのプラットフォームすべてをサポートしています。
実験 JavaScript Client SDK をインストールします。
npm install --save @amplitude/experiment-react-native-client
クイックスタート
// (1) Initialize the experiment client
await Experiment.initialize('<DEPLOYMENT_KEY>');
// (2) Fetch variants for a user
const user = {
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium': true,
},
};
await Experiment.fetch(user);
// (3) Lookup a flag's variant
const variant = await Experiment.variant('<FLAG_KEY>');
if (variant.value === 'on') {
// Flag is on
} else {
// Flag is off
}
コア機能
以下の関数が実験クライアント側SDKの中核を成しています。
非同期関数
ネイティブSDKは内部的に実行されるため、すべての関数の結果をawaitする必要があります。
初期化する
スタートアップ時にアプリケーション内のSDKクライアントを初期化します。apiKeyパラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。
initialize(apiKey: string, config?: ExperimentConfig): Promise<boolean>
初期化子はシングルトンインスタンスを返すため、同じインスタンス名に対する後続の初期化は常に最初のインスタンスを返します。複数のインスタンスを作成するには、instanceNameの設定を使用します。
const experiment = await Experiment.initialize('<DEPLOYMENT_KEY>');
統合
AmplitudeまたはSegment アナリティクス SDKのいずれかを使用してAmplitudeへのイベントをトラッキングしている場合は、初期化時に連携を設定する必要があります。連携はプロバイダーインターフェイスを自動的に実装し、ユーザーIDの管理やエクスポージャーイベントの追跡を容易にすることで、より合理化された開発者体験を実現します。
Amplitude連携
Amplitude Experiment SDKは、Amplitude Analytics SDKと連携するように設定されています。SDKのバージョンを最新に更新し、特別な連携初期化機能を使用してください。
await Amplitude.getInstance().init('<API_KEY>');
await Experiment.initializeWithAmplitudeAnalytics('<DEPLOYMENT_KEY>');
アナリティクスにカスタムインスタンス名を使用している場合は、実験SDK内のinstanceNameの設定オプションでも同じ値を設定してください。
連携初期化ツールは、ユーザープロバイダーとエクスポージャー追跡プロバイダーのインターフェイスの実装を設定して、Amplitude Analytics SDKからユーザーデータを取得し、エクスポージャーイベントを追跡します。
サポートされているバージョン
| アナリティクスSDKのバージョン | 実験SDKのバージョン |
|---|---|
2.8.0+ | 0.6.0+ |
設定
初期化時にSDKクライアントを設定します。
| 名前 | 概要 | デフォルト値 |
|---|---|---|
debug | SDK内で追加のデバッグログを有効にします。実稼働ビルドではfalseに設定する必要があります。 | false |
fallbackVariant | 指定されたキーのバリアントが存在しない場合にフォールバックするデフォルトのバリアントです。 | {} |
initialVariants | アクセス用のバリアントの初期セット。このフィールドは、サーバー側レンダリング (SSR) を使用してサーバーによりレンダリングされた値でクライアントSDKをブートストラップするのに役立ちます。 | {} |
serverUrl | バリアントを取得するホスト。 | https://api.lab.amplitude.com |
fetchTimeoutMillis | バリアントを取得するためのタイムアウト(ミリ秒単位)。 | 10000 |
retryFetchOnFailure | リクエストが成功しなかった場合に、バックグラウンドでバリアントの取得を再試行するかどうかを指定します。 | true |
automaticExposureTracking | trueの場合、variant()を呼び出すと、設定されたexposureTrackingProviderを通じて露出イベントが追跡されます。露出トラッキングプロバイダーが設定されていない場合、この設定オプションは何も実行しません。 | true |
automaticFetchOnAmplitudeIdentityChange | initializeWithAmplitudeAnalytics初期化機能を使用して、Amplitude Analytics SDKと統合する場合にのみ重要になります。trueの場合、アナリティクスによってユーザーID、デバイスID、またはユーザープロパティへの変更があると、実験SDKはバリアントを取得し、そのキャッシュを更新します。 | false |
userProvider | 呼び出されたときにユーザーオブジェクトをfetch()に提供するために使用されるインターフェースです。 | null |
exposureTrackingProvider | このインターフェースを実装および設定して、実験用SDKを通じて露出イベントを自動的にまたは明示的に追跡します。 | null |
instanceName | 実験用SDKインスタンスのカスタムインスタンス名です。 このフィールドの値は大文字と小文字を区別します。 | null |
EUデータセンター
AmplitudeのEUデータセンターを使用している場合は、初期化時にserverUrlオプションをhttps://api.lab.eu.amplitude.comに設定してください
取得
ユーザーのバリアントを取得し、高速アクセスのために結果をクライアントに保存します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します。
fetch(user?: ExperimentUser): Promise<boolean>
| パラメータ | 要件 | 概要 |
|---|---|---|
user | オプション | 評価要求とともに渡す明示的なユーザー情報。 SDK は、このユーザー情報と、ユーザープロバイダーを通じてインテグレーションから提供されたユーザー情報をマージします。その際、提供されたプロパティよりもfetch()に明示的に渡されたプロパティが優先されます。 |
Amplitudeでは、ユーザーがアプリケーションセッションの最新のバリアントを取得できるように、アプリケーション起動時にfetch()を呼び出すことを推奨しています。さらに、インターフェイスの"ちらつき"を防ぐために、ユーザーエクスペリエンスをレンダリングする前にフェッチリクエストが結果を返すのを待つ必要があります。
const user = {
user_id: 'user@company.com',
device_id: 'abcdefg',
user_properties: {
'premium': true,
},
};
await Experiment.fetch(user);
連携またはカスタムユーザープロバイダーを使用している場合は、ユーザーを入力せずに取得できます。
await Experiment.fetch();
ユーザーIDの変更時に取得
ユーザーの最新のバリアントを取得したい場合は、ユーザーの状態が意味のある方法で変化する度に毎回fetch()を呼び出すことを推奨します。たとえば、ユーザーがログインしてユーザーIDを受け取った場合や、フラグや実験のターゲティングルールに影響を与える可能性のあるユーザープロパティを設定している場合などです。
ユーザープロパティの場合、Amplitudeでは、リモート評価の前にユーザーエンリッチメントに頼るのではなく、新しいユーザープロパティを明示的にfetch()に渡すことを推奨しています。別のシステムを介したリモートユーザープロパティ同期には、fetch() のタイミング保証がありません。そのため、競合状態が発生する可能性があります。
タイムアウトと再試行
fetch()がタイムアウトするか(デフォルトは10秒)、何らかの理由で失敗した場合、SDKクライアントは戻って、バックオフを使用してバックグラウンドで再試行します。SDK クライアントの初期化時に設定オプションでタイムアウトを設定したり、再試行を無効にしたりできます。
バリアント
SDKクライアントのローカルストアからフラグまたは実験のバリアントにアクセスします。
自動露出トラッキング
連携を使用する場合や、カスタム露出トラッキングプロバイダーを設定する場合、variant()はトラッキングプロバイダーを通じて露出イベントを自動的に追跡します。automaticExposureTracking を falseに設定し、 を使用して手動で露出を追跡しますexposure()。この機能を無効にするには、
variant(key: string): Promise<Variant>
variantWithFallback(key: string, fallback: Variant): Promise<Variant>
| パラメータ | 要件 | 概要 |
|---|---|---|
key | 必須 | バリアントにアクセスするためのフラグまたは実験を識別するためのフラグキーです。 |
fallback | オプション | 指定された flagKey に対してバリアントが見つからなかった場合に返される値です。 |
ユーザーがどのバリアントに振り分けられたかを判断する際は、バリアント value を既知の文字列と比較することになります。
const variant = await Experiment.variant('<FLAG_KEY>');
if (variant.value === 'on') {
// Flag is on
} else {
// Flag is off
}
バリアントのペイロードへのアクセス:
バリアントは、任意のデータの動的ペイロードを使用して設定することもできます。バリアントのvalueを確認した後、バリアントオブジェクトからpayloadフィールドにアクセスします。
const variant = await Experiment.variant('<FLAG_KEY>');
if (variant.value === 'on') {
const payload = variant.payload;
}
nullバリアントvalueとは、ユーザーがバリアントに割り当てられていないことを意味します。 組み込みのフォールバックパラメータを使用して、ストアに指定されたフラグキーのバリアントがない場合に返すバリアントを指定できます。
const variant = await Experiment.variantWithFallback('<FLAG_KEY>', { value: 'control' });
if (variant === 'control') {
// Control
} else if (variant === 'treatment') {
// Treatment
}
すべて
SDKクライアントによって保存されているすべてのバリアントにアクセスできます。
all(): Promise<Variants>
エクスポージャー
設定済みの連携またはカスタムエクスポージャー追跡プロバイダーを通じて、指定されたフラグキーの現在のバリアントに対するエクスポージャーイベントを手動で追跡します。一般的に、automaticExposureTracking 構成のオプションを false に設定することと併せて使用されます。
exposure(key: string): Promise<boolean>
| パラメータ | 要件 | 概要 |
|---|---|---|
key | 必須 | エクスポージャーイベントを追跡するためのフラグまたは実験バリアントを識別するためのフラグキーです。 |
const variant = await Experiment.variant('<FLAG_KEY>');
// Do other things...
await Experiment.exposure('<FLAG_KEY>');
if (variant === 'control') {
// Control
} else if (variant === 'treatment') {
// Treatment
}
Was this helpful?