重要提示!
此对接适用于已部署Google Analytics for Firebase SDK implemented的iOS和Android应用。 为确保对接成功,AppsFlyer SDK必须从Firebase SDK收集app_instance_id值。请参见相关说明,了解如何从FirebaseSDK 获取应用实例ID。
工作原理
-
发生新的激活时,AppsFlyer会将触点详情(媒体渠道、广告活动名称和广告活动ID)发送至GA4。同时还会发送Firebase SDK的
app_instance_id,确保该用户的触点被GA4记录。 - 发生应用内事件时,GA4会将该事件归因于最后触点。
设置Google Analytics (GA4)对接
按照以下说明配置与Google Analytics (GA4)的对接。
1. 在Partner Marketplace中选择Google Analytics (GA4)
2. 在AppsFlyer中设置GA4对接
请进行以下设置:
-
进入渠道对接选项卡,选择需要对接的应用,并打开启用该渠道开关。
注意:在您与该渠道合作期间,请确保该开关始终处于打开 (启用)状态。
有关渠道激活的详细说明请参见此文档。
- 在Firebase应用ID中输入Firebase应用标识符。如需查找Firebase应用ID,请参见Firebase文档。
- 在API Secret字段中,输入用于验证发送至Google Analytics回传的API Secret。API Secret可通过Google Analytics界面生成。如需查看、编辑或创建Secret,请按照Google文档中的说明操作。当提示您选择web数据流时,应选择Android或iOS数据流。
- 开启客户用户ID以发送客户用户ID(CUID),而不是广告ID(IDFA)。
-
在默认回传部分,在来自(for users from)中选择所有媒体来源,包括自然流量。
注意
激活回传仅包含触点详情(媒体渠道、广告活动名称和广告活动ID)。
3. 应用内事件回传
在对接选项卡中,将AppsFlyer应用内事件映射到Google Analytics(GA4)事件,并通过回传发送。
注意
- 目前暂不支持通过S2S发送的移动应用内事件回传。
- GA4不会对同时来自Firebase SDK和AppsFlyer的事件进行去重。因此,建议仅为尚未通过Firebase SDK发送至GA4的事件配置应用内事件回传。
- 打开应用内事件回传开关。
-
点击添加事件,将SDK事件或S2S事件添加到列表中。下表列出了必须配置的字段:
参数名称 说明 AppsFlyer事件 事件的名称,即AppsFlyer从SDK侧接收到的事件名称或来自S2S事件的名称。
提示:如果下拉菜单中没有您要查看的事件:
- 请确保以非自然方式激活应用,并完成该事件,然后再次检查该事件是否在列表中。
- 在AppsFlyer事件中输入该事件的名称,然后点击创建自定义事件。
详情请见自定义事件映射。
渠道映射事件 渠道侧为每个事件定义的专属名称或ID。映射配置包括以下几种:
- 文本字段: 从渠道处获取相应的事件ID。
- 下拉菜单: 选择最合适的AppsFlyer预定义事件。
- 按原样:按原样发送事件,不进行名称映射。
事件来源 选择事件回传的范围:
- 所有媒体渠道,包括自然流量:回传所有带量渠道的事件,以及自然量。
回传内容 - 不发送值与收入(默认): 仅发送事件本身,不带任何事件值。
- 值和收入: 发送所有事件参数,包括收入(若有)。
- 仅发送值: 发送除收入以外的所有参数。
- 【可选】点击添加条件图标 (
),设置事件的映射条件。
- 点击保存对接。
- 发送事件回传映射
4. 将事件回传映射发送给您的开发者
设置应用内事件映射后,请向您的开发人员发送一个表格,每个映射事件对应一行,包含以下列:
- AF event:AppsFlyer事件名称。
-
Mapped to Google event:Google Analytics中的事件名称。
重要提示!
请勿使用任何Google保留事件为自定义Google Analytics事件命名。
-
AF event parameters(必填):发送至Google Analytics的事件回传中必须包含的预定义AppsFlyer事件参数。
重要提示!
事件定义中必须准确包含表中所列的所有预定义AF事件参数;否则,Google Analytics将拒绝回传。
事件映射表
下表列出了所有Google Analytics事件及其对应的预定义AppsFlyer参数。请仅将您实际完成映射的事件整理成表格,并发送给开发人员。
Google保留事件名称
以下事件名称是保留的,不能用作自定义事件名称:
ad_activeviewad_clickad_exposuread_queryad_rewardadunit_exposureapp_clear_dataapp_exceptionapp_installapp_removeapp_store_refundapp_updateapp_upgradedynamic_link_app_opendynamic_link_app_updatedynamic_link_first_openerrorfirebase_campaignfirebase_in_app_message_actionfirebase_in_app_message_dismissfirebase_in_app_message_impressionfirst_openfirst_visitin_app_purchasenotification_dismissnotification_foregroundnotification_opennotification_receivenotification_sendos_updatesession_startuser_engagement
5. 在AppsFlyer SDK中检索应用实例ID
应用实例ID(app instance ID)用于标识Firebase应用的某一次具体安装。该数值需要由AppsFlyer SDK从Firebase SDK中获取。
请让开发人员实现以下代码逻辑:
- 从Firebase收集
app_instance_id字段。 - 在首次启动前调用
setAddiotionalData,将应用实例ID包含在激活、打开以及应用内事件中。
Kotlin
FirebaseAnalytics.getInstance(this).appInstanceId.addOnCompleteListener { task ->
if (task.isSuccessful) {
AppsFlyerLib.getInstance().setAdditionalData("app_instance_id", task.result)
}
}
java
FirebaseAnalytics.getInstance(this).getAppInstanceId().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
AppsFlyerLib.getInstance().setAdditionalData("app_instance_id", task.getResult());
}
});
API reference: setAdditionalData
iOS原生
let appInstanceId = Analytics.appInstanceID()
AppsFlyerLib.shared().customData = ["app_instance_id": appInstanceId]
Objective C
(void) fetchAnalyticsInstanceId {
NSString *instanceID = [FIRAnalytics appInstanceID];
[[AppsFlyerLib shared] setAdditionalData:@{@"app_instance_id": instanceID}];
}
API reference: customData
using Firebase.Analytics;
public class AnalyticsManager : MonoBehaviour
{
private async void Start()
{
AppsFlyer.initSDK(devKey, appID, this);
string appInstanceId = await FirebaseAnalytics.GetAnalyticsInstanceIdAsync();
Dictionary <string, string> customData = new Dictionary<string, string>();
customData.Add("app_instance_id", appInstanceId);
AppsFlyer.setAdditionalData(appInstanceId);
AppsFlyer.startSDK();
}
}
API reference: setAdditionalData
API reference: setAdditionalData
6. 在AppsFlyer SDK中检索GA4应用打开ID
GA4应用打开IDga_session_id用于标识Firebase应用的某一次应用打开。该数值必须由AppsFlyer SDK从Firebase SDK中获取,并通过setAdditionalDataAPI发送至GA4。
请让开发人员实现以下代码逻辑:
- 从Firebase收集
ga_session_id字段。 - 在首次启动前调用
setAdditionalData,将会话ID包含在数据中。 - 调用API时使用密钥
ga_session_id。
Kotlin
FirebaseAnalytics.getInstance(this).sessionId.addOnCompleteListener { task ->
if (task.isSuccessful) {
AppsFlyerLib.getInstance().setAdditionalData("ga_session_id", task.result)
}
}
java
FirebaseAnalytics.getInstance(this).getSessionId().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
AppsFlyerLib.getInstance().setAdditionalData("ga_session_id", task.getResult());
}
});
API reference: setAdditionalData
Swift
if #available(iOS 14.0, *) {
Analytics.sessionID { sessionID, error in
if let sessionID = sessionID {
AppsFlyerLib.shared().customData = ["ga_session_id": sessionID]
}
}
}
Objective-C
- (void)fetchAnalyticsSessionId {
if (@available(iOS 14.0, *)) {
[FIRAnalytics sessionIDWithCompletion:^(NSString * _Nullable sessionID, NSError * _Nullable error) {
if (sessionID) {
[[AppsFlyerLib shared] setAdditionalData:@{@"ga_session_id": sessionID}];
}
}];
}
}
API reference: customData
using Firebase.Analytics;
using System.Threading.Tasks;
using AppsFlyerSDK;
using UnityEngine;
using System.Collections.Generic;
public class AnalyticsManager : MonoBehaviour
{
private async void Start()
{
AppsFlyer.initSDK("yourDevKey", "yourAppID", this);
// Get session ID
string sessionId = await FirebaseAnalytics.GetSessionIdAsync();
Dictionary<string, string> customData = new Dictionary<string, string>();
customData.Add("ga_session_id", sessionId);
AppsFlyer.setAdditionalData(customData);
AppsFlyer.startSDK();
}
}
API reference: setAdditionalData
7. 验证GA4对接
确保您发送到GA4的事件回传已被Google Analytics记录和读取。广告主可以通过以下两种方式查看数据: