unity sdkandroid-ThinkingData统计平台接入

官方文档:数数科技|专注游戏用户行为数据分析|ThinkingData

注意使用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:
    • 如果您使用的是私有化部署的版本,请输入以下 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 平台目前支持的用户属性设置接口为 UserSetUserSetOnceUserAddUserUnsetUserDeleteUserAppend.

获取设备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;
    }

预置属性为系统自带属性,sdk会自动收集,如需主动修改再设置(即带#的如下数据)

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...