概要:サーバー間(S2S)イベントを実装して、サブスクリプション(新規および更新)を計測し、必要に応じてそのサブスクリプションイベントをAppsFlyerに送信しましょう。
注:これはレガシー機能(旧版)です。新しい完全に自動化 / 改善されたサブスクリプション収益計測の実装をご覧ください。
サーバー間 (S2S) サブスクリプションイベント
サーバー間(S2S)イベント計測を実装するには開発バックエンドにてロジックを設計する必要があります。そのバックエンドロジックがサブスクリプション (新規/更新) を管理し、必要に応じてそのイベントをAppsFlyerへ送信します。
サブスクリプション通知をサーバー間イベントでAppsFlyerに送信する
デフォルトでは、AppsFlyerはアプリストアからサブスクリプションの購入や更新の通知を受け取りません。このセクションでは、各アプリストアとのサーバー接続を設定し、サーバー間(S2S) イベントとしてAppsFlyerにサブスクリプション情報を送信する方法についてご説明します。
Androidでのサブスクリプションは、アプリまたはサーバーレベルで管理できます。アプリレベルでは、コミュニケーションはGoogle Play Billing Libraryを介して行われます。サーバーレベルでは、Google Play Developer APIを介して行われます。推奨されるサブスクリプションの管理方法は、Google Play Developer APIを介す方法です。この記事では、この方法について説明します。
ステップ1:サブスクリプションに関する通知を受信するためのサーバーエンドポイントを設定する
Google Cloudからサブスクリプションに関する通知を受信するためのサーバーエンドポイントを作成します。次に、リアルタイムディベロッパー通知を有効にします。
- サブスクリプションのステータス更新に使用するサーバー上のURLエンドポイントを決定します。例:https://myserver/subscription-notifications
- Google Cloud Platform (GCP) プロジェクトで、Cloud Pub/Subを設定します。
- Androidアプリのリアルタイムディベロッパー通知を有効にします。
ステップ2:リアルタイムのサブスクリプション通知を処理する
通知を受信するサーバーエンドポイントを設定したら、これらの通知を処理するためのロジックを記述します。デフォルトでは、Googleは subscriptionId
と purchaseToken
と一緒に 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のサブスクリプション計測フロー
サブスクリプション計測フローについては、次のフローチャートを参照してください。
- サブスクリプションステータスの変更に関する通知を受信。
- サブスクリプションをAppsFlyer IDとGAIDに紐づける。
- サブスクリプションに関するイベントをAppsFlyerに送信。
Apple はこのサービスを Server-to-Server notifications と呼んでいます。このサービスは、自動更新できるサブスクリプションのためにデザインされました。Apple Storeはリアルタイムでサブスクリプションステータス変更の通知を送信します。これらの通知とそのデータを使用して、サブスクリプションに関するイベントをAppsFlyerに送信できます。
ステップ1:サブスクリプションに関する通知を受信するためのサーバーエンドポイントを設定する
POSTリクエストを受信するサーバーエンドポイントを設定します。エンドポイントは次のように設定してください。
- サーバー上でApp Transport Security (ATS) をサポートします。通知を送信する前に、App Storeは ATSプロトコルを使用してサーバーと安全なネットワーク接続を確立する必要があります。詳細は、安全でないネットワーク接続の防止をご覧ください。
- サブスクリプションのステータス更新に使用するサーバー上のURLエンドポイントを決定します。例:https://myserver/subscription-notifications
- App Store Connectにて、アプリのサブスクリプションステータスURLを設定します。ガイドについては、Enable status notifications for auto-renewable subscriptions (自動更新サブスクリプションのステータス通知を有効化する) を参照してください。
ステップ2:サーバーエンドポイントをアプリに接続する
エンドポイントが設定できたら、App Store ConnectのSubscription Status URL 項目に、サーバーURLを入力します。
ステップ3:通知を受信し、データベース上でAppsFlye IDとIDFAに紐づける
これで、Appleからサブスクリプションについての通知を受信する準備ができました。次のサンプル通知を参照してください:
{
"latest_receipt": "ewoXXXXX",
"latest_receipt_info": {
"original_purchase_date_pst": "2019-07-29 21:13:18 America/Los_Angeles",
"quantity": "1",
"unique_vendor_identifier": "XXX",
"original_purchase_date_ms": "1564459998000",
"expires_date_formatted": "2019-08-06 04:13:17 Etc/GMT",
"is_in_intro_offer_period": "false",
"purchase_date_ms": "1564459997000",
"expires_date_formatted_pst": "2019-08-05 21:13:17 America/Los_Angeles",
"is_trial_period": "true",
"item_id": "1452171111",
"unique_identifier": "00000",
"original_transaction_id": "0000000",
"expires_date": "00000000",
"app_item_id": "0000000",
"transaction_id": "00000000",
"bvrs": "00000",
"web_order_line_item_id": "00000000",
"version_external_identifier": "000000",
"bid": "com.XXX",
"product_id": "XXXXX",
"purchase_date": "2019-07-30 04:13:17 Etc/GMT",
"purchase_date_pst": "2019-07-29 21:13:17 America/Los_Angeles",
"original_purchase_date": "2019-07-30 04:13:18 Etc/GMT"
},
"environment": "PROD",
"auto_renew_status": "true",
"password": "*****",
"auto_renew_product_id": "com.XXXX",
"notification_type": "INITIAL_BUY"
}
重要!
Appleのステータス更新通知からのデータには価格情報が含まれないため、開発バックエンド側でロジックを設計し、Appleからの通知サブスクリプションと課金額を一致させる必要があります。
このデータを使用して、AppsFlyerにサブスクリプションイベントに関するデータを送信します。そのためには、サブスクリプションをAppsFlyer IDとIDFAに紐づける必要があります。サーバー間イベントを送る際に、IDFAを含めることを強く推奨しています。そうすることで、AppsFlyerはイベントポストバックをSRN(セルフレポーティングネットワーク)側に送ることができます。また、これによりAppsFlyerのオーディエンス機能を使用することもできるようになります。
AppsFlyer IDとIDFAは、次のいずれかの方法で取得できます。
iOSサブスクリプション計測フロー
サブスクリプション計測フローについては、次のフローチャートを参照してください。
- サブスクリプションステータスの変更に関する通知を受信。
- サブスクリプションをAppsFlyer IDとIDFAに紐づける。
- サブスクリプションに関するイベントをAppsFlyerに送信。
AppsFlyerにイベントを送信する
この時点で、サブスクリプションステータス変更(購入、更新、キャンセル)について通知を受け取り、それをAppsFlyer IDに紐づけました。ここで、次のことを確認してください。
- サーバーがイベントに関する必要なデータを取得していること。これらのデータには、以下が含まれます:収益、サブスクリプションタイプ、サブスクリプション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: サーバーに通知が届いた時刻
- イベントタイプ(購入、更新、キャンセル)に基づいて、サーバーは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)イベントの送信をご参照ください。