On this page

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

React Native SDKを使用すると、Amplitudeにイベントを送信できます。

React Nativeのサポート

React-Nativeは安定したリリースバージョン管理を提供していないため、下位互換性の維持が困難です。React-Native 自体は下位互換性がなく、バージョン間で重大な変更を加える可能性があります。 詳細については、ReactNative互換性リストをご覧ください。Amplitudeは最新バージョンのReact-Nativeのみをサポートしています。

互換性マトリックス

次のマトリックスは、さまざまなバージョンのReactNativeとReactNative CLIに対するAmplitude ReactNative SDKのサポートを示しています。

Android Gradle プラグインの互換性について詳しくはこちらをご覧ください。

SDKをインストールする

Amplitude ReactNative SDKの使用を開始するには、npmを使用してパッケージをプロジェクトにインストールしてください。SDKはデフォルトで、アプリの起動をまたいでIDとイベントキューを永続化するために@react-native-async-storage/async-storageを使用するため、SDKと一緒にこれをインストールしてください。独自のストレージバックエンドを使用したい場合は、「AsyncStorage のオプトアウト」を参照してください。

WebとExpoのサポート

このSDKは、Web用に構築されたか、Expoを使用して構築されたreact-nativeアプリに使用できます(Expo Goはまだサポートされていません)。

npm install @amplitude/analytics-react-native
npm install @react-native-async-storage/async-storage

ネイティブモジュールをインストールして、iOS で SDK を実行します。

bash
cd ios
pod install

SDKの初期化

インスツルメンテーションを行う前にSDKを初期化してください。Amplitudeプロジェクト用のAPIキーが必要です。 この呼び出しでユーザーIDと設定オブジェクトを任意で渡すことができます。SDK を初期化すると、アプリケーション内のどこでも使用できます。

ts
import { init } from "@amplitude/analytics-react-native";
// Option 1, initialize with API_KEY only
init(API_KEY);
// Option 2, initialize including user ID if it's already known
init(API_KEY, "user@amplitude.com");
// Option 3, initialize including configuration
init(API_KEY, "user@amplitude.com", {
  disableCookies: true, // Disables the use of browser cookies
});

SDK を設定する

ウェブ vs. モバイル

SDKは、ウェブとモバイルのプラットフォーム間で設定を共有します。これらのオプションの多くは、iOSやAndroidなどのネイティブプラットフォームでSDKを実行する場合には適用されません。たとえば、ウェブ上では、SDKはデフォルトでブラウザCookieにアイデンティティを保存します。ネイティブプラットフォームでは、SDKはIDを非同期ストレージに保存します。

バッチ処理の動作を設定する

高パフォーマンス環境をサポートするために、SDK はイベントをバッチで送信します。 trackメソッドは、メモリ内のすべてのイベントをキューに登録します。SDKはバックグラウンドで、イベントをバッチ単位でフラッシュします。flushQueueSizeおよび flushIntervalMillisを使用してバッチ動作をカスタマイズできます。 デフォルトでは、serverUrl は https://api2.amplitude.com/2/httpapi です。 一度に大量のデータを送信するには、useBatchtrueに設定し、setServerUrlをバッチイベントアップロードAPIhttps://api2.amplitude.com/batchに設定します。通常モードとバッチモードの両方で、同じイベントアップロードしきい値とフラッシュ時間間隔を使用します。

ts
import * as amplitude from "@amplitude/analytics-react-native";
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  // Events queued in memory will flush when number of events exceed upload threshold
  // Default value is 30
  flushQueueSize: 50,
  // Events queue will flush every certain milliseconds based on setting
  // Default value is 10000 milliseconds
  flushIntervalMillis: 20000,
});

オフラインモード

バージョン 1.6.0 以降、React Native SDK はオフラインモードをサポートしています。 SDK はデバイスがネットワーク接続を失ったことを検出し、イベントをドロップするのではなく、キューイングします。 デバイスがオフラインの場合、SDK は追跡されたイベントをストレージに保持し、アップロードの試行を停止します。 デバイスが再接続されると、SDK はキューイングされたイベントを Amplitude にフラッシュします。 オフラインモードはデフォルトで有効になっているため、設定する必要はありません。

SDKはネイティブモジュールを通じて接続を検出します。iOSでは NWPathMonitor、Androidでは ConnectivityManager を使用します。ウェブ上(react-native-web)では、SDK はブラウザの navigator.onLine 状態と online および offline イベントを使用します。

