目录
此内容是否有帮助?

# Unreal SDK 使用指南

提示

在接入前, 请先阅读接入前准备

ThinkingAnalytics 实现了虚幻 4 内置的 Analytics 服务,同时也支持直接通过 C++ 代码调用接口上报数据。目前支持 Android、iOS、 Windows和MacOS平台。

最新版本为: v1.5.0

更新时间为: 2022-06-16

下载地址 (opens new window)

# 一、集成 SDK

# 1.1 集成 ThinkingAnalytics 插件

下载 Unreal SDK (opens new window),解压后将 ThinkingAnalytics 放入您项目的 Plugins 目录; 如果 Plugins 目录不存在,首先在项目根目录下创建 Plugins 目录,然后将 ThinkingAnalytics 目录放入其中。

# 1.2 激活 ThinkingAnalytics 插件

为了启用 ThinkingAnalytics 插件,你需要执行以下步骤:

  • 重启 Unreal Editor
  • 打开 编辑 > 插件,在项目 Analytics 类别下,启用 ThinkingAnalytics
  • 如果您使用 Blueprint,请启用内置 Analytics 类别下的 Analytics Blueprint Library
  • 再次重启 Unreal Editor
  • 打开 编辑>项目设置,在插件类别下,设置 ThinkingAnalytics 参数:
    • Server Url: 必填。接收端地址,需使用 https 类型的地址
    • App ID: 必填。您项目的 APP ID,在 TA 后台项目管理页可以查看
    • SDK MODE: SDK 运行模式,默认为普通模式(Normal),可参考 SDK 模式
    • Enable Log: 是否开启客户端日志
    • TimeZone: 可选,如果需要对齐时区,请填写规范的 TimeZone ID,例如 "Asia/Shanghai", "UTC". 不需要对齐时区的情况下,不需要填写
    • Enable Encrypt 是否开启数据加密 默认false,开启后数据会加密后上传到TA
    • EncryptPublicKey 可选,不填则使用默认配置,加密公钥
    • EncryptVersion 可选,不填则使用默认配置,密钥版本
    • SymmetricEncryption 可选,不填则使用默认配置,对称密钥
    • AsymmetricEncryption 可选,不填则使用默认配置,非对称密钥

注意:Windows/MacOS暂不支持对齐时区。

  • Config 目录下的 DefaultEngine.ini 文件中添加以下内容:
[Analytics]
ProviderModuleName=ThinkingAnalytics
  • 如果您希望直接在 C++ 代码中使用 ThinkingAnalytics 接口,需要在您项目的 *.Build.cs 文件中添加以下内容:
PrivateDependencyModuleNames.AddRange(new string[] { "ThinkingAnalytics" });

PrivateIncludePathModuleNames.AddRange(new string[] { "ThinkingAnalytics" });

并且,在您希望使用 SDK 的文件中引用 ThinkingAnalytics.h 头文件:

#include "ThinkingAnalytics.h"

# 1.3 初始化 SDK

在调用 ThinkingAnalytics 接口之前,您应该首先调用 SDK 的初始化接口。

如果您使用蓝图,需要首先调用 Analytics Blueprint LibraryStartSession 接口。您也可调用 Thinking Analytics 类目下的 Initialize 接口。

如果在 C++ 代码中调用,可如下调用:

// 初始化 SDK
UThinkingAnalytics::Initialize();

初始化完成之后,就可以使用 SDK 上报事件了。可以使用 Analytics Blueprint Library 中的 RecordEvent 接口,可参考 UE4 官方的蓝图分析插件 (opens new window)指南,也可以使用下文描述的 UThinkingAnalytics 类提供的接口。

# 二、设置用户 ID

默认情况下,SDK 会使用一个随机 UUID 作为访客 ID 来标识一个用户,在用户重新安装游戏,或者更换设备时,访客 ID 将会变更。

# 2.1 设置访客 ID(可选)

如果您的游戏有自己的访客 ID 管理体系,则您可以调用 Identify 来设置访客 ID:

UThinkingAnalytics::Identify("your_distinct_id");

如果需要获得访客 ID,可以调用 GetDistinctId 获取:

FString distinctId = UThinkingAnalytics::GetDistinctId();

