AppsFlyer
AppsFlyer 是领先的移动归因和营销分析平台。它作为一项第三方服务,负责收集和整理来自营销活动的数据,帮助企业在一个平台上全面了解各活动的表现。
Adapty 提供完整的数据集,让您可以在一处跟踪来自各应用商店的订阅事件。借助 Adapty,您可以轻松了解订阅者的行为,掌握他们的喜好,并将这些信息用于精准、有效的用户沟通。因此,此集成支持您在 AppsFlyer 中跟踪订阅事件,精确分析各营销活动所产生的收益。
Adapty 与 AppsFlyer 之间的集成通过以下两种主要方式运作。
- 从 AppsFlyer 接收归因数据
在您的应用代码中完成将 AppsFlyer 归因数据发送至 Adapty 的配置后,Adapty 即可开始从 AppsFlyer 接收归因数据。您可以在用户画像页面轻松查看这些数据。
- 向 AppsFlyer 发送订阅事件
Adapty 可以将您在集成中配置的所有订阅事件发送到 AppsFlyer。这样,您就可以在 AppsFlyer 看板中跟踪这些事件。此集成有助于评估广告活动的效果。
配置设置
将 Adapty 连接到 AppsFlyer
要设置与 AppsFlyer 的集成:
-
在 Adapty 看板中打开 Integrations -> AppsFlyer。
-
打开开关以启用集成。
-
接下来需要填写凭据。
对于 iOS,请在 App Store Connect 中找到并复制 Apple ID(操作方法:在 App Store Connect 中打开您的应用页面,进入 General 部分的 App Information 页面,在屏幕左下方找到 Apple ID)。
3.2. 将复制的 Apple ID 粘贴到 Adapty 看板的 iOS App ID 字段中。
如果您使用的是 AppsFlyer API 2,需要切换到 API 3,因为旧版本即将被 AppsFlyer 弃用。请在 AppsFlyer S2S API 列表中选择 API 3。
-
对于 iOS 和 Android,请打开 AppsFlyer 网站并登录。
-
点击看板右上角的您的账户名 -> Security Center。
-
在 Manage your account security 窗口中,点击 Manage your AppsFlyer API and S2S tokens 按钮。
-
如果您已有 S2S token,请跳至第 12 步。如果没有,请点击 New token 按钮。
-
在 New token 窗口中,输入 token 的名称。此名称仅供您参考。
-
在 Choose type 列表中选择 S2S。
-
点击 Create new token 按钮保存新 token。
-
在 Tokens 窗口中,复制 S2S token。
-
在 Adapty 看板中,将复制的 S2S key 粘贴到 Dev key for iOS 和 Dev key for Android 字段中。
-
点击 Save 按钮保存更改。
AppsFlyer 的服务器到服务器集成不支持沙盒模式。因此,您需要在 AppsFlyer 中为沙盒 Dev Key 使用不同的应用/账户。如果您希望将沙盒事件发送到同一个应用,只需对生产环境和沙盒环境使用相同的 key 即可。
Adapty 默认将部分事件映射到 AppsFlyer 标准事件。通过这种配置,AppsFlyer 无需额外设置即可将事件转发至您使用的各广告网络。
另外需要注意的是,AppsFlyer 不支持 26 小时以前的事件。因此,如果某个事件距今超过 26 小时,Adapty 仍会将其发送到 AppsFlyer,但该事件的日期和时间将被替换为当前时间戳。
配置事件和标签
在凭据下方,有三组事件可供您从 Adapty 发送到 AppsFlyer。只需开启您需要的事件即可。在此处查看 Adapty 提供的完整事件列表。
我们建议使用 Adapty 提供的默认事件名称,但您也可以根据需要修改事件名称。
Adapty 将通过服务器到服务器集成向 AppsFlyer 发送订阅事件,使您可以在 AppsFlyer 看板中查看所有订阅事件,并将其与您的广告获客活动关联。
将您的应用连接到 AppsFlyer
完成上述步骤后,调用 updateAttribution 方法保存归因数据,并使用 Adapty.setIntegrationIdentifier() 设置集成标识符。
networkUserId 参数为必填项。
事件结构
Adapty 通过 POST 请求以 JSON 格式向以下地址发送所选事件:
- API v2:
https://api2.appsflyer.com/inappevent/{app_id} - API v3:
https://api3.appsflyer.com/inappevent/{app_id}(推荐)
每个事件的结构如下:
{
"appsflyer_id": "1699887556000-6192770",
"eventName": "subscription_renewed",
"eventTime": "2024-03-01 12:00:00",
"eventValue": "{\"af_content_id\":\"yearly.premium.6999\",\"af_order_id\":\"GPA.3383-4699-1373-07113\",\"store_country\":\"US\",\"profile_country\":\"US\",\"af_content_type\":\"in_app\",\"af_revenue\":\"9.9900\",\"af_currency\":\"USD\",\"af_quantity\":\"1\"}",
"os": "17.0.1",
"bundleIdentifier": "com.example.app",
"customer_user_id": "user_12345",
"eventCurrency": "USD",
"ip": "192.168.100.1",
"advertising_id": "00000000-0000-0000-0000-000000000000",
"idfa": "00000000-0000-0000-0000-000000000000",
"idfv": "00000000-0000-0000-0000-000000000000",
"att": "3"
}
参数说明:
| 参数 | 类型 | 描述 |
|---|---|---|
appsflyer_id | String | AppsFlyer ID(通过 SDK 收集)。 |
eventName | String | AppsFlyer 事件名称(从 Adapty 事件映射而来)。 |
eventTime | String | 事件的日期和时间(UTC,格式为 YYYY-MM-DD HH:MM:SS)。 |
eventValue | String | 包含事件详情的 JSON 字符串(见下文)。 |
os | String | 操作系统版本。 |
bundleIdentifier | String | 应用的 bundle ID / 包名。 |
customer_user_id | String | 用户的 Customer User ID。 |
eventCurrency | String | 货币代码(如 “USD”)。 |
ip | String | 用户的 IP 地址。 |
advertising_id | String | 仅限 Android。Google Advertising ID。 |
idfa | String | 仅限 iOS。广告标识符(ID for Advertisers)。 |
idfv | String | 仅限 iOS。供应商标识符(ID for Vendors)。 |
att | String | 仅限 iOS。App 跟踪透明度状态(如 “3” 表示已授权)。 |
eventValue 参数是一个 JSON 编码字符串,包含以下字段:
| 参数 | 类型 | 描述 |
|---|---|---|
af_content_id | String | 应用商店中的产品 ID。 |
af_order_id | String | 原始交易 ID。 |
store_country | String | 应用商店用户所在国家/地区代码。 |
profile_country | String | 基于用户 IP 的国家/地区代码。 |
af_content_type | String | 如有收益则始终为 in_app。 |
af_revenue | String | 收益金额,格式化为 4 位小数。 |
af_currency | String | 货币代码。 |
af_quantity | String | 如有收益则始终为 1。 |
故障排查
收益数据差异
如果 Adapty 和 AppsFlyer 之间存在收益数据差异,可能是因为并非所有用户都在使用包含 Adapty SDK 的应用版本。为确保数据一致性,您可以强制用户升级到包含 Adapty SDK 的应用版本。
缺少集成数据
如果事件发送失败,通常是由于缺少集成数据。请确认以下几点以解决此问题:
- 您的应用已安装 AppsFlyer SDK。
- 您正在调用
getAppsFlyerUID方法。
认证失败
如果控制台出现 Failed to authenticate 错误,可能是由于 AppsFlyer 版本与凭据版本不匹配导致的。