FirebaseとGoogle Analytics
Adaptyはサブスクリプションイベント(購入、更新、返金、トライアル開始など)をFirebaseとGoogle Analyticsに送信できるため、1つの連携で両方にデータを届けられます。
Firebase プロジェクトと、それにリンクされた Google Analytics プロパティの両方が必要です。どちらか一方しか使わない場合でも同様です。Firebase と Google Analytics は、2つのコンソールで表示される同じデータです。
購入と返金のイベントは、収益、通貨、プロダクトの詳細を付加した状態で届きます。同じデータが Firebase のモバイルツール(Audiences、Remote Config など)と Google Analytics のレポートに反映されます。
これはアナリティクス連携であり、Google 広告のアトリビューションツールではありません。詳しくは制限事項をご覧ください。
このインテグレーションでできること
Adapty はユーザーを subscription_state(subscribed、active_trial、never_subscribed など)でグループ化し、サブスクリプションのライフサイクルイベントを Firebase および Google Analytics に転送します。
- オーディエンス: Firebase と Google Analytics でサブスクライバーオーディエンスを作成し、外部チャネルに活用 — Google Ads リターゲティング、FCM キャンペーン、類似ユーザーモデリング。
- Google Ads コンバージョン (Google Analytics):
purchaseおよびrefundを Google Ads のコンバージョン目標として使用。 - Firebase Remote Config: アプリを更新せずに利用制限、コピー、機能フラグを変更 — サブスクリプション状態を条件として設定。(フロー/ペイウォールのコンテンツを設定する Adapty リモートコンフィグ とは異なります。)
- Cloud Messaging: アプリが閉じているときに離脱したサブスクライバーへプッシュ通知を送信。
- クロスデバイストラッキング (Google Analytics): Adapty が
customer_user_idを Google Analytics に送信することで、Google Ads が同一ユーザーを複数デバイスにまたがって追跡可能に。 - コンバージョンファネル (Google Analytics): ユーザーがコンバージョンまたはチャーンに至る前にアプリ内で何を行ったか確認。
- 予測: 購入履歴を使ってチャーンや支出を予測。
- A/B テスト: サブスクライバーコホートを対象にアプリ機能をテスト — たとえば、トライアルユーザーに新しいナビゲーションパターンを展開してセッション長を計測。(ペイウォールのバリアントには Adapty A/B テスト を使用してください。)
インテグレーションの仕組み
- ユーザーが初めてアプリを開くと、Firebase SDK はインストールに対して一意の識別子(Firebase App Instance ID)を生成します。Firebase と Google Analytics はこの ID を使って、各イベントの発生元となるインストールを特定します。
- アプリは Firebase App Instance ID を Adapty の SDK に渡します。Adapty はユーザーのプロファイルをこの Firebase インストールに紐づけます。
- ユーザーが購入を行うと、Adapty のサーバーは Firebase App Instance ID を付与したうえで、イベントを Firebase にサーバー間通信で転送します。このデータのやり取りはアプリの外部で行われます。
- Firebase は購入をインストールと照合するため、ユーザーがアプリ内で行ったその他のアクティビティと並べて購入状況を確認できます。
Firebase App Instance ID はデバイス固有の情報です。同じ Adapty ユーザーが別のデバイスでアプリを開くと、新しい Firebase ID が以前の ID を上書きします。デバイスをまたいでユーザーを特定し続けるには、カスタマーユーザー ID を使用してください。
Web購入(StripeおよびPaddle)
StripeまたはPaddleの購入がFirebaseに連携されるのは、購入者がモバイルアプリを先に起動した場合のみです。Web購入が発生する前に、Firebase App Instance IDが設定されている必要があります。
App StoreおよびPlay Storeの購入では、この処理は自動的に行われます。これらはモバイルアプリ内で、setIntegrationIdentifierの呼び出しと同時に行われるため、購入が発生した時点でFirebase IDが存在します。
Stripe と Paddle の購入はアプリ外(ウェブ)で発生します。モバイルアプリは起動時に setIntegrationIdentifier を呼び出す必要があります — ウェブ購入が実行される前に。そうしないと、Adapty には紐付けるIDがなく、購入が Firebase に届きません。
制限事項
- Google Ads のアトリビューションツールではありません。 このインテグレーションは Adapty イベントを Firebase および Google Analytics に送信するためのものです。Google Ads キャンペーン(UAC / ユニバーサルアプリキャンペーン)へのアプリインストールのアトリビューションや、有料トラフィックとオーガニックトラフィックの区別には対応していません。インストールのアトリビューションには、Adapty の組み込み機能である Adapty アトリビューション をご利用ください。
- 過去のイベントはユーザーの初回起動時に Firebase に届きます。 Adapty は、インテグレーションを有効化する前に処理したイベントを再送信しません。ただし、既存のサブスクライバーが Adapty SDK を含むビルドを初めて起動した場合、Adapty はそのユーザーのストア履歴全体を取り込み、通常のイベントと同様に転送します。Firebase は初回購入、更新、トライアルコンバージョン、買い切り購入をすべて GA4 の
purchaseイベントにマッピングするため、Adapty は遡及された更新をそれぞれ収益付きで送信します。(過去のデータは Adapty の S3 / GCS エクスポートにも保存されていますが、Firebase へのインポートはこのインテグレーションの対象外です。) - Web のみの購入者は Firebase に届きません。 Adapty はモバイルアプリが設定した Firebase App Instance ID を使って購入を Firebase に転送します。アプリをインストールしていない購入者には ID がないため、その購入は Firebase に届きません。詳細は上記の Web 購入(Stripe と Paddle) をご覧ください。Web トラッキングには FunnelFox の Firebase インテグレーション または Google Analytics の Web データストリームの利用を検討してください。
- Web 購入はストア固有の制限を継承します。 詳細は Stripe インテグレーションの制限事項 および Paddle インテグレーションの制限事項 をご覧ください。
セットアップ手順
Firebase を設定する
-
Firebase Console を開き、プロジェクトを選択または作成します。サンドボックスイベントを本番のアナリティクスに混入させないために、開発ビルド用には別の Firebase プロジェクトを使用してください。
-
プロジェクトを Google Analytics プロパティにリンクします。Firebase ではプロジェクト作成時にリンクを促しますが、後から Project settings > Integrations > Google Analytics で追加することもできます。
-
Project settings > General > Your apps で、リリースするプラットフォーム(iOS / Android / Web)ごとにエントリを追加します。Stripe と Paddle の場合は Web アプリのエントリを追加してください(どちらもネイティブアプリタイプはありません)。各エントリには一意の Firebase App ID と、Google Analytics 上の対応するデータストリームが生成されます。セットアップ時に、この ID を Adapty の Firebase インテグレーション設定に貼り付けます。
Adapty を設定する
-
Adapty ダッシュボードで Integrations > Firebase を開きます。
-
Firebase integration トグルを有効にします。
-
対応する各プラットフォームの認証情報を入力します。Adapty はプラットフォームごとに Firebase App ID と Google Analytics secret の両方が必要です。各値は iOS、Android、Stripe、Paddle ごとに異なります。どちらか一方の値しか設定されていないプラットフォームからはイベントが送信されません。
| Adapty ダッシュボード | Google Analytics | 確認場所 |
|---|---|---|
| Firebase App ID | App ID | Firebase Console > Project settings > General > Your apps |
| Google Analytics secret | Measurement Protocol API secret | Google Analytics > Admin > Data streams > Measurement Protocol API secrets > Create |
- Adapty がどのように収益とユーザーデータを転送するかを設定します。4つのコントロールはダッシュボードの1行に並んでいます:
- Revenue definition ドロップダウン: 総収益、ストア手数料後の収益、またはストア手数料と税金後の収益。
- Send user properties トグル: オンにすると、イベントに
subscription_stateとsubscription_product_idが含まれます。レポートやオーディエンスで使用するには、レポートでサブスクリプションデータを使用するを参照してください。 - Report user’s currency トグル: オンにすると、Adapty は各販売を購入者が支払った通貨で報告します。オフにすると、USD で報告します。
- Send trial price トグル: トライアル開始は重要なシグナルです — 有料ユーザーの多くはトライアルから始まります。ただし、Google 広告の入札最適化は収益を持つイベントのみを対象とします。これをオンにすると、各トライアルに仮の価格が割り当てられ、Google がコンバージョンとして認識し、トライアル開始者の獲得に向けて広告費を最適化できます。オンにすると、Trial price percentage フィールドが表示されます。Google が各トライアルに対してサブスクリプション全額のどの割合を価値として扱うかを設定します — たとえば
50%と設定すると、トライアル期間中はサブスクリプション価格の半額として報告されます。
- Send user properties トグル: オンにすると、イベントに
- Adapty のイベントを Firebase/Google Analytics のイベント名にマッピングします。Adapty では iOS と Android それぞれに独立したイベントマップを用意しているため、プラットフォームごとに異なる名前を使用できます。Stripe および Paddle の購入には iOS のイベントマップが使用されます — どちらにも専用のマップはありません。
Google Analytics は、Measurement Protocol に厳格な制限を設けています。イベント名は40文字、ユーザープロパティ名は24文字、値は36文字が上限です。これらの制限を超えるカスタムイベントは、Google Analytics によって警告なしに破棄されます。
一部のイベントは、Firebase および Google Analytics の予約済みeコマース語彙(purchase および refund)を使用しています。Google 広告のコンバージョンインポート、Google Analytics の収益レポート、予測オーディエンスはこれらの正確な文字列に依存しています。これらの機能が不要な場合にのみ、デフォルト値を変更してください。
- Save をクリックします。数分以内に Adapty が Firebase へのイベント転送を開始します。
アプリコードの設定
Adaptyが各イベントにFirebase App Instance IDを含める必要があります。これがないとFirebaseにデータが届きません(MISSING_INTEGRATION_ID)。
FirebaseApp.configure()とAdapty.activate()の後、Firebase SDKにApp Instance IDを問い合わせ、setIntegrationIdentifier経由でAdaptyに渡してください。この処理は購入フローの前に、アプリ起動ごとに1回実行してください。
サードパーティSDKはユーザーIDを非同期で生成します。Adapty.activate() の実行時にIDがまだ準備できていない場合があります。Customer User ID がこれらのSDKのいずれかから取得される場合は、IDなしで Adapty.activate() を呼び出してください。IDが取得できたら、setIntegrationIdentifier() を呼び出し、次にCUIDで identify() を呼び出してください。
インテグレーションを確認する
イベントが正しく流れているかを確認する最も手軽な方法は、Firebase DebugView です。
- テストデバイスで、Firebase デバッグモードを有効にした状態でアプリを起動します。
- サンドボックス購入、または Adapty ダッシュボードで有効にしたイベントをトリガーします。
- Firebase Console > Analytics > DebugView を開きます。イベントはすべてのパラメーターとともに数秒以内に表示されます。
リアルタイム、レポート、オーディエンスなどの標準レポートは、レポートの種類に応じて数分〜24時間以内に反映されます。リアルタイムで確認できるのは DebugView だけです。
レポートやオーディエンスでサブスクリプションデータを活用する
Send user properties を Adapty ダッシュボードで有効にしてください(Adapty の設定、手順 4)。これを有効にしないと、Adapty は subscription_state や subscription_product_id を転送しないため、このセクションの内容は機能しません。
デフォルトでは、FirebaseとGoogle Analyticsはユーザープロパティを公開しません。それぞれをカスタムディメンションとして登録することで、subscription_stateとsubscription_product_idがレポート、Explorations、オーディエンスで利用できるようになります。ディメンションはGoogle Analytics管理画面で設定します。FirebaseとGoogle Analyticsはバックエンドを共有しているため、両方でクエリを実行できます。
有料ユーザーのGoogle Adsオーディエンスを構築したり、予測モデルへのデータ供給に役立ちます。
設定が完了すると、Adaptyはそれ以降のイベントにこれらのプロパティを付与します。既存のイベントは更新されません。
- Google Analytics で Admin > Custom definitions を開きます。
- Create custom dimensions をクリックします。
- 各プロパティに以下を設定します:
- Dimension name:人間が読める任意の名前。例:「Subscription state」。
- Scope:User。
- User property:
subscription_stateまたはsubscription_product_id。名前は完全に一致している必要があります。Google Analytics は大文字と小文字を区別します。
トラブルシューティング
Firebaseにイベントが表示されない
- Firebaseアプリインスタンスの ID が、最初の購入が行われる前に設定されていることを確認してください。Firebase IDが設定されていないイベントはFirebaseに届かず、エラーが発生します。
- Firebase ConsoleでリンクされているGoogle Analyticsプロパティがデータストリームと一致していることを確認してください。
- Adaptyに設定した認証情報(IDとシークレット)がプラットフォームと一致していることを確認してください。
access_level_updated がイベントフィードで失敗と表示される
access_level_updated は webhook 専用イベントです。Adapty はこのインテグレーションにこのイベントを送信しません。ただし、Adapty は有効なすべてのインテグレーションに対して結果を記録するため、サポートされていないイベントは失敗として表示されます。
サンドボックスイベントが本番データを汚染する
Adapty はサンドボックスと本番のトランザクションを同じ Firebase プロジェクトに転送します。Firebase の設定 を参照してください — 開発ビルド用に別の Firebase プロジェクトを使うことで、この問題を完全に回避できます。
StoreKit 2 アプリでは Firebase が収益を過小計上する
Firebase は StoreKit 1 のすべての購入に対して in_app_purchase イベントを自動ログに記録します — コード不要です。StoreKit 2 は異なる API を使用しており、Firebase はそれらのトランザクションを認識できません。
その影響として、別の収益パイプラインを持たない SK2 中心のアプリでは、Firebase・Google Analytics・下流のすべての Google 広告キャンペーンで収益が半分以下に過小報告されます。入札の最適化は誤った数値に基づいて動作し、収益レポートには実態の半分しか表示されません。
修正方法:firebase_app_instance_id を Adapty に渡してください(アプリコードの設定を参照)。Adapty は Measurement Protocol を通じて、収益・通貨・プロダクトを含むすべての購入データを転送します。
Adapty アナリティクスと Firebase の数値が一致しない
- StoreKit 2: 最も大きな原因です。Firebase が StoreKit 2 アプリの収益を過少計上するをご覧ください。
- SDK の導入状況: Firebase は、Firebase App Instance ID を送信するアプリからのイベントのみをカウントします。古いアプリバージョンはその呼び出しを行いません。Adapty はそれらのユーザーもカウントしますが、Firebase はカウントしません。
- サンドボックスイベント: Adapty はサンドボックストランザクションも Firebase に転送します。開発ビルドを分離するために、別の Firebase プロジェクトを使用してください。
- 初回起動時の履歴インポート: 既存のサブスクライバーが Adapty SDK を含むビルドを初めて起動すると、Adapty はそのユーザーのストア履歴全体を Firebase に転送し、過去のすべての更新を収益付きの GA4
purchaseとして送信します。Firebase は該当期間において Adapty よりもはるかに多くの収益を報告する場合があります。制限事項をご覧ください。 - サンプリング: Google Analytics Explorations は大規模なデータセットをサンプリングします。サンプリングなしのカウントを確認するには、リアルタイムビューまたは標準レポートをご確認ください。
カスタムイベント名が Google Analytics に拒否される
Google Analytics のイベント名は、40文字以内、英数字とアンダースコアのみ、かつ先頭が英字である必要があります。これらの制限に違反するカスタム Adapty イベントは、ダッシュボードで名前を変更してください。