# 2.2 设置账号 ID

在用户进行登录时,可调用 Login 来设置用户的账号 ID,在设置完账号 ID 后,将会以账号 ID 作为身份识别 ID,并且设置的账号 ID 将会在调用 Logout 之前一直保留:

// 设置账号 ID
UThinkingAnalytics::Login("your_account_id");

// 清除账号 ID
UThinkingAnalytics::Logout();

注意:该方法不会上传用户登录、用户登出等事件。

Analytics Blueprint Library 中的 SetUserId 接口等同于上述 Login 接口。

# 三、上传事件

您可以通过 Analytics Blueprint Library 中的 RecordEvent 接口去上报时间,也可以在 C++ 代码中使用 Json 去更灵活的上报携带事件属性的事件。一般情况下,您可能需要上传十几到上百个不同的事件,如果您是第一次使用 TA 后台,我们推荐您先上传几个关键事件。

# 3.1 上传事件

建议您根据先前梳理的文档来设置事件的属性以及发送信息的条件。事件名称是FString类型,只能以字母开头,可包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感。

  • 事件属性是 JSON 格式的 FString 类型
  • 事件属性Key为属性名称,规定只能以字母开头,包含数字,字母和下划线“_”,长度最大为 50 个字符,对字母大小写不敏感;
  • 属性值支持五种类型:字符串、数值类、bool、数组和字典;字典中的内容不支持多层嵌套,支持字符串、数值类、bool、数组(内容为字符串);数组中支持字典和字符串
// 上报一个不带属性事件
UThinkingAnalytics::Track("TEST_EVENT", "");

# 3.2 记录事件时长

您可以调用 TimeEvent 来开始计时,配置您想要计时的事件名称,当您上传该事件时,将会自动在您的事件属性中加入#duration这一属性来表示记录的时长,单位为秒。

// 调用 TimeEvent 开启对 TIME_EVENT 事件的计时
UThinkingAnalytics::TimeEvent("TIME_EVENT");

// do some thing...

// 通过 Track 上传 TIME_EVENT 事件时,会在属性中添加 #duration 属性
UThinkingAnalytics::Track("TIME_EVENT", "");

注意:Windows/MacOS暂不支持记录事件时长。

# 四、用户属性

TA 平台目前支持的用户属性设置接口为 UserSetUserSetOnceUserAddUserDeleteUserUnsetUserAppend.

# 4.1 UserSet

对于一般的用户属性,您可以调用 UserSet 来进行设置,使用该接口上传的属性将会覆盖原有的属性值,如果之前不存在该用户属性,则会新建该用户属性。

// UserSet 接口定义
UThinkingAnalytics::UserSet(const FString& Properties);

属性格式要求与事件属性保持一致。

# 4.2 UserSetOnce

如果您要上传的用户属性只要设置一次,则可以调用 UserSetOnce 来进行设置,当该属性之前已经有值的时候,将会忽略这条信息:

// UserSetOnce 接口定义
UThinkingAnalytics::UserSetOnce(const FString& Properties);

属性格式要求与事件属性保持一致。

# 4.3 UserAdd

当您要上传数值型的属性时,您可以调用 UserAdd 来对该属性进行累加操作,如果该属性还未被设置,则会赋值 0 后再进行计算,可传入负值,等同于相减操作。

// 数值类用户属性减去 100.9
UThinkingAnalytics::UserAdd("USER_PROP_NUM", -100.9);

设置的属性key为字符串,Value 只允许为数值。

# 4.4 UserDelete

如果您要删除某个用户,可以调用 UserDelete 将这名用户删除,您将无法再查询该名用户的用户属性,但该用户产生的事件仍然可以被查询到。

// 删除用户
UThinkingAnalytics::UserDelete();

# 4.5 UserUnset

如果您需要重置用户的某个属性,可以调用 UserUnset 将已经设置的属性删除。

// 删除某个用户属性
UThinkingAnalytics::UserUnset("userPropertyName");

UserUnset的传入值为被清空属性的 Key 值。

# 4.6 UserAppend

您可以调用 UserAppend 为 List 类型的用户属性追加元素。

