概要:本文介绍了AppsFlyer ROI360应用内购买和订阅收入衡量解决方案,该产品可自动验证并衡量应用内购买和自动续订事件产生的收入,帮助广告主更全面地了解其用户的生命周期,并准确衡量ROAS数据。
ROI360应用内购买(IAP)和订阅收入衡量方案
广告主可以通过已验证的应用内购买(IAP)和订阅收入来衡量以下数据:
- 所有通过App Store Connect(iOS)或Google Play Console(安卓)管理的应用内商品购买和订阅收入。
- 退款。
- 未完成交易及延期交易的收入(安卓)。
- 在相关应用内或应用外发生的订阅相关事件。
该IAP和订阅收入解决方案还能用于:
- 确保AppsFlyer记录到的交易数据中没有重复。在iOS中,该方案还能确保家庭共享型交易不会被重复记录。
- 将Apple App Store的交易数据通过AppsFlyer发送给广告主。
- 呈现净收入数据,即剔除商店抽成和税费之后的净收入。
这些购买和订阅数据来自:
- 专用于购买事件的AppsFlyer purchase SDK connector(分安卓和iOS,含Unity wrapper)
- 发送到AppsFlyer的App Store和Google Play(RTND实时开发者通知)服务器通知
您可以通过AppsFlyer面板和报告获取购买和订阅收入的数据,也可以通过回传将这些数据共享给合作渠道。
注意事项:
- 如果您使用此IAP和订阅收入衡量解决方案,则不应发送应用内购买事件或执行 ValidateAndLoginAppP urchase,因为这样做会导致重复的收入报告。
- 现有订阅用户打开带有Purchase SDK connector的应用版本后,订阅收入衡量功能即可开始记录该用户的生命周期变化。
链路
- 用户完成一次应用内购买或自动续订。
- 该应用在应用商店中完成一次交易。
- AppsFlyer purchase SDK connector自动检测购买事件,并将该事件的有效信息(payload)发送到AppsFlyer进行验证和记录。
-
AppsFlyer会与相关的商店验证该次购买,以确保交易信息的真实性。
- 验证成功后,AppsFlyer会记录该次购买或订阅。
- 如果收据验证失败,则该事件会显示在被拦截的应用内事件原始数据报告中(需购买Protect360)。
- AppsFlyer将商店的响应消息发送到SDK connector,然后SDK connector会将收据验证的响应消息(成功或失败)发送到应用。
-
所有传入AppsFlyer的服务器通知都会按照我们的购买和订阅收入逻辑进行处理:
- 对于之前已经由SDK connector上报的交易,我们会对其相关通知进行验证和处理,并在系统内部生成一个购买事件或生命周期事件。
- 与未知交易相关的通知会被忽略。
- 对于iOS平台的所有服务器通知,您可以更改其发送路径,将其发送到您自己的服务器。
启用方式
如需接入并设置ROI360应用内购与订阅收入衡量方案,请按照这篇指南文档中的说明进行操作。
详细说明
以下各章节分别解释了ROI360应用内购买(IAP)和订阅收入衡量方案的各个方面,包括:与应用内购和订阅有关的事件和参数、净收入(帮助广告主基于毛收入计算净收入的一项功能)以及该产品的总体特征和局限性。
与IAP相关的事件和参数
以下几个小节分别说明了AppsFlyer所衡量的各个IAP相关事件及其参数。如需了解这些参数的含义,请参考事件参数详解部分。
生成的所有事件:
- 都被视为S2S事件。
- 会呈现在原始数据报告中(记录为自然或非自然应用内事件)。
- 可以通过回传发送给合作渠道。
- 可以在SKAN转化值操作台中使用。
请注意:一个应用内事件中可能会有部分参数得不到填充,具体取决于用户设备的操作平台。
购买(af_purchase)
说明
用户完成购买时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_revenue
- af_net_revenue
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
- af_net_revenue_factors
免费购买(af_purchase_free)
说明
用户完成不带收入金额的购买时记录该事件,此时所有收入参数都显示0值。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_revenue
- af_net_revenue
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
- af_net_revenue_factors
已取消的购买(af_purchase_canceled)
说明
用户取消购买时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
尚未完成的购买(af_purchase_pending)
说明
用户下单但未完成付款时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
退款(af_purchase_refund)
说明
购买交易退款时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_discount_type
- event_revenue_usd
- event_revenue(收入超过零时事件中会带有该参数)
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
用于测试的购买(af_purchase_sandbox_sdk)
说明
在沙盒环境中测试SDK记录到的购买时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_purchase_state
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_net
- af_sandbox_revenue
用于测试的购买(af_purchase_sandbox_s2s)
说明
在沙盒环境中测试S2S上报的购买时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_purchase_state
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_net
- af_sandbox_revenue
与订阅相关的事件和参数
以下几个小节分别说明了AppsFlyer所衡量的各个订阅相关事件及其参数。如需了解这些参数的含义,请参考事件参数详解部分。
生成的所有事件:
- 都被视为S2S事件。
- 会呈现在原始数据报告中(记录为自然或非自然应用内事件)。
- 可以通过回传发送给合作渠道。
- 可以在SKAN转化值操作台中使用。
请注意:一个应用内事件中可能会有部分参数得不到填充,具体取决于用户设备的操作平台。
开始试用(af_ars_trial_started)
说明
订阅用户的试用期开始时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
取消试用(af_ars_trial_canceled)
说明
订阅用户在试用期内取消自动续订时记录该事件。如果用户后续未在试用期内恢复自动续订,还会记录用户流失事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
试用后流失 (af_ars_trial_churned)
说明
订阅用户在试用期结束后流失时记录该事件。用户的试用期结束,且该用户取消了自动续订时,即视为发生了试用后流失事件。这类事件之前可能发生了与续订有关的计费或技术问题,进而导致用户流失。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_reason
试用后转化(af_ars_trial_converted)
说明
用户完成试用后全价续订时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_discount_id
- af_discount_type
- event_revenue_usd
- store_commission
- af_revenue(仅在收入超过零时,事件中才会带有该参数)
- af_net_revenue
- af_net_revenue_factors
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
套餐生效(af_ars_subscription_started)
说明
用户以折扣价或全价订阅的套餐生效时记录该事件。
请注意:
- 新增的套餐订阅事件只能通过SDK connector记录。
- 对于iOS应用,如果某个订阅用户重复订阅现有套餐,SDK connector会向相关应用上报一个收据验证成功事件,但不会在AppsFlyer中记录新增交易。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_discount_id
- af_discount_type
- event_revenue_usd
- event_revenue(收入超过零时事件中会带有该参数)
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
订阅已取消(af_ars_subscription_canceled)
说明
用户在计费周期内取消自动续订时记录该事件。如果用户后续未在同一个计费周期内恢复自动续订,还会记录用户流失事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
订阅已暂停(af_ars_subscription_paused)- 仅适用于安卓应用
说明
用户暂停已生效的套餐时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
订阅已恢复(af_ars_subscription_resumed)
说明
用户流失或套餐发生退款后,以全价订阅套餐重新生效时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_discount_id
- af_discount_type
- af_reason
- event_revenue(事件收入超过零值时,相关事件中会带有该参数)
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
订阅用户流失(af_ars_subscription_churned)
说明
订阅用户流失时记录该事件。一般情况下,当用户的计费周期结束,或用户取消自动续订时,说明该订阅用户发生了流失。这类事件之前可能发生了与续订有关的计费或技术问题,进而导致用户流失。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_reason
订阅已退款(af_ars_subscription_refunded)
说明
向订阅用户退款发出时记录该事件。
请注意:
- 该事件通常带有负值。如果AppsFlyer无法识别出发生退款的交易,或服务器通知中未包含退款详情,则相关退款事件不会显示事件值。
参数
- app_id
- customer_user_id
- af_reason
- af_subscription_ownership_type
- af_discount_id
- af_discount_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_refunded_transaction_ids
- event_revenue_usd
- event_revenue(收入超过零时事件中会带有该参数)
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_store
- af_environment
- af_period_type
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
- af_net_revenue_tax_name
- af_net_revenue_tax_rate
- af_net_revenue_tax_exclusive
- af_net_revenue_country
- af_net_revenue_subdivision
- af_net_revenue_postal_code
订阅计费宽限期(af_ars_subscription_billing_grace)
说明
若出现支付问题导致续订失败,相关订阅用户进入计费宽限期时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- Af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- Af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
订阅已更新(af_ars_subscription_renewed)
说明
订阅自动续费时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_discount_id
- af_discount_type
- event_revenue_usd
- event_revenue(收入超过零时事件中会带有该参数)
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
订阅已变更(af_ars_subscription_xgraded)
说明
用户订阅的产品发生升级、降级或变更时记录该事件。
参数
- app_id
- customer_user_id
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_discount_id
- af_discount_type
- event_revenue_usd
- event_revenue(收入超过零时事件中会带有该参数)
- store_commission
- af_revenue
- af_net_revenue
- af_net_revenue_factors
现有订阅用户(af_ars_existing_subscriber)
说明
SDK connector针对处于计费周期内的订阅用户收到通知,但尚未收到后续通知要将此用户转移至生命周期的其它阶段时,即会生成该事件。该事件通常会在ROI360方案的启用期间以及SDK connector的采纳期间生成。
参数
- app_id
- customer_user_id
- country
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_cuids
- af_validated
用于测试的购买 (af_ars_sandbox_sdk)
说明
在沙盒环境中测试SDK记录到的购买时记录该事件。
参数
- app_id
- customer_user_id
- country
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_discount_id
- af_discount_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_cuids
- af_validated
- af_net
- af_sandbox_revenue
用于测试的购买 (af_ars_sandbox_s2s)
说明
在沙盒环境中测试S2S上报的购买时记录该事件。
参数
- app_id
- customer_user_id
- country
- af_currency
- af_expires_date_ms
- af_subscription_ownership_type
- af_discount_id
- af_discount_type
- af_original_transaction_id
- af_order_id
- af_purchase_token
- af_transaction_id
- af_product_id
- android_id
- idfa
- ip
- appsflyer_id
- af_purchase_date_ms
- af_store
- af_environment
- af_period_type
- af_cuids
- af_validated
- af_net
- af_sandbox_revenue
参数详解
在原始数据中,IAP和订阅事件的参数会单独成列显示,或以事件值的形式呈现。
单独成列的参数如下:
- app_id
- customer_user_id
- country_code
- af_currency
- event_revenue_usd
- af_revenue
- android_id
- ip
- idfa
- appsflyer_id
如需进一步了解这些参数的详细信息,请参考原始数据字段释义文档。
下表列出了ARS(自动续订)和VIAP(经验证的应用内购买)事件中可用的原始数据参数。
参数 | 说明 | 产品 |
---|---|---|
af_cancelation_date_ms | 取消日期 | IAP |
af_reason |
|
|
af_expires_date_ms | 当前订阅周期的截止日期。 | 订阅 |
af_subscription_ownership_type | 若字段值为FAMILY_SHARED,表示该用户通过家人共享套餐获取访问权限。 若字段值为PURCHASED,表示付费用户完成了一次购买。 | 订阅 |
af_discount_id | 在首次购买过程中呈现给用户的优惠ID。只有在使用优惠码时才会填充该ID。 |
|
af_discount_type | 用户领取的优惠类型。可用值包括:
|
订阅 |
af_original_transaction_id |
|
|
af_order_id |
|
|
af_purchase_token |
|
|
af_transaction_id |
|
|
af_purchase_state | 可用值包括:
|
IAP |
af_original_transaction_id |
|
|
af_refunded_transaction_ids |
|
|
af_product_id | 相关订阅产品的ID |
|
af_purchase_date_ms | 报告中与产品ID应用内事件相关联的购买日期。 |
|
af_store | 指用户购买订阅产品时使用的应用商店 |
|
af_environment | 数据接收环境,可能出现的值为production(生产环境)和sandbox(沙盒环境)两种。 |
|
af_period_type |
|
订阅 |
store_commission |
|
|
af_net_revenue | 根据所有相关因素计算得出的净收入。详情请见af_net_revenue_factors说明。 |
|
af_net_revenue_factors |
|
|
af_net_revenue_tax_name |
|
|
af_net_revenue_tax_rate |
|
|
af_net_revenue_tax_exclusive |
|
|
af_net_revenue_country |
|
|
af_net_revenue_subdivision |
|
|
af_net_revenue_postal_code |
|
|
af_cuids |
|
订阅 |
净收入
净收入(Net revenue)衡量是AppsFlyer ROI360应用内购买和订阅收入解决方案中的一层业务逻辑。对于AppsFlyer接收到的每一笔交易信息,该功能都会实时自动计算净收入值,并将这些数据纳入报告中。净收入衡量逻辑会按以下因素根据总收入计算净收入:
-
商店抽成:
- AppsFlyer会自动计算和上报该信息,您无需完成任何操作。
- 购买交易的商店抽成比例为30%。
- 订阅交易的商店抽成比例根据订阅用户的生命周期,分用户自动计算,(App Store:初始抽成30%,一年后降至15%;Play Store:抽成15%)。
- 原始数据报告中会呈现相关的净收入参数。
-
税费:
- ROI360对于其衡量范围内的所有交易都会按默认税率上报税费数据。
- 该因素适用于标价中含税的国家。以英国为例,如果应用商店向终端用户收取10英镑,则计算净收入时会自动扣除20%的税,显示为8英镑(£8)。对于美国等标价中不含税国家,收入和净收入参数默认不包含税费的计算。
- 您可以使用这个税费专用的Tax API更改税率配置。请参考此处的JSON文件示例,其中包含所有适用的国家/地区及其默认税率。开发人员可以在示例文件的基础上进行修改,或直接按原样在API中使用该文件。
下表列出了包含净收入数据的参数,便于您在报告中查看真实收入。详情请见参数详解部分。
参数 | 净收入因素 |
---|---|
store_commission | 商店抽成 |
af_net_revenue_tax_name | 税费 |
af_net_revenue_tax_rate | 税费 |
af_net_revenue_tax_exclusive | 税费 |
af_net_revenue_postal_code | 税费 |
af_net_revenue_country | 税费 |
af_net_revenue_subdivision | 税费 |
af_net_revenue |
|
af_net_revenue_factors |
|
特点与局限性
维度 | 产品 | 说明 |
---|---|---|
记录激活并进行匿名化处理 |
|
不支持 |
新增订阅 | 订阅收入 | 仅通过AppsFlyer Purchase SDK记录 |
价格变动 | 订阅收入 | 对于订阅收入,如果AppsFlyer没有接收到带有新价格的SDK通知,则会持续上报之前的价格,将其记录为收入。AppsFlyer接收到Purchase SDK发出的新价格后,即会记录新价格。 |
总收入 |
|
支持 |
净收入 |
|
仅在原始数据中呈现该信息 |
税费 | 订阅收入 | 支持 |
净收入商店抽成 |
|
|
退款 | IAP | 上报窗口期为初始购买发生后的180天内。 |
数据去重 |
|
事件发生日期后180天内上报的交易可进行去重。 |
SDK严格模式 |
|
对于以下版本的SDK connector,AppsFlyer在SDK严格模式下仍支持ROI360订阅和IAP解决方案:
|
货币 |
|
收入数据以实际货币(通过event_revenue参数)和美元(通过event_revenue_usd参数)为单位上报。 |
数据时效性 |
|
|