SDKはデバイスがオフラインの間もイベントをストレージに保持するため、storageProvider設定されているオフラインキューのサイズに制限があります。SDKがキューイングされたイベントを保存する場所を変更するには、AsyncStorageのオプトアウトを参照してください。

ネイティブモジュールのセットアップ

接続検出は、SDK のネイティブモジュールに依存しています。

  • iOS:ネイティブモジュールはpod installを実行すると自動的にリンクされます。SDK のインストール を参照してください。 サポートされている最小限のiOSデプロイメントターゲットは13.0です。
  • Android:SDKはマニフェストにACCESS_NETWORK_STATE権限を宣言します。これは自動的にアプリのマニフェストにマージされます。手動で変更を加える必要はありません。

オフラインモードを無効にする

自動接続検出をオフにするには、SDKを初期化するときにofflineOfflineDisabledに設定します。

ts
import * as amplitude from "@amplitude/analytics-react-native";
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  offline: amplitude.Types.OfflineDisabled,
});

オフラインモードを無効にすると、SDK はflushIntervalMillis およびflushQueueSize のみに基づいてイベントをフラッシュします。 独自のオフラインロジックを実装するには、以下のようにオフラインモードを無効にし、独自のネットワーク検出に基づいて切り替えますconfig.offline

EU域内のデータレジデンシー

AmplitudeのEUサーバーにデータを送信するために、クライアントの初期化時にサーバーゾーンを設定できます。SDKは、設定されている場合にサーバーゾーンに基づいてデータを送信します。

EUデータレジデンシーについては、Amplitude EU内にプロジェクトを設定してください。 SDKは、Amplitude EUから提供されたAPIキーを使用して初期化する必要があります。

ts
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  serverZone: "EU",
});

デバッグ

開発者コンソールに出力されるログのレベルを制御できます。

  • [None]:すべてのログメッセージを抑制します。
  • 「エラー」: エラーメッセージのみを表示します。
  • 「警告」: エラーメッセージと警告を表示します。logLevelを明示的に指定しない場合、これがデフォルト値になります。
  • 「詳細」: 情報メッセージを表示します。
  • 「デバッグ」:デバッグに役立つエラーメッセージ、警告、および情報メッセージを表示します。これには、すべてのSDKパブリックメソッド呼び出しの関数コンテキスト情報が含まれます。このログモードは開発フェーズでのみ使用してください。

ログ レベルを設定するには、logLevel を目的のレベルに設定します。

ts
amplitude.init(AMPLITUDE_API_KEY, OPTIONAL_USER_ID, {
  logLevel: amplitude.Types.LogLevel.Warn,
});

デフォルトのロガーは、ログを開発者コンソールに出力します。 カスタマイズ用のLoggerインターフェイスに基づいて独自のロガー実装を提供できます。たとえば、実稼働環境のSDKからエラーメッセージを収集できます。

独自の実装で設定を行い、loggerProviderロガーを設定してください。

ts
amplitude.init(AMPLITUDE_API_KEY, OPTIONAL_USER_ID, {
  loggerProvider: new MyLogger(),
});

デバッグモード

logLevelを「Debug」に設定することでデバッグモードを有効にします。次に例を示します:

ts
amplitude.init(AMPLITUDE_API_KEY, OPTIONAL_USER_ID, {
  logLevel: amplitude.Types.LogLevel.Debug,
});

デフォルトのロガーは、SDKのパブリックメソッドを呼び出すと、次のような追加の関数コンテキスト情報を開発者コンソールに出力します:

  • 'type': このコンテキストのカテゴリ。たとえば "invoke public method" です。
  • 'name': 呼び出された関数の名前。たとえば "track"。
  • 'args': 呼び出された関数の引数。
  • 'stacktrace': 呼び出された関数のスタックトレース。
  • 'time': 関数呼び出しの開始と終了のタイムスタンプ。
  • 'states': 関数呼び出し前後の有用な内部状態のスナップショット。

イベントを追跡

このSDKはHTTP V2 APIを使用しており、イベントに対しても同じ制約に従います。SDK を使用してログに記録するすべてのイベントに event_type フィールドと、deviceId (デフォルトで含まれています) または userId のうち少なくとも 1 つが含まれていることを確認し、これらの各フィールドに対する HTTP API の制約に従ってください。