// UserAppend 接口定义
UThinkingAnalytics::UserAppend(const FString& Properties const FString& AppId);

# 4.7 UserUniqueAppend

您可以调用 UserUniqueAppend 为 List 类型的用户属性追加元素,与UserAppend不同的是,此接口会对List内的元素进行去重处理。

// UserUniqueAppend 接口定义
UThinkingAnalytics::UserUniqueAppend(const FString& Properties, const FString& AppId);

# 五、自动采集事件

ThinkingAnalytics SDK 当前支持三种事件的自动采集:

(目前仅支持Android & IOS)

  • ta_app_install: 游戏安装,当安装后首次打开游戏会采集该事件
  • ta_app_start: 游戏进入前台的时候采集该事件
  • ta_app_end: 游戏退到后台的时候采集该事件
  • ta_app_crash: 游戏发生crash时采集该事件

通过调用 EnableAutoTrack 接口可以开启自动采集:

// 开启自动采集
UThinkingAnalytics::EnableAutoTrack();

注意: 如果您需要自定义访客 ID,请务必在开启自动采集功能之前调用 Identify 接口设置访客 ID.

Windows/MacOS暂不支持自动采集事件。

也可以手动传入需要开启采集的自动采集事件:

TArray<FString> EventTypeList;
EventTypeList.Emplace(TEXT("ta_app_install"));
EventTypeList.Emplace(TEXT("ta_app_start"));
EventTypeList.Emplace(TEXT("ta_app_end"));
EventTypeList.Emplace(TEXT("ta_app_crash"));
UThinkingAnalytics::EnableAutoTrackWithType(EventTypeList, AppID);

# 5.1 设置自定义属性

v1.4.1版本开始支持为自动采集事件设置自定义属性,当采集指定的事件时,会将自定义属性合并到该事件属性中并上报。

TArray<FString> EventTypeList;
EventTypeList.Emplace(TEXT("ta_app_install"));
EventTypeList.Emplace(TEXT("ta_app_start"));
EventTypeList.Emplace(TEXT("ta_app_end"));
EventTypeList.Emplace(TEXT("ta_app_crash"));
UThinkingAnalytics::EnableAutoTrackWithTypeAndProperties(EventTypeList, TEXT("{\"autoTrackKey1\":\"autoTrackvalue1\",\"autoTrackKey2\":\"autoTrackvalue2\"}"), AppID);

# 5.1 设置自动采集事件回调

V1.5.0版本开始支持为自动采集事件设置回调方法,当采集指定的事件时,会通过该回调通知并回传当前所携带的事件属性,您可以根据需要转发数据,或者增加新的事件属性作为返回。

//定义回调
FString UTAUserWidget::TAAutoTrackProperties(FString AutoTrackEventType, FString Properties)
{
    //AutoTrackEventType 自动采集事件类型
    //Properties 当前事件携带的事件属性
    //处理逻辑
    FDateTime TDateTime = FDateTime::Now();
    int64 SecondTimestamp = TDateTime.ToUnixTimestamp();
    int32 MillisecondPart = TDateTime.GetMillisecond();
    FString TimeStr = *FString::Printf(TEXT("%llu"), SecondTimestamp);
    TimeStr += *FString::Printf(TEXT("%lld"), MillisecondPart);
    return "{\"auto_property1_name\":\"" + AutoTrackEventType + "\",\"auto_property2_time\":\"" + TimeStr + "\"}";
}

//设置回调
void UTAUserWidget::Call_TA_SetAutoTrackEventListener()
{   
    TArray<FString> EventTypeList;
    EventTypeList.Emplace(TEXT("ta_app_install"));
    EventTypeList.Emplace(TEXT("ta_app_start"));
    EventTypeList.Emplace(TEXT("ta_app_end"));
    EventTypeList.Emplace(TEXT("ta_app_crash"));
    UThinkingAnalytics::SetAutoTrackEventListener(this, &UTAUserWidget::TAAutoTrackProperties, EventTypeList, AppID);
}

# 六、其他接口

# 6.1 获取设备 ID

SDK 在初始化完成后,会自动生成设备 ID,并记录在本地缓存,对于同一应用/游戏,一台设备的设备 ID 是不变的,可以调用GetDeviceId()获取设备 ID:

