Google Analytics (GA4) 对接

概要:广告主可以借助AppsFlyer与Google Analytics (GA4)的对接,将归因数据及部分选定的应用内事件从AppsFlyer发送至GA4。此对接适用于已部署Google Analytics for Firebase SDK的iOS和Android应用。

 重要提示!

此对接适用于已部署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)

前提条件: 设置对接前,请务必先联系该渠道并在其平台上开设账户。

请按以下方式启用或修改该对接:

  1. 启用方式: 从AppsFlyer的侧边栏中选择协作 > Partner Marketplace修改方式:从AppsFlyer面板左侧的菜单栏中选择协作 > 活跃对接
  2. 搜索并选择Google Analytics (GA4)
  3. 点击设置对接,界面会跳转到对接设置页。

Google Analytics配置仅包括对接选项卡。

请点击此处查看渠道配置页Header的详细描述。

2. 在AppsFlyer中设置GA4对接

请进行以下设置:

  1. 进入渠道对接选项卡,选择需要对接的应用,并打开启用该渠道开关。

    注意:在您与该渠道合作期间,请确保该开关始终处于打开 (启用)状态。

    有关渠道激活的详细说明请参见此文档

  2. Firebase应用ID中输入Firebase应用标识符。如需查找Firebase应用ID,请参见Firebase文档
  3. API Secret字段中,输入用于验证发送至Google Analytics回传的API Secret。API Secret可通过Google Analytics界面生成。如需查看、编辑或创建Secret,请按照Google文档中的说明操作。当提示您选择web数据流时,应选择Android或iOS数据流。
  4. 开启客户用户ID以发送客户用户ID(CUID),而不是广告ID(IDFA)。
  5. 默认回传部分,在来自(for users from)中选择所有媒体来源,包括自然流量

     注意

    激活回传仅包含触点详情(媒体渠道、广告活动名称和广告活动ID)。

3. 应用内事件回传

对接选项卡中,将AppsFlyer应用内事件映射到Google Analytics(GA4)事件,并通过回传发送。

 注意

  • 目前暂不支持通过S2S发送的移动应用内事件回传。
  • GA4不会对同时来自Firebase SDK和AppsFlyer的事件进行去重。因此,建议仅为尚未通过Firebase SDK发送至GA4的事件配置应用内事件回传。
  1. 打开应用内事件回传开关。
  2. 点击添加事件,将SDK事件或S2S事件添加到列表中。下表列出了必须配置的字段:

    参数名称 说明
    AppsFlyer事件

    事件的名称,即AppsFlyer从SDK侧接收到的事件名称或来自S2S事件的名称。

    提示:如果下拉菜单中没有您要查看的事件:

    • 请确保以非自然方式激活应用,并完成该事件,然后再次检查该事件是否在列表中。
    • AppsFlyer事件中输入该事件的名称,然后点击创建自定义事件

    详情请见自定义事件映射

    渠道映射事件

    渠道侧为每个事件定义的专属名称或ID。映射配置包括以下几种:

    • 文本字段: 从渠道处获取相应的事件ID。
    • 下拉菜单: 选择最合适的AppsFlyer预定义事件。
    • 按原样:按原样发送事件,不进行名称映射。
    事件来源

    选择事件回传的范围:

    • 所有媒体渠道,包括自然流量:回传所有带量渠道的事件,以及自然量。
    回传内容
    • 不发送值与收入(默认): 仅发送事件本身,不带任何事件值。
    • 值和收入: 发送所有事件参数,包括收入(若有)。
    • 仅发送值: 发送收入以外的所有参数。
  3. 【可选】点击添加条件图标 (condition-2.png),设置事件的映射条件
  4. 点击保存对接
  5. 发送事件回传映射

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参数。请仅将您实际完成映射的事件整理成表格,并发送给开发人员。

 