計装に関する問題を防ぐために、デバイスIDとユーザーIDは、5文字以上の文字列である必要があります。 イベントに短すぎるデバイスIDまたはユーザーIDが含まれている場合、SDKはそのイベントからID値を削除します。イベントにdeviceIdまたはuserIdの値がない場合、Amplitudeはアップロードを400ステータスで拒否することがあります。 minIdLength設定オプションを設定することで、デフォルトの最小長である 5 文字を上書きできます。

イベントは、ユーザーがアプリケーションとどのように対話するかを表します。 たとえば、「ボタンがクリックされました」というアクションは、メモしておきたい項目かもしれません。

ts
import { track } from "@amplitude/analytics-react-native";
// Track a basic event
track("Button Clicked");
// Track events with optional properties
const eventProperties = {
  buttonColor: "primary",
};
track("Button Clicked", eventProperties);

複数のプロジェクトへのイベントの追跡

複数のAmplitudeプロジェクトにイベントをログ記録するには、Amplitudeプロジェクトごとに別々のインスタンスを作成します。 次に、Amplitudeを呼び出したい場所にインスタンス変数を渡します。 各インスタンスでは、独立した apiKeysuserIdsdeviceIds 、および設定が可能です。

ts
import * as amplitude from "@amplitude/analytics-react-native";
const defaultInstance = amplitude.createInstance();
defaultInstance.init(API_KEY_DEFAULT);
const envInstance = amplitude.createInstance();
envInstance.init(API_KEY_ENV, {
  instanceName: "env",
});

ユーザープロパティ

ユーザープロパティは、ユーザーがアプリ内で何らかのアクションを実行した時点でのユーザーの状況を把握するのに役立ちます。たとえば、ユーザーのデバイスの詳細情報、環境設定、言語などです。

Identifyを使用すると、イベントを送信することなく特定のユーザーのユーザープロパティを設定できます。 SDKは、個々のユーザープロパティに対する、setsetOnceunsetaddappendprependpreInsertpostInsertremoveclearAllなどの操作をサポートしています。 操作は、提供されたIdentifyインターフェイスを使用して宣言します。複数の操作を単一のIdentifyオブジェクトにまとめることができます。次に、IdentifyオブジェクトをAmplitudeクライアントに渡し、サーバーに送信します。

イベントのあとにIdentifyコールを送信した場合、操作の結果はすぐにダッシュボードのユーザーのプロファイル領域に表示されますが、Identifyコールのあとに別のイベントを送信するまでチャート結果には表示されません。identify 呼び出しは、今後のイベントにのみ影響します。詳細については、ユーザープロパティとイベントをご覧ください。

Identify

Identifyオブジェクトは、ユーザープロパティの設定を制御します。まず、Identify オブジェクトをインスタンス化します。 次に、それに対して Identify メソッドを呼び出します。最後に、クライアントは Identify オブジェクトを使用して呼び出しを行います。

ts
import { identify, Identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identify(identifyObj);

Identify.set

このメソッドは、ユーザープロパティの値を設定します。 たとえば、ユーザーのロールプロパティを設定できます。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.set("location", "LAX");
identify(identifyObj);

Identify.setOnce

このメソッドは、ユーザープロパティの値を1回だけ設定します。SDK は setOnce() を使用した後続の呼び出しを無視します。 たとえば、ユーザーの初期ログイン方法を設定できます。SDK は初期値のみを追跡するため、setOnce() はその後の呼び出しを無視します。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.setOnce("initial-location", "SFO");
identify(identifyObj);

Identify.add

このメソッドは、ユーザープロパティを何らかの数値で増分します。ユーザープロパティに値がまだ設定されていない場合、SDKは値を増分する前にユーザープロパティを0に初期化します。たとえば、ユーザーの旅行回数を追跡できます。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.add("travel-count", 1);
identify(identifyObj);

ユーザープロパティ内の配列

配列をユーザープロパティとして使用できます。配列を直接設定することも、prependappendpreInsert、および postInsert を使用して配列を生成することもできます。

Identify.prepend

このメソッドは、ユーザープロパティ配列の前に値を付加します。 ユーザープロパティに値がまだ設定されていない場合、SDKは新しい値を先頭に追加する前にそのプロパティを空のリストに初期化します。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.prepend("visited-locations", "LAX");
identify(identifyObj);

Identify.append

このメソッドは、ユーザープロパティ配列に値を付加します。 ユーザープロパティに値がまだ設定されていない場合、SDKは新しい値を追加する前にそのプロパティを空のリストに初期化します。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.append("visited-locations", "SFO");
identify(identifyObj);

Identify.preInsert

このメソッドは、値がユーザープロパティにまだ存在しない場合に、ユーザープロパティに1つまたは複数の値を事前に挿入します。事前挿入とは、指定されたリストの先頭に値を挿入することを意味します。 ユーザープロパティに値がまだ設定されていない場合、SDKは新しい値を事前に挿入する前にユーザープロパティを空のリストに初期化します。ユーザープロパティに既存の値がある場合、SDKは操作を実行しません。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.preInsert("unique-locations", "LAX");
identify(identifyObj);

Identify.postInsert

このメソッドは、値がユーザープロパティにまだ存在しない場合に、ユーザープロパティに値を事後挿入します。 ポスト挿入とは、指定されたリストの最後に値を挿入することを意味します。 ユーザープロパティに値がまだ設定されていない場合、SDKは新しい値を事後挿入する前にそのプロパティを空のリストに初期化します。ユーザープロパティに既存の値がある場合、SDKは操作を実行しません。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.postInsert("unique-locations", "SFO");
identify(identifyObj);

Identify.remove

このメソッドは、値がユーザープロパティに存在する場合に、そのユーザープロパティから値を削除します。 削除は指定されたリストから既存の値を削除することを意味します。 ユーザープロパティにこの項目が存在しない場合、SDKは操作を実行しません。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.remove("unique-locations", "JFK");
identify(identifyObj);

Identify.clearAll

このメソッドは、ユーザーからすべてのユーザープロパティを削除します。この操作は元に戻すことができないため、clearAll注意して使用してください。

ts
import { Identify, identify } from "@amplitude/analytics-react-native";
const identifyObj = new Identify();
identifyObj.clearAll();
identify(identifyObj);

ユーザーグループ

Amplitudeでは、ユーザーをグループに割り当てたり、それらのグループに対して「ユニーク数による集計」などのクエリを実行したりすることができます。 グループの少なくとも1人のメンバーが特定のイベントを実行した場合、そのグループはカウントに含まれます。

たとえば、「orgId」を使用して、ユーザーが所属する組織に基づいてユーザーをグループ化したい場合などです。 Joeは'orgId' '10'に属し、Sueは'orgId' '15'に属しています。SueとJoeはどちらも特定のイベントを実行します。 イベントセグメンテーションチャートでその組織をクエリできます。

グループを設定する際には、groupTypegroupNameを定義してください。前の例では、「orgId」は groupType であり、「10」と「15」は groupName の値です。 groupTypeのもう1つの例としては、「tennis」や「baseball」などのgroupName値を持つ「sport」があります。

グループを設定すると、groupType:groupName もユーザー プロパティとして設定され、そのユーザーの groupType に設定されている既存の groupName の値と、対応するユーザー プロパティ値が上書きされます。groupType は文字列です。groupName は、ユーザーが複数のグループに属していることを示すために、文字列または文字列の配列のいずれかを指定できます。

Joe が 'orgId' の '15' にある場合、groupName は '15' になります。

ts
import { setGroup } from "@amplitude/analytics-react-native";
// set group with single group name
setGroup("orgId", "15");

ジョーが「sport」の「tennis」と「soccer」に含まれている場合、groupNameは「["tennis", "soccer"]」になります。

ts
import { setGroup } from "@amplitude/analytics-react-native";
// set group with multiple group names
setGroup("sport", ["soccer", "tennis"]);

また、groupsを含むEventオブジェクトをtrackに渡すことで、イベントレベルのグループを設定することもできます。 イベントレベルのグループの場合、グループの指定はログに記録する特定のイベントにのみ適用され、setGroup で明示的に設定しない限り、ユーザーに永続することはありません。

ts
import { track } from "@amplitude/analytics-react-native";
track({
  event_type: "event type",
  event_properties: { eventPropertyKey: "event property value" },
  groups: { orgId: "15" },
});

グループプロパティ

Group Identify API を使用して、特定のグループのプロパティを設定または更新します。これらの更新プログラムは今後のイベントにのみ影響します。

groupIdentify()メソッドは、グループタイプとグループ名の文字列パラメータ、およびSDKがグループに適用するIdentifyオブジェクトを受け取ります。

ts
import { Identify, groupIdentify } from "@amplitude/analytics-react-native";
const groupType = "plan";
const groupName = "enterprise";
const event = new Identify();
event.set("key1", "value1");
groupIdentify(groupType, groupName, identify);

収益の追跡

ユーザー収益を追跡する際に推奨される方法は、revenue()と提供されているRevenueインターフェイスを組み合わせて使用することです。 収益インスタンスは各収益トランザクションを保存し、AmplitudeがイベントセグメンテーションとレベニューLTVチャートで使用するいくつかの特別な収益プロパティ(「revenueType」、「productIdentifier」など)を定義できます。その後、SDKはこれらのRevenueインスタンスオブジェクトをrevenue()に渡し、収益イベントとしてAmplitudeに送信します。これにより、Amplitudeはプラットフォーム内の収益に関連するデータを自動的に表示できます。 これを使用して、アプリ内購入とアプリ内以外の購入の両方を追跡できます。

ユーザーからの収益を追跡するには、ユーザーが収益を生成するたびに、収益を呼び出します。 たとえば、ユーザーがプロダクトを3ユニット、3.99ドルで購入したとします。

ts
import { Revenue, revenue } from "@amplitude/analytics-react-native";
const event = new Revenue()
  .setProductId("com.company.productId")
  .setPrice(3.99)
  .setQuantity(3);
revenue(event);

収益インターフェイス

イベントバッファのフラッシュ

このflushメソッドは、クライアントによるバッファリングされたイベントの送信をトリガーします。

typescript
import { flush } from "@amplitude/analytics-react-native";
flush();

デフォルトでは、SDKは一定の間隔で自動的にflushを呼び出します。イベントを完全にフラッシュするには、オプションの Promise インターフェイスを使用して非同期フローを制御できます。たとえば次のようになります。

typescript
await init(AMPLITUDE_API_KEY).promise;
track("Button Clicked");
await flush().promise;

カスタムユーザーID

アプリに独自のログインシステムがあり、ユーザーを追跡したい場合は、いつでもsetUserIdを呼び出してください。

TypeScript

ts
import { setUserId } from "@amplitude/analytics-react-native";
setUserId("user@amplitude.com");

ユーザー ID を引数として init 呼び出しに割り当てることもできます。

ts
import { init } from "@amplitude/analytics-react-native";
init(API_KEY, "user@amplitude.com");

カスタムセッションID

setSessionIdを使用して新しいセッション ID を割り当てることができます。 カスタムセッション ID を設定する場合は、値がエポック(Unix タイムスタンプ)からのミリ秒単位であることを確認してください。

TypeScript

ts
import { setSessionId } from "@amplitude/analytics-react-native";
setSessionId(Date.now());

カスタムデバイスID

deviceIdを使用して、新しいデバイスIDを割り当てることができます。 カスタムデバイスIDを設定する際は、その値が十分に一意であることを確認してください。 AmplitudeはUUIDを推奨しています。

ts
import { setDeviceId } from "@amplitude/analytics-react-native";
const { uuid } = require("uuidv4");
setDeviceId(uuid());

ユーザーがログアウトしたときにリセットする

resetは、ログアウト後にユーザーを匿名化するためのショートカットです。以下の方法で行います:

  • userIdundefinedに設定します。
  • 新しい UUID 値を設定しています。deviceId

未定義userIdかつ完全に新しい deviceIdの場合、現在のユーザーはダッシュボードに新しいユーザーとして表示されます。

ts
import { reset } from "@amplitude/analytics-react-native";
reset();

ユーザーを追跡から除外する

setOptOutに設定することで、特定のユーザーのログをオフにtrueすることができます。

ts
import { setOptOut } from "@amplitude/analytics-react-native";
setOptOut(true);

setOptOut が有効な間、SDK はイベントをサーバーに保存または送信しません。また、この設定はページをまたいで維持されます。

setOptOutに設定してfalseログを再度有効にします。

ts
import { setOptOut } from "@amplitude/analytics-react-native";
setOptOut(false);

オプションの追跡

デフォルトでは、SDKはこれらのプロパティを自動的に追跡します。SDK の初期化時に trackingOptions という構成を渡し、適切なオプションを false に設定することで、この動作を上書きできます。

ts
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  trackingOptions: {
    adid: false,
    appSetId: false,
    carrier: false,
    deviceManufacturer: false,
    deviceModel: false,
    ipAddress: false,
    idfv: false,
    language: false,
    osName: false,
    osVersion: false,
    platform: false,
  },
});