FString deviceId = UThinkingAnalytics::GetDeviceId();

# 6.2 Flush

默认情况下,数据会先保存在本地缓存,然后依据一定的上报策略上传到服务端。如果您希望立即将缓存中的数据上报可以调用 Flush 接口。 Analytics Blueprint Library 中的 FlushEvents 接口最终也会调用 Flush:

UThinkingAnalytics::Flush();

# 6.3 校准时间

# 时间戳校准

SDK 默认会使用本机时间作为事件发生时间上报,如果用户手动修改设备时间会影响到您的业务分析,您可以使用从服务端获取的当前时间戳对 SDK 的时间进行校准。此后,所有未指定时间的调用,包括事件数据和用户属性设置操作,都会使用校准后的时间作为发生时间。

// 1585633785954 为当前 unix 时间戳,单位为毫秒,对应北京时间 2020-03-31 13:49:45
UThinkingAnalytics::CalibrateTime(1585633785954);

# NTP校准

在 v1.3.0 版本新增 NTP 时间校准接口, 您需要传入您的用户可以访问的 NTP 服务器地址。之后 SDK 会尝试从传入的 NTP 服务地址中获取当前时间,并对 SDK 时间进行校准。如果在默认的超时时间(3 秒)之内,未获取正确的返回结果,后续将使用本地时间上报数据。

UThinkingAnalytics::CalibrateTimeWithNtp(const FString& urlString);

注意:校准时间应该在初始化完成后,开启自动采集或者上报任何其他数据之前进行;您也可以先校准时间,然后再调用初始化接口。Windows/MacOS暂不支持时间校准。

# 6.4 数据上报状态(Android & IOS)

在 v1.5.0 版本中,新增了 SDK 数据上报状态,一共有四种状态:

# 6.4.1 暂停 SDK 上报(PAUSE)

您可能希望在一些场景下,暂时停止数据采集以及上报,比如用户处于测试环境中、或者用户登录了一个测试账号,此时您可以调用下列接口,暂时停止 SDK 实例的上报。

您可以通过调用 SetTrackStatus: 接口,传入 PAUSE 来暂停 SDK 实例的上报,该实例已经设置的 #distinct_id#account_id、公共属性等将保留;该实例已经采集但还未上报成功的数据将继续尝试上报;后续该实例不能采集以及上报任何新数据、不能设置访客 ID、账户 ID 以及公共属性等,但是可以读取该实例已经设置的公共属性和设备 ID、访客 ID、账号 ID 等信息。实例的停止状态将会被保存在本地缓存,直到调用 SetTrackStatus:,传入 NORMAL,SDK 实例将会重新恢复数据采集以及上报,需要注意轻实例因为不进行缓存,因此每次打开 App 后,轻实例的暂停状态不会被保留,将重新开启上报。

// 暂停上报
UThinkingAnalytics::SetTrackStatus("PAUSE");

// 恢复上报
UThinkingAnalytics::SetTrackStatus("NORMAL");

# 6.4.2 停止 SDK 上报(STOP)

在一些特殊场景下,您可能需要完全停止 SDK 实例的功能,比如在适用 GDPR 的地区,用户选择不提供数据采集权限,则您可以调用如下接口完全关闭 SDK 实例的功能。

STOPPAUSE 的最大区别在于,其将会清空该实例的本地缓存,包括本实例的访客 ID,账号 ID,公共属性,以及未上报的数据队列。之后再关闭该实例的采集和上报功能。

// 停止上报,并重置本地缓存
UThinkingAnalytics::SetTrackStatus("STOP");

实例的停止状态也将保存在本地缓存,直到调用 SetTrackStatus: ,传入 NORMAL,后续可以继续上报,但此时相当于一个全新的实例

// 重新开启上报
UThinkingAnalytics::SetTrackStatus("NORMAL");

# 6.4.3 数据采集入库但暂停上报数据(SAVE_ONLY)

您可能希望在一些场景下,暂时停止 SDK 数据的网络上报,以免影响用户体验,比如用户处于游戏战斗场景,此时您可以调用下列接口,暂时停止 SDK 的网络上报。