AF推荐名称(可选) Google Ads事件名称 预定义AF事件参数(必填)
af_add_payment_info add_payment_info af_currency, af_revenue, af_price, af_content_id, af_content
  add_shipping_info af_currency, af_revenue, af_price, af_content_id, af_content
af_add_to_cart add_to_cart af_currency, af_revenue, af_price, af_content_id, af_content
af_add_to_wishlist add_to_wishlist af_currency, af_revenue, af_price, af_content_id, af_content
af_initiated_checkout begin_checkout af_currency, af_revenue, af_price, af_content_id, af_content
  campaign_details campaign id, campaign name
af_spent_credits earn_virtual_currency af_revenue
  generate_lead af_currency,af_revenue
  join_group  
af_level_achieved level_up  
af_login login  
  post_score af_user_score
af_purchase purchase af_currencyaf_revenueaf_priceaf_content_idaf_contentaf_receipt_id
  refund af_currencyaf_revenueaf_priceaf_content_idaf_contentaf_receipt_id
  remove_from_cart af_currency, af_revenue, af_price, af_content_id, af_content
  screen_view  
af_search search  
  select_content  
  select_item af_price, af_content_id, af_content
  select_promotion af_price, af_content_id, af_content
  share  
  sign_up  
  spend_virtual_currency af_revenue
  tutorial_begin  
af_tutorial_completion tutorial_complete  
af_achievement_unlocked Unlock_achievement af_achievement_id
  view_cart af_currency, af_revenue, af_price, af_content_id, af_content
  view_item af_currency, af_revenue, af_price, af_content_id, af_content
  view_item_list af_price, af_content_id, af_content
  view_promotion af_currency, af_revenue, af_price, af_content_id, af_content
  view_search_results  
af_ad_view ad_impression af_currencyaf_revenue

Google保留事件名称

以下事件名称是保留的,不能用作自定义事件名称:

  • ad_activeview
  • ad_click
  • ad_exposure
  • ad_query
  • ad_reward
  • adunit_exposure
  • app_clear_data
  • app_exception
  • app_install
  • app_remove
  • app_store_refund
  • app_update
  • app_upgrade
  • dynamic_link_app_open
  • dynamic_link_app_update
  • dynamic_link_first_open
  • error
  • firebase_campaign
  • firebase_in_app_message_action
  • firebase_in_app_message_dismiss
  • firebase_in_app_message_impression
  • first_open
  • first_visit
  • in_app_purchase
  • notification_dismiss
  • notification_foreground
  • notification_open
  • notification_receive
  • notification_send
  • os_update
  • session_start
  • user_engagement

5. 在AppsFlyer SDK中检索应用实例ID

应用实例ID(app instance ID)用于标识Firebase应用的某一次具体安装。该数值需要由AppsFlyer SDK从Firebase SDK中获取。

请让开发人员实现以下代码逻辑:

  1. 从Firebase收集app_instance_id字段。
  2. 在首次启动前调用setAddiotionalData,将应用实例ID包含在激活、打开以及应用内事件中。
安卓原生 iOS原生 Unity React Native

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。

请让开发人员实现以下代码逻辑:

  1. 从Firebase收集ga_session_id字段。
  2. 在首次启动前调用setAdditionalData,将会话ID包含在数据中。
  3. 调用API时使用密钥ga_session_id
安卓原生 iOS原生 Unity

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记录和读取。广告主可以通过以下两种方式查看数据:

  • 使用GA4探索(Explorations):您可以基于所有相关参数探索原始事件数据。前提条件:请在您的GA4属性中启用BigQuery导出功能。
  • 事件报告:广告主可在事件报告中查看回传事件。该报告可能位于一个或多个报告集合下。
    例如,事件报告可以在生命周期游戏报告集合中找到,路径为互动(Engagement) > 事件(Events)。 
    有关事件报告的更多信息,请参见Google文档
  • 流量获取报告:帮助您了解网站和应用中访问者的来源。

    生命周期集合下,转到获客 > 流量获取

    有关流量获取报告的更多信息,请参见Google文档