コールバック

すべての非同期APIはオプションでPromiseインターフェイスを介して待機できます。Promise インターフェイスはコールバックインターフェイスとしても機能します。

ts
import { track } from "@amplitude/analytics-react-native";
// Using async/await
const results = await track("Button Clicked").promise;
result.event; // {...} (The final event object sent to Amplitude)
result.code; // 200 (The HTTP response status code of the request.
result.message; // "Event tracked successfully" (The response message)
// Using promises
track("Button Clicked").promise.then((result) => {
  result.event; // {...} (The final event object sent to Amplitude)
  result.code; // 200 (The HTTP response status code of the request.
  result.message; // "Event tracked successfully" (The response message)
});

プラグイン

プラグインを使用すると、イベントプロパティの変更(エンリッチメントタイプ)やサードパーティAPIへの送信(送信先タイプ)などを行うことで、Amplitude SDK の動作を拡張できます。プラグインとは、メソッドsetup()execute()を持つオブジェクトです。

セッションリプレイと Segment の連携については、セッションリプレイ React Native Segment 連携ガイドを参照してください。

追加する

addメソッドは、Amplitudeにプラグインを追加します。プラグインはイベントの処理と送信を支援できます。

typescript
import { add } from "@amplitude/analytics-react-native";
add(new Plugin());