您可以通过某一实例(包括主要实例以及轻实例)调用 SetTrackStatus: ,传入 SAVE_ONLY来暂停 SDK 的网络上报(数据采集依然存在);实例的停止状态将会被保存在本地缓存,直到调用 SetTrackStatus: 、传入 NORMAL ,SDK 实例将会把本地库中未上报数据立即上报,需要注意轻实例因为不进行缓存,因此每次打开 APP 后,轻实例的暂停状态不会被保留,将重新开启上报。

// 可以采集入库 暂停发送数据
UThinkingAnalytics::SetTrackStatus("SAVE_ONLY");

// 恢复上报
UThinkingAnalytics::SetTrackStatus("NORMAL");

# 6.4.4 正常状态(NORMAL)

SDK 正常状态NORMAL,数据会进行采集并网络上报。

SDK不进行数据上报状态设置的话,就是默认此状态。

# 6.5 暂停/停止数据上报(V1.5.0之前使用)

有两类停止 SDK 上报的接口:

# 暂停 SDK 上报(EnableTracking)

您可能希望在一些场景下,暂时停止 SDK 的数据采集以及上报,比如用户处于测试环境中、或者用户登录了一个测试账号,此时您可以调用 EnableTracking,传入 false 来暂停 SDK 的上报,此前已经设置的访客 ID、账户 ID 等将保留;已经采集但还未上报成功的数据将继续尝试上报;后续不能采集以及上报任何新数据、不能设置访客 ID、账户 ID 等。

SDK 的停止状态将会被保存在本地缓存,直到调用 EnableTracking 并传入 true,SDK 将会重新恢复数据采集以及上报。

// 暂停上报,已缓存数据和已经设置的信息不被清除
UThinkingAnalytics::EnableTracking(false);

// 恢复上报
UThinkingAnalytics::EnableTracking(true);

# 停止 SDK 上报(OptOutTracking)

在一些特殊场景下,您可能需要完全停止 SDK 的功能,比如在适用 GDPR 的地区,用户选择不提供数据采集权限,则您可以调用 OptOutTracking. 该接口与 EnableTracking 的最大区别在于,其将会清空本地缓存,包括访客 ID,账号 ID,以及未上报的数据队列。之后再关闭采集和上报功能。

// 停止默认实例的上报, 并清空本地缓存
UThinkingAnalytics::OptOutTracking();

SDK 的停止状态也将保存在本地缓存,直到调用 OptInTracking,后续可以继续上报,但此时相当于一个全新的实例。

// 重新开启上报
UThinkingAnalytics::OptInTracking();

Windows/MacOS暂不支持停止/重新开启上报功能。

# 6.6 SDK 运行模式

SDK 支持在三种模式下运行:

  • NORMAL: 普通模式,数据会存入缓存,并依据一定的缓存策略上报
  • DEBUG: Debug 模式,数据逐条上报。当出现问题时会以日志和异常的方式提示用户
  • DEBUG_ONLY: Debug Only 模式,只对数据做校验,不会入库

注意: DEBUG 模式仅仅用于集成阶段数据校验,不要在生产模式下使用。

Windows/MacOs暂不支持DEBUG /DEBUG_ONLY模式。

为了避免 Debug 模式在生产环境上线,规定只有指定的设备才能开启 Debug 模式。只有在客户端开启了 Debug 模式,并且设备 ID 在 TA 后台的"埋点管理"页的"Debug 数据"板块中配置了的设备才能开启 Debug 模式。

设备 ID 可以通过以下方式获取:

  • TA 平台中事件数据中的 #device_id 属性
  • 客户端日志:SDK 初始化完成后会打印设备 DeviceId

# 6.7 设置公共事件属性

在 v1.3.0 版本新增设置公共事件属性, 对于一些重要的属性,譬如用户的会员等级、来源渠道等,这些属性需要设置在每个事件中,此时您可以将这些属性设置为公共事件属性。公共事件属性指的就是每个事件都会带有的属性。我们推荐您在发送事件前,先设置公共事件属性。

UThinkingAnalytics::SetSuperProperties("{\"static_property1\":\"value1\",\"static_property2\":\"value2\"}");

您也可以获取设置的公共事件属性。

