[レガシー] サブスクリプション計測 — サーバー間イベント

概要:サーバー間(S2S)イベントを実装して、サブスクリプション(新規および更新)を計測し、必要に応じてそのサブスクリプションイベントをAppsFlyerに送信しましょう。
注:これはレガシー機能(旧版)です。新しい完全に自動化 / 改善されたサブスクリプション収益計測の実装をご覧ください。

サーバー間 (S2S) サブスクリプションイベント

サーバー間(S2S)イベント計測を実装するには開発バックエンドにてロジックを設計する必要があります。そのバックエンドロジックがサブスクリプション (新規/更新) を管理し、必要に応じてそのイベントをAppsFlyerへ送信します。

サブスクリプション通知をサーバー間イベントでAppsFlyerに送信する

デフォルトでは、AppsFlyerはアプリストアからサブスクリプションの購入や更新の通知を受け取りません。このセクションでは、各アプリストアとのサーバー接続を設定し、サーバー間(S2S) イベントとしてAppsFlyerにサブスクリプション情報を送信する方法についてご説明します。

Android iOS

Androidでのサブスクリプションは、アプリまたはサーバーレベルで管理できます。アプリレベルでは、コミュニケーションはGoogle Play Billing Libraryを介して行われます。サーバーレベルでは、Google Play Developer APIを介して行われます。推奨されるサブスクリプションの管理方法は、Google Play Developer APIを介す方法です。この記事では、この方法について説明します。

ステップ1:サブスクリプションに関する通知を受信するためのサーバーエンドポイントを設定する

Google Cloudからサブスクリプションに関する通知を受信するためのサーバーエンドポイントを作成します。次に、リアルタイムディベロッパー通知を有効にします。

  1. サブスクリプションのステータス更新に使用するサーバー上のURLエンドポイントを決定します。例:https://myserver/subscription-notifications
  2. Google Cloud Platform (GCP) プロジェクトで、Cloud Pub/Subを設定します。
  3. Androidアプリのリアルタイムディベロッパー通知を有効にします

ステップ2:リアルタイムのサブスクリプション通知を処理する

通知を受信するサーバーエンドポイントを設定したら、これらの通知を処理するためのロジックを記述します。デフォルトでは、Googleは subscriptionIdpurchaseToken と一緒に Pub/Sub を通じて通知を送信します。この通知メッセージには、実際のサブスクリプションについての関連情報が含まれていません。購入トークンを取得し、Google Play Developer API の purchases.subscriptions にリクエストを送信する必要があります。

サブスクリプションの通知には次の内容が含まれています:

{
	"version": string,
	"packageName": string,
	"eventTimeMillis": 1578509686,
	"subscriptionNotification": SubscriptionNotification,
	"testNotification": AppsFlyerTest
}

サブスクリプション通知には、SubscriptionNotification というオブジェクトがあります。これには以下が含まれています。

{
	"version": 1.0,
	"notificationType": 4,
	"purchaseToken": 0f43308f-bf3f-4fa1-8aef-d515c941334b,
	"subscriptionId": 123456789
}

purchaseToken は、Google Play Developer API の purchases.subscriptions がサブスクリプションに関するデータを取得するために必要なトークンです。

subscriptionId は、データベースに格納する値で、これはAppsFlyer IDと紐づけるべきIDです。

ステップ3:データベース上でサブスクリプションをAppsFlyer IDとGAIDと紐づける

サブスクリプションに関するデータを受信したら、サブスクリプションIDとAppsFlyer ID、そしてGAIDと紐づける必要があります。AppsFlyer IDはサーバーを介してイベントをAppsFlyerに送信する上で必須のパラメーターです。サーバー間イベントを送る際に、GAIDを含めることを強く推奨しています。そうすることで、AppsFlyerはイベントポストバックをSRN(セルフレポーティングネットワーク)側に送ることができます。また、これによりAppsFlyerのオーディエンス機能を使用することもできるようになります。AppsFlyer IDとGAIDは、次のいずれかの方法で取得できます。

Androidのサブスクリプション計測フロー

サブスクリプション計測フローについては、次のフローチャートを参照してください。

google-play-server-notifications-flow.png

 

AppsFlyerにイベントを送信する

この時点で、サブスクリプションステータス変更(購入、更新、キャンセル)について通知を受け取り、それをAppsFlyer IDに紐づけました。ここで、次のことを確認してください。

  1. サーバーがイベントに関する必要なデータを取得していること。これらのデータには、以下が含まれます:収益、サブスクリプションタイプ、サブスクリプションID (Appleからのデータでいう item_id)、AppsFlyer ID、更新時刻。推奨されるマッピング(以下のコードスニペットを参照):
    • af_revenue: revenue
    • af_content_type: subscription type
    • af_content_id: subscription ID (Appleからのデータでいう item_id)
    • renewal: true/false (サブスクリプションステータス変更に応じて)
    • eventTime: サーバーに通知が届いた時刻
  2. イベントタイプ(購入、更新、キャンセル)に基づいて、サーバーはAppsFlyerに、すべての関連データと一緒にサブスクリプションとしてイベントを送信します。

フォーマットとイベント送信

サブスクリプションイベントのリクエスト例:

HTTP POST https://api2.appsflyer.com/inappevent/<APP_ID>
HTTP/1.1
headers:
{
  authentication: '<YOUR_DEV_KEY>',
  Host: 'api2.appsflyer.com',
  Accept: 'application/json',
  'Content-Type': 'application/json'
}
body: 
{
  "appsflyer_id":"<APPS_FLYER_ID>",
  "customer_user_id":"123456",
  "eventName":"af_subscribe",
  "eventValue":"{\"af_revenue\":\"200\",\"af_content_id\":\"092\", \"af_content_type\": \"123\", \"renewal\":\"true\"}",
  "eventCurrency":"USD",
  "ip":"1.0.0.0",
  "eventTime":"2018-07-09 4:17:00.000",
  "af_events_api":"true"
}

フォーマットとAppsFlyerへのイベント送信方法の詳細については、サーバ間(S2S)イベントの送信をご参照ください。