削除する

この remove メソッドは、指定されたプラグイン名が存在する場合、クライアントインスタンスからその名前を削除します。

typescript
import { remove } from "@amplitude/analytics-react-native";
remove(plugin.name);

プラグインの設定

このメソッドには、使用するためのプラグインを準備するためのロジックが含まれており、パラメータとして config を持ちます。 期待される戻り値は未定義です。 このメソッドの一般的な使用方法は、設定から設定をコピーしたり、プラグインの依存関係をインスタンス化したりすることです。SDKは、client.add()を通じてプラグインをクライアントに登録する際に、このメソッドを呼び出します。

Plugin.execute

このメソッドにはイベントを処理するためのロジックが含まれており、イベントをパラメータとして持っています。 拡張タイプのプラグインとして、期待される戻り値は変更されたイベントまたは拡張されたイベントです。 送信先タイプのプラグインとして、期待される戻り値は、キー:event (BaseEvent)、code (number)、およびmessage (string) を持つマップです。SDKは、Identify、GroupIdentify、およびRevenueイベントを含む各イベントに対してこのメソッドを呼び出します。これらのイベントはクライアントインターフェイスを通じて計測されます。

エンリッチメントタイプのプラグイン例

以下は、100 から始まるイベントのevent_idプロパティに増分整数を追加することにより、計測対象となる各イベントを変更するプラグインの例です。

ts
import { init, add } from "@amplitude/analytics-react-native";
import {
  ReactNativeConfig,
  EnrichmentPlugin,
  Event,
  PluginType,
} from "@amplitude/analytics-types";
export class AddEventIdPlugin implements EnrichmentPlugin {
  name = "add-event-id";
  type = PluginType.ENRICHMENT as const;
  currentId = 100;
  config?: ReactNativeConfig;
  /**
   * setup() is called on plugin installation
   * example: client.add(new AddEventIdPlugin());
   */
  async setup(config: ReactNativeConfig): Promise<undefined> {
    this.config = config;
    return;
  }
  /**
   * execute() is called on each event instrumented
   * example: client.track('New Event');
   */
  async execute(event: Event): Promise<Event> {
    event.event_id = this.currentId++;
    return event;
  }
}
init("API_KEY");
add(new AddEventIdPlugin());

送信先タイプのプラグインの例

以下は、お好みの HTTP クライアントを使用して、計測された各イベントをターゲットサーバーの URL に送信するプラグインの例です。