FString SuperProperties = UThinkingAnalytics::GetSuperProperties();

# 6.8 设置动态公共属性

在 v1.3.0 版本新增设置动态公共属性, 在设置动态公共属性类之后,SDK 将在上报事件属性时自动执行并获取返回值中的属性,并添加到每个事件中。

⚠️ v1.5.0 版本开始,该接口发生变化,请参考下列示例:

// 定义动态公共属性函数
static FString TDReturnDyldParams() {
    return "{\"dyld_property1\":\"value1\",\"dyld_property2\":\"value2\"}";
}

// 设置动态公共属性
void UMyDemoWidget::callSetDynamicSuperPropertiesFunction(){
    // V1.5.0 之前
    UThinkingAnalytics::dynamicPropertiesMap.insert(pair<FString,FString(*)(void)>("inset your appid" ,&TDReturnDyldParams));
    // V1.5.0 开始
    UThinkingAnalytics::SetDynamicSuperProperties(this, &UMyDemoWidget::TDReturnDyldParams, "your appid");
}

# 6.9 三方数据同步接口(Android & IOS)

在v1.5.0之后,新增三方数据同步接口,当前支持APPSFLYER、IRONSOURCE、ADJUST、BRANCH、TOPON、TRACKING、TRADPLUS的数据同步,开启后sdk会自动同步数据到对应的三方sdk

void UTAUserWidget::Call_TA_EnableThirdPartySharing()
{
    TArray<FString> EventTypeList;
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeNONE"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeAPPSFLYER"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeIRONSOURCE"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeADJUST"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeBRANCH"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeTOPON"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeTRACKING"));
    EventTypeList.Emplace(TEXT("TAThirdPartyShareTypeTRADPLUS"));

    TSharedPtr<FJsonObject> m_DataJsonObject = MakeShareable(new FJsonObject);
    m_DataJsonObject->SetStringField(TEXT("thirdkey1"), TEXT("thirdvalue1"));
    m_DataJsonObject->SetStringField(TEXT("thirdkey2"), TEXT("thirdvalue2"));
    UThinkingAnalytics::EnableThirdPartySharingWithCustomProperties(EventTypeList, m_DataJsonObject, AppID);
}

# 七、相关预置属性

# 7.1 预置属性说明

各个平台采集的预制属性会有一定的差异,具体可以参考如下文档: Android平台iOS平台

非Native平台的预制属性:

属性名
中文名
说明
#ip
IP
地址
用户的
IP
地址,TA 将以此获取用户的地理位置信息
#country
国家
用户所在国家,根据
IP
地址生成
#country_code
国家代码
用户所在国家的国家代码(ISO 3166-1 alpha-2,即两位大写英文字母),根据
IP
地址生成
#province
省份
用户所在省份,根据
IP
地址生成
#city
城市
用户所在城市,根据
IP
地址生成
#os_version
操作系统版本
如windows10
#os
操作系统
如 MacOS,
Windows等
#device_id
设备 ID
用户的设备 ID
#screen_height
屏幕高度
用户设备的屏幕高度,如 1920 等
#screen_width
屏幕宽度
用户设备的屏幕高度,如 1080 等
#app_version
APP 版本
您的 APP 的版本
#lib_version
SDK
版本
您接入
SDK
的版本
#zone_offset
时区偏移
数据时间相对 UTC 时间的偏移小时数
#system_language
操作系统
语言
用户所使用系统中设置的语言,如 zh
#install_time
安装时间
用户安装应用的时间
#fps
帧率
当前的屏幕帧率
#disk
硬盘状态
当前存储使用情况 "剩余/总空间"
#ram
内存状态
当前内存使用情况 "剩余/总内存"

# 7.2 获取预置属性

在 v1.3.0 版本新增预获取制属性接口, SDK 会在事件属性上报时候自动加上一些内置属性, 您可以通过此接口获取预置属性。

FString PresetProperties = UThinkingAnalytics::GetPresetProperties();

# 八、进阶功能

从 v1.1.0 开始,SDK 支持上报三种特殊类型事件: 首次事件、可更新事件、可重写事件。这三种事件需要配合 TA 系统 2.8 及之后的版本使用。由于特殊事件只在某些特定场景下适用,所以请在数数科技的客户成功和分析师的帮助下使用特殊事件上报数据。

