概要: 设置 AppsFlyer ROI360 应用商店收入解决方案。
概览
注意
如需了解有关 ROI360 的更多信息(包括其工作原理以及如何在 AppsFlyer 中启用该功能),请参阅《关于 ROI360 商店收入》。
要设置 ROI360 店铺收入,请按以下顺序完成以下步骤:
- 设置商店凭据(iOS 和 Android):
- iOS在 AppsFlyer 中配置 App Store Connect 密钥(应用内购买密钥、密钥 ID 和发行者 ID)。
- 安卓配置一个 Google Cloud 服务账户,在 Google Play 控制台中设置所需权限,并将服务账户的 JSON 密钥上传至 AppsFlyer。
- 配置服务器通知(iOS 和 Android):
- iOS设置 App Store 服务器通知,可通过直接将通知发送至 AppsFlyer(推荐)或从您自己的端点转发通知,并验证集成是否成功。
- 安卓设置 Google Play 实时开发者通知 (RTDN),方法包括允许 Google Play 直接向 AppsFlyer 发送通知(推荐),或通过 Pub/Sub 转发通知。
- 实现 SDK 连接器:帮助开发者做好集成 AppsFlyer 购买 SDK 连接器的准备。
- 验证 SDK 实现:在两个平台上测试应用内购买和订阅功能,以确认 AppsFlyer 能正确接收并处理 SDK 事件和服务器通知。
- 验证并更新设置:审查并确认购买验证、退款处理、订阅统计和商店集成等环节的状态,以确保跨平台收入归因的准确性和持续性。
- 应用版本:发布已集成 SDK Connector 的更新版应用,确保已禁用沙盒标记,且验证规则允许所需的收入事件。
步骤2(iOS):设置App Store Connect密钥
在步骤1中,从App Store Connect获取以下凭据,并填写在AppsFlyer后台的收入设置页面中:
- In-App Purchase key
- Key ID
- Issuer ID
前期准备 :
设置证书时,您需要在App Store Connect和AppsFlyer中分别完成相关步骤。请在操作过程中同时打开App Store Connect和AppsFlyer两个标签页。
1.1 生成App Store Connect密钥
要设置iOS凭据, 请按照以下步骤操作:
-
在App Store Connect中,进入用户和访问权限页面
-
前往用户和访问权限> 对接,在密钥列表中,选择应用内购买。
-
点击+生成一个新的应用内购买密钥。
- 输入您的API密钥名称。
- 点击生成。
- 在生成的密钥旁边,点击下载应用内购买密钥。 注意:该密钥只能下载一次,请妥善保存。
-
在App Store Connect中,复制生成的密钥的Key ID,并将其粘贴到AppsFlyer购买和订阅设置中的Key ID字段里。
-
复制发行者 ID。 注意: 如果页面顶部未显示Issuer ID,请创建一个App Store Connect API私钥(具有任意权限级别)。之后,Issuer ID将出现在应用内购买私钥的页面顶部。
1.2 在AppsFlyer中设置App Store Connect密钥
- 启用 ROI360 商店收入。
- 在“App Store Connect 密钥”步骤下,点击
“应用内购买”密钥字段中的“上传”按钮,上传 p8 文件。
-
在名为App Store Connect密钥的部分,粘贴您从App Store Connect复制的值。
- Key ID
- Issuer ID
- 点击验证密钥,确保密钥输入正确。 注意:如果您的应用尚未在App Store中发布,验证密钥可能无法正常工作。
- 点击保存并继续。
步骤 2(Android):设置服务账户密钥和权限
请从App Store Connect获取以下凭据,并填写在AppsFlyer后台的收入设置页面中:
前期准备 :
- 设置应用内购买和订阅收入衡量时,您需要在Google Cloud Platform、Google Play Console以及AppsFlyer界面中分别完成相关操作。建议您在设置过程中同时打开以上三个标签页。
- 在AppsFlyer后台进行设置需具备管理员权限。
1.1.将您的Google Play开发者账号关联到您的Google Cloud项目
前期准备:Google Play Console和Google Cloud访问权限。
请按照以下步骤将您的Google Play开发者账号关联到您的Google Cloud项目:
- 从Google Play Console进入您的Google Play开发者账号。
- 将该账号关联到您的Google Cloud项目。详细指南请参考Google提供的说明文档。
-
启用Google Play Developer API。详细指南请参考Google提供的说明文档。
1.2.在Google Cloud Platform中配置您的服务账户
前提条件:访问Google Cloud Platform。
要配置您的服务帐户,请按照以下步骤操作:
- 创建或找到服务账号:
-
在Google Cloud Platform中,前往Service accounts(服务账号)部分,点击“Create Service Account(创建服务账号)”。
-
填写服务账号的详细信息。
-
复制电子邮件地址。
-
点击Create and continue(创建并继续),进入下一步。
-
在Grant this service account access to the project(为该服务账号开放项目权限)部分的“Select a role”(选择角色)字段中,选择Pub/Sub subscriber。
-
点击Continue > Done,完成服务账号的创建。
-
- 下载服务账号私钥:
- 在Google Cloud Platform中,进入Service accounts(服务账号)部分,从列表中找到你刚创建的服务账号,点击“更多操作”图标。
-
点击“管理私钥(Manage keys)”。
-
点击 添加私钥 > 创建新私钥。
-
在创建私钥窗口中,
在 -
私钥类型下,选择JSON,然后单击创建。
点击Create,下载JSON格式的密钥文件。
- 保存JSON私钥文件,稍后您需要将该文件将上传至AppsFlyer。 请注意:请务必保存密钥,关闭窗口后将无法再次获取。如未保存,您需要重新创建新密钥。
1.3.在Google Play Console中设置API访问权限。
前提条件:Google Play Console访问权限。
注意:服务账号的证书和权限设置完毕后,可能需要等待一段时间(有时可达24小时),然后才能正常使用。在此期间你可能会在后续步骤中遇到报错。
在Google Play Console中设置API访问权限的操作如下:
-
在Google Play Console中,进入Users and permissions(用户和权限),找到您创建的服务账号并点击Invite new users(邀请新用户)。
-
在Email address(邮箱地址)字段中,填写您在第1.2.1.3步创建服务账号时复制的邮箱地址。
-
在Permissions(权限)部分,进入Account permissions(账号权限)选项卡,然后同时勾选以下两项:
- View financial data, orders, and cancellation survey responses(查看财务数据、订单和取消订阅问卷答复)
- Manage orders and subscriptions(管理订单和订阅)
-
在App permissions(应用权限)标签页中,点击Add app(添加应用),然后选择应用。如有需要可添加多个应用。
-
点击Invite user(邀请用户)。
-
在确认弹出窗口中,点击Send invite(发送邀请)。
1.4.将服务账户私钥上传到AppsFlyer。
上传并验证您在步骤 1.2中下载的 Google JSON 密钥。
前提条件:具备AppsFlyer管理员权限。
要将账户私钥上传到 AppsFlyer,请按照以下步骤操作:
- 启用 ROI360 商店收入。
- 在服务账户私钥和权限步骤中,在上传Google JSON密钥字段里,单击
upload-2.png 上传图标。
- 上传您在步骤 1.2中下载的JSON文件。
- 点击验证密钥。 请注意:
- 设置服务账号凭据和权限后,最多可能需要 24 小时才能生效。在此期间进行密钥验证或验证测试时可能会出现错误。
- 如需绕过最长 24 小时的等待时间,可在Google Play Console中打开任意应用,进入Monetize > Products > Subscriptions/In-app products,并对某项内容进行修改(如编辑商品描述并保存)。该操作将立即刷新账号凭据和权限。修改完成后可撤销操作。
- 单击保存并继续。
步骤2(iOS):设置App Store服务器通知
在步骤2中,设置通过AppsFlyer接收App Store通知的方式。
- 如果您已在 App Store Connect 中配置了 App Store 服务器通知端点(例如,您自己的后端或另一项服务),请在选项 1(推荐)和选项 2 之间进行选择。
- 如果您尚未在 App Store Connect 中配置端点,请选择选项 1。
选项 1(推荐)——将 AppsFlyer 设为主要终点
将现有的 App Store Connect 通知 URL 替换为 AppsFlyer 端点,并在 AppsFlyer 中将您之前的端点添加为转发目标。您当前的订阅逻辑和工作流保持不变,并将继续按预期运行。
此选项的通知流程如下:
- App Store Connect 会向 AppsFlyer 发送通知
- AppsFlyer 会为 ROI360 处理这些数据
- AppsFlyer 会将所有通知实时转发至您的现有端点
选项 2 - 将您的终点设为主要终点
如果您希望保留现有端点作为主要接收端,请将服务器配置为将 App Store 服务器通知转发至 AppsFlyer。
若要使用此选项,请跳过步骤 2.1 和 2.2,并完成步骤 2.3 和 2.4
2.1 复制AppsFlyer服务器通知端点
要复制AppsFlyer服务器通知端点,请按照以下步骤操作:
- 在AppsFlyer中,在App Store服务器通知步骤,复制AppsFlyer服务器通知端点。
- 如果您之前已拥有另一个 App Store 服务器通知端点,并希望 AppsFlyer 将通知转发至该端点,请选择“将通知副本转发至您的服务器”(仅适用于选项 1)。
- 在弹出的文本框中输入您的通知转发端点。
直接将通知发送到AppsFlyer:
若要将通知直接发送至 AppsFlyer,请将 AppsFlyer 设置为 App Store 服务器通知的主要端点。
-
在App Store Connect中,进入App Information部分,向下滚动至App Store Server Notifications,在Production Server URL右侧点击Edit。
-
粘贴从AppsFlyer复制的AppsFlyer服务器通知端点,选择版本2通知,然后点击 保存。 注意:系统已不再支持版本1通知。如果 Apple Store Connect 中未显示“通知版本”选择器,则说明您已使用第 2 版。
-
进入App Information部分,向下滚动至App Store Server Notifications,在Sandbox Server URL右侧点击Edit。
-
粘贴从AppsFlyer复制的AppsFlyer服务器通知端点,选择版本2通知,然后点击 保存。注意:系统已不再支持版本1通知。如果 Apple Store Connect 中未显示“通知版本”选择器,则说明您已使用第 2 版。
2.3 [可选]将通知从您的端点转发到 AppsFlyer
仅当您希望将端点保留为 App Store 服务器通知的主要接收端(而非直接将通知发送至 AppsFlyer)时,才需执行此步骤。
此选项并非推荐的配置方案,且需要进行后端实现。如果您已在上述第 2.2 步中将 AppsFlyer 配置为主端点,请跳过此步骤。
要将服务器通知从您的端点转发到AppsFlyer,请按照以下步骤操作:
-
在App Store Connect中,进入App Information部分,向下滚动至App Store Server Notifications,在Production Server URL右侧点击Edit。
-
粘贴您的服务器端点URL。
- 选择版本2通知。请注意: 系统已不再支持版本1通知。如果 Apple Store Connect 中未显示“通知版本”选择器,则说明您已使用第 2 版。
- 点击Save保存。
-
同样在App Store Connect的App Information部分,找到Sandbox Server URL,点击Edit。
-
粘贴您的服务器端点URL。
- 选择版本2通知。请注意: 系统已不再支持版本1通知。
- 点击Save保存。
- 请配置您的后端,将 Apple 服务器通知转发至 AppsFlyer 通知端点 URL。请求必须与从 Apple 接收到的 App Store 有效负载完全一致,请参阅 Apple 的格式要求。
2.4 测试服务器通知集成
若要确认 AppsFlyer 是否正确接收了 App Store 服务器通知,或者如果您最近配置了端点但尚未收到任何服务器通知:
- 在 AppsFlyer 中,进入“App Store 服务器通知”步骤。
-
点击“测试集成”。AppsFlyer 会向 Apple 发送一条测试通知请求,并检查过去 7 天内是否收到过 Apple 发来的有效通知,随后显示以下其中一项:
- 确认是否已收到有效通知。
- 一条状态消息,表示未找到任何通知。
注意
Apple 可能需要几秒钟才能发送测试消息。
- 如果状态仍显示为无效,请稍等片刻后再试一次。
- 测试成功后,或者当您准备继续时,请点击“保存并下一步”。
步骤 2(Android):设置Google Play服务器通知
要接收来自Google Play 的应用内购买和订阅收入数据,可选择以下两种方式之一:
- 【推荐】由Google Play直接向AppsFlyer发送通知若选择此方式,通知副本将不会转发至你的端点。如果您想选择此选项,可以查看直接将 Google Play通知发送到AppsFlyer。
- Google Play先将通知发送给您,再由您转发至AppsFlyer。如果您选择此选项,请查看将Google Play通知转发到AppsFlyer。
前提条件:Google Play Console以及AppsFlyer后台访问权限。
2.1将Google Play通知直接发送至AppsFlyer的操作如下:
- 在 AppsFlyer 中,在第 2 步“设置 Google Play 服务器通知”中,请选择“允许 AppsFlyer 主题直接从 Google 接收 RTDN 消息”。
- 将AppsFlyer topic复制到剪贴板。
-
在Google Play Console > 主页中,选择查看您的应用程序。打开面板。
-
前往Monetize with Play > Monetization setup,在Google Play Billing部分,确认已勾选Enable real-time notification(启用实时通知)
-
在Topic name(主题名称)字段中,粘贴您复制的AppsFlyer topic地址。
-
在Notification content部分选择Subscriptions, voided purchases, and all one-time products(订阅、作废的购买交易以及所有一次性付费产品)。
- 点击Save Changes,保存更改。设置可能需要一些时间才能生效(最长可达24小时),请等待设置生效后再进行测试。
1.6. 【或者】将Google Play的通知转发给AppsFlyer
注意:如果你已选择推荐方式(即由Google Play直接将通知发送至AppsFlyer)来接收应用内购买和订阅收入数据,请跳过此步骤。此步骤仅适用于未使用推荐方法的情况。如果你已完成推荐方式中的相关设置,即创建了由AppsFlyer直接接收Google Play RTDN通知的topic,请跳过此步骤。
如需将AppsFlyer设置为现有Pub/Sub topic的订阅者,请按照以下说明操作。
前提条件:Google Cloud Platform及AppsFlyer后台访问权限。
【或者】1.6:将Google Play的通知转发给AppsFlyer
- 在AppsFlyer平台中,从侧边菜单选择设置 > 收入设置。
- 选择您的应用,
- 在购买与订阅标签中,选择将您的RTDN主题消息转发到AppsFlyer。
- 将端点URL复制到剪贴板。
-
进入Google Cloud Platform,在相关项目下搜索Pub/Sub。
-
进入Pub/Sub的Topics部分,确认您有一个专用于订阅的pub/sub topic。
-
进入Pub/Sub的Subscriptions部分,点击Create subscription。
-
输入Subscription ID。
-
从下拉列表中选择相关订阅的pub/sub主题。
-
在Delivery type(发送方式)部分中,选择Push(推送)。
-
粘贴从AppsFlyer复制的端点 URL。
-
在Expiry period(期限)部分,选择Never expire(永不过期)。
-
点击Create,
-
进入Subscriptions部分,点击您选择的Topic name(主题名称)。
-
将主题名称复制到剪贴板。
-
从Google Play Console进入Monetization setup> Monetization setup.,在Google Play Billing部分中,将前一步中复制的topic名称粘贴到Topic name字段中。
-
在Notification content部分选择Subscriptions, voided purchases, and all one-time products(订阅、作废的购买交易以及所有一次性付费产品)。
- 点击保存更改。设置可能需要一些时间才能生效(最长可达24小时),请等待设置生效后再进行测试。
2.3 从 Google Play 控制台发送测试通知
要验证 AppsFlyer 是否正确接收了 Google Play 实时开发者通知 (RTDN),请从 Google Play 控制台发送一条测试通知:
-
点击“发送测试通知”。这将向为 AppsFlyer 配置的 Pub/Sub 主题发送一条测试 RTDN 消息。
altimage (9).png
- 在“Google Play 计费”下,找到“主题名称”部分。
- 在左侧菜单中,导航至“通过 Play 变现”→“变现设置”。
- 前往 Google Play 控制台。
2.4 在 AppsFlyer 中确认通知送达情况
- 测试成功后,或者当您准备继续时,请点击“保存并下一步”。
- 结果:AppsFlyer 会显示过去 7 天内是否收到过任何通知。
- 如果操作成功,界面将显示最近一条通知的日期和时间。
- 如果未收到任何通知,界面将显示过去7天内未发现任何通知。
- 如果未显示状态,请检查您的 Pub/Sub 配置,然后重新发送测试通知。
- 在“Google Play 服务器通知”步骤中,点击“测试集成”。
第3步:部署SDK connector
在此步骤中,您需要请开发人员对AppsFlyer Purchase SDK connector进行对接,并配置沙盒环境以进行测试。
部署SDK connector的操作步骤如下:
- 在“实施 SDK 连接器”步骤中,复制仪表盘中显示的预设消息。
- 将其发送给您的开发人员。包括:
- 应用名称和App ID
- SDK对接指南链接。
- 沙盒环境配置说明 (
sandbox = true) - 测试步骤(使用TestFlight)
此处包含了开发人员进行对接和测试所需的全部信息。
注意
该连接器使用自动事务检测。作为另一种方法,您可以调用 SDK 方法validateAndLog来手动记录每笔交易。此方法不支持连接器提供的所有功能。有关这两种 SDK 集成选项的详细信息,请参阅 DevHub 文档。
第4步:验证 SDK 的实现
建议在沙盒环境中测试IAP和订阅收入对接,确保SDK connector已正确接入到相关应用中,且服务器通知的配置正确无误,AppsFlyer可正常收到通知。
测试 SDK 实现
若要查看 AppsFlyer 在过去 7 天内是否已收到来自您应用的有效购买和订阅事件数据包,请按照以下步骤操作:
- 在“验证 SDK 实现”步骤中,点击“测试 SDK 实现”。
-
查看结果,包括 AppsFlyer 接收到的最新有效负载的时间戳。
注意
此测试仅用于确认请求已成功发送至 AppsFlyer,并不验证数据的完整性或准确性。
- 要全面验证该实现,请继续执行以下测试步骤。
沙盒事件和参数
- SDK 连接器仅针对初始沙箱事务生成事件:
- 应用内购买
- 订阅
- AppsFlyer 仅在原始交易的 SDK 事件已被记录的情况下,才会处理服务器通知。
- In-App Purchase key
- 订阅 S2S:
af_ars_sandbox_s2s
- 如果 SDK 从未记录原始交易,则不会创建 S2S 事件。
iOS 注意事项
- 如果
af_purchase_sandbox_sdk包含af_sandbox_revenue,则它映射到一个生产规则af_purchase。 -
af_purchase_free如果没有收入,则映射到生产环节。
关于 Android 的注意事项
- 许可证测试者的购买操作始终会触发沙盒事件,即使 SDK 中未配置沙盒模式。
测试事件的必填参数
请确保每个沙盒购买事件包含:
- 收入 = 0(以免影响实际报表)。
-
af_sandbox_revenue= 实际产品价格(以便正确核算收入)。 -
True请
false返回并核对商店密钥。 -
af_validation_typeaf_validation_type
测试应用内购买(IAP)和订阅收入数据
前提条件:
-
对于iOS应用,请确保App Store connect中“App Store Server Notifications”(应用商店服务器通知)部分下的Sandbox Server URL(沙盒服务器地址)配置为AppsFlyer端点。
测试应用内购买和订阅收入:
- 请让您的开发人员按照安卓、 iOS和Unity的专用说明在SDK connector中配置沙盒环境。
- 在 Google Play 中使用“许可证测试工具”进行试购或订阅。对于 iOS 设备,请使用 TestFlight。请注意:每台设备仅可对订阅产品进行一次测试。实际上,一台设备无法对同一项订阅进行多次测试购买。后续尝试将不予记录。
- 使用Google Play中的License Tester或iOS中的TestFlight,进行测试退款、订阅续订或取消订阅的操作。请注意:如果您正在测试订阅类产品,请预留足够的时间,以便 AppsFlyer 接收来自应用商店的服务器通知——该通知通常会在首次购买完成后几分钟内发送。
- 在“Verify SDK 连接器实现”步骤下,点击“测试 SDK 实现”。该指标显示过去 7 天内是否成功接收到了来自 Purchase Connector 的任何 SDK 有效载荷。
-
请确保测试事件以以下其中一种方式显示:
- 在“实时事件查看器”中查看该事件。
- 请确认该事件是否显示在 AppsFlyer 活动仪表盘中。在 AppsFlyer 中,进入“分析”>“活动”,在“活动趋势”图表中,打开“应用内事件”选项卡,然后选择要测试的事件。自动续订的订阅购买称为
af_ars_s2s_sandbox.该事件具有以下特征:- 收入值为0(避免AppsFlyer的实际报告数据受到扭曲)。
- 一个
af_sandbox_revenue包含所购产品收入值的参数,以确保报告的收入准确无误。
第5步:验证并更新设置
完成上述设置的配置并保存最后一步后,系统将自动跳转至当前配置视图,您可以在该视图中验证或更新以下设置:
- 请确保“通过 App Store 验证购买”开关已开启。
- 在购买中检查以下选项:
- 防止重复计算,确保数据准确性:避免记录已被上报的交易。
- 自动衡量退款、取消和负收入:对退款相关事件进行统计,并将其记录为负收入。
- 消除家庭共享带来的误差:避免因家庭共享导致收入被重复计算。这些事件会被标记为并报告为零收入。
- 请确保“为自动续订订阅测量并计入收入”开关已开启:
- 以下设置的状态:
- App Store 密钥设置
- 服务器通知端点的设置
- 实施并测试 SDK 连接器
第6步:发布已对接SDK connector的应用版本
完成前述所有配置并将AppsFlyer的purchase SDK connector集成至应用后,请通知开发人员发布集成后的新版本应用。
但在发布前,请确保以下事项已处理:
- 您在AppsFlyer中配置的验证规则不会拦截您想要记录的IAP或订阅事件。
- 您的开发人员已将所有沙盒标签设置为“false”。
一旦包含SDK connector的应用版本发布,相关的应用内购买和订阅事件将开始生成,并出现在所有AppsFlyer面板中,以及汇总数据和原始数据报告(包括Revenue ETL)中。
注意: 仅当用户更新至包含SDK connector的应用版本后,事件才会开始生成。因此,在更新后的应用版本被全面采用之前,预计应用的收入数据与商店数据之间会出现差异。
切换至 ROI360 店铺收入(来自收据验证)
如果您已完成“收据验证”的入门设置,但希望启用 ROI360 Store 收入产品,请执行以下操作:
- 在AppsFlyer中,从左侧菜单进入
settings-roi.png设置,在ROI360下选择收入设置。
- 打开购买与订阅标签页。出现一条横幅提示,显示ROI360已可用但尚未激活。
- 点击“查看产品对比”,了解相关优势,包括退款归因、净收入报告以及完整的订阅生命周期衡量。
- 点击“激活 ROI360”。
- 执行“启用 App Store 服务器通知”步骤。如需了解更多信息,请参阅“设置 App Store 服务器通知”或“设置 Google Play 服务器通知”。
- 在“购买与订阅”部分,请确认“产品类型”现已设置为 ROI360。
- 请检查您当前的 SDK 配置,以确保其能够支持您所需的 ROI360 Store 收入功能。
注意
ROI360 Store 的收入支持两种集成方式:购买 SDK 连接器,并进行验证和日志记录。在这两者中,我们建议使用“Purchase SDK Connector”,以便享受以下优势:
- 自动交易检测
- 现有订阅用户(整合前已订阅的用户)的收入核算
- 支持订阅价格变更,确保在价格更新时能够准确报告收入。
如果您不需要这些功能,可以继续使用“验证和日志记录”集成。
如何查看您的 SDK 集成方式
要确认您的应用是否使用“购买 SDK 连接器”或“验证和记录”功能:
- 转到“集成 SDK 连接器”步骤。
- 点击“测试 SDK 集成”。您将看到过去 7 天内 AppsFlyer 接收到的最新 SDK 数据包的时间,以及该数据包是来自“购买 SDK 连接器”还是“验证和日志记录”。