ts
import { init, add } from "@amplitude/analytics-react-native";
import {
  ReactNativeConfig,
  DestinationPlugin,
  Event,
  PluginType,
  Result,
} from "@amplitude/analytics-types";
export class MyDestinationPlugin implements DestinationPlugin {
  name = "my-destination-plugin";
  type = PluginType.DESTINATION as const;
  serverUrl: string;
  config?: ReactNativeConfig;
  constructor(serverUrl: string) {
    this.serverUrl = serverUrl;
  }
  /**
   * setup() is called on plugin installation
   * example: client.add(new MyDestinationPlugin());
   */
  async setup(config: ReactNativeConfig): Promise<undefined> {
    this.config = config;
    return;
  }
  /**
   * execute() is called on each event instrumented
   * example: client.track('New Event');
   */
  async execute(event: Event): Promise<Result> {
    const payload = { key: "secret", data: event };
    const response = await fetch(this.serverUrl, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Accept: "*/*",
      },
      body: JSON.stringify(payload),
    });
    return {
      code: response.status,
      event: event,
      message: response.statusText,
    };
  }
}
init("API_KEY");
add(new MyDestinationPlugin("https://custom.domain.com"));

高度なトピック

AsyncStorageのオプトアウト

React Native SDKは、アプリの起動をまたいでIDとイベントキューを永続化するために@react-native-async-storage/async-storageを使用します。独自のストレージバックエンド(たとえば react-native-mmkv、暗号化ストア、またはSQLite)を使用したい場合は、独自のストレージを提供し、ネイティブビルドからAsyncStorageを除外できます。

SDKは次の2つの異なるストレージスロットを使用します。

  • storageProvider イベントキュー用(Amplitudeへのフラッシュを待機しているイベント)です。
  • cookieStorageアイデンティティとセッション状態(デバイス ID、ユーザー ID、セッション ID)用です。

完全にオプトアウトするには、両方を上書きしてください。 storageProviderのみをオーバーライドした場合でも、SDKはデフォルトのチェーンを通じてアイデンティティの読み取りと書き込みを試行し、ネイティブではAsyncStorageにフォールバックされます。AsyncStorage も削除した場合、ID はメモリ内に格下げされ、アプリを起動するたびにリセットされます。

初期化時に両方のストレージスロットをオーバーライドする

Storageインターフェイスを実装し、両方のスロットを渡します。initの署名は(apiKey, userId, options)です。オーバーライドがオプションスロットに収まるように、undefinedまたは目的のユーザーIDをuserIdに渡してください。

ts
import { init } from "@amplitude/analytics-react-native";
init(API_KEY, undefined, {
  storageProvider: myEventQueueStorage,
  cookieStorage: myIdentityStorage,
});

ネイティブ自動リンクからAsyncStorageを除外する

両方のネイティブプラットフォームを null に設定して、パッケージを react-native.config.js に追加します。

js
module.exports = {
  dependencies: {
    "@react-native-async-storage/async-storage": {
      platforms: { ios: null, android: null },
    },
  },
};

AsyncStorage は、もはや iOS や Android のバイナリにリンクされなくなりました。 JS パッケージは node_modules に残っているため、require() は引き続き解決されますが、両方のストレージスロットを上書きしたため、SDK が AsyncStorage メソッドを呼び出すことはありません。

React Native Web

これらの手順は iOS と Android のみを対象としています。React Native Web では、Web バンドルから AsyncStorage を取り除くために追加のバンドラー設定が必要ですが、この点についてはまだドキュメント化されていません。

カスタムHTTPクライアント

カスタマイズのために、transportProviderconfiguration オプションへの Transportinterface の実装を提供できます。 たとえば、カスタマイズされた HTTP 要求ヘッダーを使用してプロキシサーバーに要求を送信できます。

ts
import { Transport } from "@amplitude/analytics-types";
class MyTransport implements Transport {
  async send(serverUrl: string, payload: Payload): Promise<Response | null> {
    // check example: https://github.com/amplitude/Amplitude-TypeScript/blob/main/packages/analytics-client-common/src/transports/fetch.ts
  }
}
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  transportProvider: new MyTransport(),
});

所在地

Amplitudeの取り込みサーバーは、次の順序でイベントの場所を解決します。

  1. ユーザー提供の citycountryregion
  2. location_latおよびlocation_lngから解決済み。
  3. ipから解決されました。

