注意使用unity sdk最新版本,按官方文档接入
引入添加 ThinkingAnalytics GameObject,并设置 SDK 配置
Enable Log:是否开启日志,若开启,则会打印上报情况,以方便您的调试。您也可以在 Editor 模式下,检验事件上报是否正确,对于不符合条件的属性,会以 warning 日志显示在控制台中。
Network Type:设置上报数据到服务器的网络条件,默认为 DEFAULT,以下是所有可选项及对应说明:
- DEFAULT:3G, 4G, 5G 及 WIFI 环境下上报数据
- WIFI:只在 WIFI 环境下上报数据
- ALL:2G, 3G, 4G, 5G 及 WIFI 环境下上报数
Tokens
APP ID: 需要进行配置,您的项目的 APP_ID,在您申请项目时会给出,请在此处填入。
- SERVER URL: 需要进行配置,为数据接收端的 URL:
- 如果您使用的是云服务,请输入以下 URL:
- https://receiver.ta.thinkingdata.cn
- 如果您使用的是私有化部署的版本,请输入以下 URL:
- https://数据采集地址
- MODE: SDK 实例运行模式,生成环境请务必使用 NORMAL 模式。
- NORMAL: 普通模式,数据会存入缓存,并依据一定的缓存策略上报
- DEBUG: Debug 模式,数据逐条上报。当出现问题时会以日志和异常的方式提示用户
- DEBUG_ONLY: Debug Only 模式,只对数据做校验,不会入库
- 注意: DEBUG 模式仅仅用于集成阶段数据校验,不要在生产模式下使用。
- TimeZone: 自 v1.4.3 开始支持,数据默认的对齐时区。如果您指定了对齐时区,那么数据的时间以及属性中的 DateTime 类型都将按照您指定的时区来对齐。
API使用具体详解看官方文档
设置用户 ID
如果您的游戏对每个用户有自己的访客 ID 管理体系,则您可以调用 Identify 来设置访客 ID:
ThinkingAnalyticsAPI.Identify("unity_id");
如果需要获得访客 ID,可以调用 GetDistinctId 获取:
ThinkingAnalyticsAPI.GetDistinctId();
b) 设置与清除账号 ID
// 设置账号 ID
ThinkingAnalyticsAPI.Login("unity_user");
// 清除账号 ID
ThinkingAnalyticsAPI.Logout();
注意:该方法不会上传用户登录、用户登出等事件。
上传事件
ThinkingAnalyticsAPI.Track();
设置静态公共属性
ThinkingAnalyticsAPI.SetSuperProperties(superProperties);
// 清除属性名为 CHANNEL 的公共属性
ThinkingAnalyticsAPI.UnsetSuperProperty("CHANNEL");
// 清空所有公共属性
ThinkingAnalyticsAPI.ClearSuperProperties();
设置动态公共属性
using ThinkingAnalytics;
// 定义动态公共属性实现,此例为设置 UTC 时间的动态公共属性
public class DynamicProp : IDynamicSuperProperties
{
public Dictionary<string, object> GetDynamicSuperProperties()
{
return new Dictionary<string, object>() {
{"KEY_UTCTime", DateTime.UtcNow}
};
}
}
ThinkingAnalyticsAPI.SetDynamicSuperProperties(new DynamicProp());
用户属性
TA 平台目前支持的用户属性设置接口为 UserSet、UserSetOnce、UserAdd、UserUnset、UserDelete、UserAppend.
获取设备ID
ThinkingAnalyticsAPI.GetDeviceId();
自动上报所有事件
//自动上报所有事件 //ThinkingAnalyticsAPI.EnableAutoTrack(AUTO_TRACK_EVENTS.ALL); //自动上报启动关闭 ThinkingAnalyticsAPI.EnableAutoTrack(AUTO_TRACK_EVENTS.APP_START | AUTO_TRACK_EVENTS.APP_END);
调试
自 v1.4.0 版本开始,SDK 支持在三种模式下运行:
- NORMAL: 普通模式,数据会存入缓存,并依据一定的缓存策略上报
- DEBUG: Debug 模式,数据逐条上报。当出现问题时会以日志和异常的方式提示用户
- DEBUG_ONLY: Debug Only 模式,只对数据做校验,不会入库
注意: DEBUG 模式仅仅用于集成阶段数据校验,不要在生产模式下使用。
为了避免 Debug 模式在生产环境上线,规定只有指定的设备才能开启 Debug 模式。只有在客户端开启了 Debug 模式,并且设备 ID 在 TA 后台的"埋点管理"页的"Debug数据"板块中配置了的设备才能开启 Debug 模式。
设备 ID 可以通过以下三种方式获取:
- TA 平台中事件数据中的 #device_id 属性
- 客户端日志:SDK 初始化完成后会打印设备 DeviceId
- 通过实例接口调用:获取设备 ID
注意:
获取唯一id,获取IMEI,判断网络方法
//唯一id
public String GetID(){
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 位
try {
serial = Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
//使用硬件信息拼凑出来的15位号码
}
//获取IMEI 添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
public String GetIMEICode()
{
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)
{
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String str = tm.getDeviceId();
//UnityPlayer.UnitySendMessage("Game", "IMEICode", str );
return str;
}
else
{
//UnityPlayer.UnitySendMessage("Game", "IMEICode", "没有权限");
return "";
}
}
/**
* 在子线程里开启该方法,可检测当前网络是否能打开网页
* true是可以上网,false是不能上网
*/
public boolean checkNetworkState() {
URL url;
try {
url = new URL("https://www.baidu.com");
InputStream stream = url.openStream();
Log.i("checkNetworkState", "flag " + true);
return true;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("checkNetworkState", "flag " + false);
return false;
}