はじめに
アプリでサブスクリプション(定額課金など)を提供しているのであれば、AppsFlyer上でその申込(課金)と更新を計測することが可能です。
サブスクリプションのイベントを計測することで収益とROIの計算が可能になり、キャンペーン成果の判断が容易になります。また、サブスクリプションに関連するデータを収集することで、どのサブスクリプションメニューがより有益なのか、どのメディアソースがより多くのサブスクリプションユーザーをもたらしているのかを判断することが可能になります。
サブスクリプションイベントの計測方法
AppsFlyerでは、サーバー間(S2S)イベント、アプリ内イベント)(アプリから直接送信、と2種類のサブスクリプションイベント計測方法を用意しています。次の表にあるよう、それぞれの方法に長所と短所がありますので、より適している方法を選択してください。
項目 | サーバー間 | アプリ内イベント |
---|---|---|
アプリへの依存度 |
イベントはお客様のサーバーから送信されるため、アプリが起動されているかどうかには左右されません。 |
イベントはアプリから送信されるため、アプリが起動されている必要があります。 |
イベントをバルクで送信 | はい | No |
実装について |
|
|
データ精度 |
|
|
サブスクリプションユーザーの識別 |
|
|
サーバー間(S2S)サブスクリプションイベント
サーバー間(S2S)でのイベント計測方法を使用すると、リアルタイムもしくはバルクでの計測が可能になります。サーバー間(S2S)イベント計測を実装するには開発バックエンドにてロジックを設計する必要があり、そのバックエンドロジックがサブスクリプションの新規申し込みと更新を管理し、必要に応じてそのイベントをAppsFlyerへ送信することになります。
サブスクリプション機能について
サブスクリプションの支払いは次のいずれかによって処理されます。
- GooglePlay内のAndroidアプリ - Google Play Billing Services
- GooglePlay外のAndroidアプリ - サードパーティの支払い処理プロバイダ(PayPal、Stripeなど)
- iOSアプリ - App Store Billing Services
ヒント
GooglePlay内のAndroid アプリ: Google Play Billing Servicesを使用している場合、サブスクリプションの更新の詳細ついては、Purchases APIに関するドキュメントを参照してください。他の支払いプロバイダについては、各プロバイダへサブスクリプションの通知方法についてお問い合わせください。
iOS アプリ: Appleの提供するサーバー間のステータス更新通知のサービスを利用可能です。このサービスは、リアルタイム通知によってサブスクリプションのステータス更新をサーバーへ送信します。
重要:
Appleのステータス更新通知からのデータには価格情報が含まれないため、開発バックエンド側でロジックを設計し、Appleからの通知サブスクリプションと課金額を一致させる必要があります。
AppsFlyerへのイベント送信
ユーザーによる支払いが完了すると、支払い処理プロバイダはお客様側のバックエンドサービスへ通知し、その通知をもってサブスクリプションがユーザーへ適用されます。一旦お客様のバックエンドサービス側でサブスクリプションの申込/更新がで登録された際に、以下手順を実行する必要があります。
- お客様側のサーバーで、課金額、購読タイプ、ユーザーID、更新時期などの必要なデータを収集。
- お客様側のサーバーから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\",\"renewal\":\"true\"}",
"eventCurrency":"USD",
"ip":"1.0.0.0",
"eventTime":"2018-07-09 4:17:00.000",
"af_events_api" :"true"
}
フォーマットとAppsFlyerへのイベント送信方法の詳細については、サーバ間(S2S)イベントの送信のページをご参照ください。
アプリ内イベントでの計測
サブスクリプション特有の機能を有効化させるために、アプリにてサブスクリプションのステータス確認をしばしば行う必要があります。まさにこの仕組みをAppsFlyerでのサブスクリプションイベント計測に使用し、一旦アプリがサブスクリプションの申込(課金)、更新を認識すればイベントの送信が可能です。
警告
仕様上、もしもユーザーが既にサブスクリプションに申し込んでいるのにアプリを1ヶ月以上起動しなかった場合、その申し込みはイベントとして計測されなくなります。例えば、ユーザーがアプリを起動せずにWeb上でサブスクリプションに申し込んだ場合、申し込み後1ヶ月以上ユーザーがアプリを起動しなければ、そのイベントは計測されません。
アプリ内でのステータス確認
サーバーと通信するか、サブスクリプションに関するデータをプッシュ通知で受け取ることで、アプリはサブスクリプションのステータスを確認することができます。
サブスクリプションのステータスをアプリ内で確認するよう設定するには、以下2つの方法があります。
- アプリ側でサブスクリプションのステータスと関連データ(有効か無効か、購読タイプ、有効期限など)を確認する。
- アプリ側で、サブスクリプションの申込み/更新に関するPush通知を受け取る。
ヒント
Android アプリ:Androidのreal-time developer notificationsを使用することで、更新状況をリアルタイムにアプリ側で受け取れます。
iOS アプリ: AppleのStore kitがpayment queue and transaction observersを提供しており、サブスクリプションの申込みと更新を確認可能です。詳細については、Appleのfinalizing transactionsに関するドキュメントを参照してください。
注意
"Receipt Validation"は、iOSアプリでのサブスクリプションの計測はサポートしていません。
サブスクリプション関連のアプリ内イベントの送信について
アプリ側でサブスクリプションに関するデータを取得した際には、以下手順を実行する必要があります。
- アプリ側でそのサブスクリプションイベントが新規申込みか更新を確認。
- アプリ側で関連するデータ(課金額、content_id,、新規申込み or 更新、など)を取得。
- SDKを使用して、そのサブスクリプションイベントをAppsFlyerへ送信。
サブスクリプションイベントの例
パラメータ名 | タイプ | 値の例 | 説明 |
---|---|---|---|
af_revenue | Float | 200 | サブスクリプションに関連する収益 |
af_currency | string | USD, GBP | 通貨単位 |
af_content_id | string | 092, monthly_subscription | サブスクリプションのプラン名/コード名など |
更新 | boolean | true, false | サブスクリプションが新規購入または更新された時 |
イベントコード例
以下のコードスニペットは、SDKを使用したイベントの設定・送信方法を示しています。
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE, 200);
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD");
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "092");
eventValue.put("renewal",true);
AppsFlyerLib.getInstance().trackEvent(getApplicationContext(),AFInAppEventType.SUBSCRIBE, eventValue);
[[AppsFlyerTracker sharedTracker] trackEvent:(AFEventSubscribe) withValues: @{
AFEventParamRevenue: @200,
AFEventParamCurrency: @"USD",
AFEventParamContentId: @"092",
@"renewal": @TRUE
}];
AppsFlyerTracker.shared().trackEvent(AFEventSubscribe,withValues: [
AFEventParamRevenue: 200,
AFEventParamCurrency: "USD",
AFEventParamContentId: "092",
"renewal": true
]);
Dictionary<string, string> SubscriptionEvent = new Dictionary<string, string>();
SubscriptionEvent.Add("af_revenue", "200");
SubscriptionEvent.Add("af_currency", "USD");
SubscriptionEvent.Add("af_content_id", "092");
SubscriptionEvent.Add("renewal", "true");
AppsFlyer.trackRichEvent("af_subscribe", SubscriptionEvent);
注意
各サブスクリプションのイベントを個々のユーザーに結びつけることを強くお勧めします。そのためには、Customer User IDの設定を徹底してください。Customer User IDを設定することで、AppsFlyer上で表示されているデータと御社側の顧客を一致させることが可能です。Customer User IDを設定することで、サブスクリプション関連のイベントも含む全てのイベントが、Customer User IDと一緒に送信されるようになります。