デフォルトでは、サーバーは ip から場所を決定します。 より詳細な場所を指定するために、citycountry、および region を個別に設定するか、location_latlocation_lng を設定することができます。その後、サーバーはこれらを citycountry、および region に解決します。 Amplitudeは、すべてのお客様が必要としているわけではない追加の権限を避けるために、SDKに正確な場所を設定しません。

細かい位置を設定するには、エンリッチメントプラグインを使用できます。 以下は、location_lat および location_lngを設定する方法のです。

TrackingOptionsでIPトラッキングを無効にすると、バックエンドがロケーションを解決できなくなります。 ipAddress: falseこの場合、前の例のようなプラグインを作成して、関連する位置情報を自分で設定することもできます。

キャリア

通信事業者のサポートはAndroidで機能しますが、AppleはiOS 16でサポートを終了しました。以前のバージョンのiOSでは、SDKは CTCarrierserviceSubscriberCellularProviders を使用して通信事業者の情報を取得していましたが、これらは 非推奨 となり、代替手段はありません

広告識別子

プラットフォームごとに異なる広告識別子があります。 ユーザーのプライバシーに関する懸念から、Amplitudeはこれらの識別子を自動的に収集しません。 次の手順に従ってこれらを有効にできます。 プラットフォームプロバイダーは、一部の識別子の使用を推奨していません。 これらを有効にすることを決定する前に、以下の注意事項をお読みください。

Android

アプリケーションセットID

アプリセットIDは、デバイスにインストールされている各アプリに対する固有の識別子です。 ユーザーは、アプリをアンインストールするとき、またはアプリを開かずに13か月経過した後にアプリセットIDを手動でリセットします。Googleはこれを、より強力なアナリティクスをオプトアウトしたいユーザー向けに、広告IDに代わるプライバシーに配慮した代替手段として設計しました。

アプリケーション セット ID を使用するには、次の手順に従ってください。

  1. アプリケーションの Android プロジェクトに依存関係としてplay-services-appset追加します。

    bash
    dependencies {
        implementation 'com.google.android.gms:play-services-appset:16.0.2'
    }
    
  2. trackingOptions.appSetIdを有効にします。

    ts
    amplitude.init(API_KEY, OPTIONAL_USER_ID, {
      trackingOptions: {
        appSetId: true,
      },
    });
    
Android広告ID

Android広告IDは、デバイスごとに固有の識別子です。ユーザーがパーソナライズされた広告をオプトアウトするときに、Android広告IDを手動でリセットします。

Android広告IDを使用するには、以下の手順に従ってください。

  1. アプリケーションのAndroidプロジェクトに依存関係としてplay-services-ads-identifier追加します。最新のAndroid SDKドキュメントでは、より詳細な設定について説明しています。

    bash
    dependencies {
      implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
    }
    

Android広告IDはデフォルトで有効になっています。これを無効にするには、trackingOptions.adIdfalseに設定します。

ts
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  trackingOptions: {
    adId: false,
  },
});

iOS

IDFV

IDFVは、アプリインスタンスの一意の識別子です。ユーザーがアプリを再インストールすると、システムはIDFVをリセットします。

iOSデバイスでIDFVを有効にするには、trackingOptions.idfvtrueに設定します。

ts
amplitude.init(API_KEY, OPTIONAL_USER_ID, {
  trackingOptions: {
    idfv: true,
  },
});
IDFA

AmplitudeはもうIDFAを推奨していません。 可能な場合は代わりにIDFVを使用することを検討してください。

IDFAはデバイスの一意の識別子です。ユーザーがパーソナライズされた広告をオプトアウトすると、システムはIDFAをリセットします。

React Native SDKはIDFAに直接アクセスしません。これは、アプリケーションにAdSupport.frameworkを追加する必要があるためです。代わりに、エンリッチメントプラグインを使用して自分でIDFAを設定できます。

以下は、サードパーティ製ライブラリを使用してIDFAを設定するプラグインの例です。

無線アップデート(OTA)

OTAアップデートをサポートするExpoなどのプラットフォームを使用している場合は、SDKにはネイティブコードとJSコードの両方が含まれていることに注意してください。OTAアップデートでは、ネイティブコードも必ずアップデートする必要があります。詳細については、公開ランタイムバージョンに関するExpoのドキュメントを参照してください。

次の表は、ネイティブ コードの変更を含む SDK のバージョンを示しています。

Was this helpful?