# 8.1 首次事件

首次事件是指针对某个设备或者其他维度的 ID,只会记录一次的事件。例如在一些场景下,您可能希望记录在某个设备上第一次发生的事件,则可以用首次事件来上报数据。

UThinkingAnalytics::TrackFirst(const FString& EventName, const FString& Properties);

如果您希望以设备以外的其他维度来判断是否首次,则可以为首次事件设置 FIRST_CHECK_ID. 例如您需要记录某个账号的首次事件,可以将账号 ID 设置为首次事件的 FIRST_CHECK_ID.

UThinkingAnalytics::TrackFirstWithId(const FString& EventName, const FString& Properties, const FString& FirstCheckId);

注意:由于在服务端完成对是否首次的校验,首次事件默认会延时 1 小时入库。

# 8.2 可更新事件

您可以通过可更新事件实现特定场景下需要修改事件数据的需求。可更新事件需要指定标识该事件的 ID,并在创建可更新事件对象时传入。TA 后台将根据事件名和事件 ID 来确定需要更新的数据。

UThinkingAnalytics::TrackUpdate(const FString& EventName, const FString& Properties, const FString& EventId);

# 8.3 可重写事件

可重写事件与可更新事件类似,区别在于可重写事件会用最新的数据完全覆盖历史数据,从效果上看相当于删除前一条数据,并入库最新的数据。TA 后台将根据事件名和事件 ID 来确定需要更新的数据。

UThinkingAnalytics::TrackOverwrite(const FString& EventName, const FString& Properties, const FString& EventId);

# ChangeLog

# v1.5.0 2022/06/16

  • 更新 iOS(2.8.0.1) ,Android SDK(2.8.0.1) 版本
  • Android & IOS 支持数据加密
  • Android & IOS 支持三方数据同步
  • Android & IOS支持自动采集事件回调
  • Android & IOS支持采集Crash事件
  • Android & IOS支持setTrackStatus接口
  • 全平台支持UserUniqueAppend接口
  • 设置动态公共属性接口优化
  • PC新增#install_time/#fps/#ram/#disk 预置属性
  • 已知bug修复

# v1.4.1 2022/03/15

  • 更新 iOS(2.7.3) ,Android SDK(2.7.3) 版本
  • Android & IOS 支持复杂数据类型
  • 新增接口支持开启自动采集事件传入需要开启的事件
  • 新增接口支持开启自动采集事件时传入自定义属性
  • 代码结构调整

# v1.4.0 2021/12/31

  • 新增Windows和MacOS平台支持上报事件、用户属性、进阶功能、公共属性
  • 增加Windows和MacOS平台预置属性
  • 部分代码逻辑调整

# v1.3.0 2021/08/27

  • 新增预制属性获取接口
  • 支持设置动态公共属性
  • 支持NTP/时间戳方式校准时间
  • 支持静态公共属性的设置和获取

# v1.2.1 2021/06/29

  • 支持访客ID获取
  • 支持设备ID获取

# v1.2.0 2021/06/03

  • 优化 install,start 事件上报逻辑
  • 优化数据传输格式
  • 新增预置属性#bundle_id(应用唯一标识)
  • 代码优化
  • 升级原生 SDK 版本

# v1.1.0 2020/08/25

  • 支持首次事件, 允许传入自定义的 ID 校验是否首次上报
  • 支持可更新、可重写的事件
  • 优化#lib/#lib_version 字段为 UE4 SDK 信息
  • 升级原生 SDK 版本为 v2.6.0

# v1.0.3 2020/06/28

  • 优化代码: 避免 Android 环境下的偶发空指针异常

# v1.0.2 2020/06/23

  • 新增预置属性 #system_language
  • 升级原生 SDK 版本

# v1.0.1 2020/05/27

  • 解决因不合理依赖导致的打包错误

# v1.0.0 2020/05/18

  • 支持事件上报和所有用户属性接口
  • 支持 DEBUG 模式
  • 支持时区对齐和时间校准
  • 支持其他辅助接口:Flush, OptOutTracking, OptInTracking, EnableTracking.