C++ 客户端SDK

1 概述

C++ 埋点 SDK 是用于记录 PC 端埋点的,例如在 MFC,.NET, Qt 程序中集成,以收集用户在程序界面上的操作。
采集流程:初始化 -> 埋点采集数据 -> Flush() 上报数据
事件有效期为30天,最多暂存的数据条数默认为4000,若未发送的数据条数超过该值,则从最早的数据开始淘汰。

2 集成SDK

GIO SDK 提供两种集成方式可供选择 ① 源码集成 ② 动态库集成

2.1 源码集成

首先 GIO SDK 使用了 curl 库用于网络请求;您需要先配置支持 https 协议的 libcurl 于项目中 curl 源码:https://curl.se/download.html​
1.使用 VS2010 开发人员命令提示重新编译curl,进入到 curl 的 winbuild 的目录下使用 cmake 工具编译
完整命令行如下:
nmake /f Makefile.vc mode=dll MACHINE=x64 //MACHINE=x64编译64位版本默认x86
2.在 C/C++ ->常规 -> 附加包含目录->添加curl 目录 builds 下的 libcurl-vc10-x86-release-static-ipv6-sspi-winssl\include
3.链接器 -> 常规 -> 附加库目录 ->添加 curl 目录 builds 下 builds\libcurl-vc10-x86-release-static-ipv6-sspi-winssl\lib
4.链接器 -> 输入 -> 附加依赖项,添加 libcurl.lib;Ws2_32.lib; Wldap32.lib; winmm.lib; Crypt32.lib;
5.在 C/C++ -> 预处理器 -> 预处理器定义中,加入 CURL_STATICLIB 注:debug 与 release 配置相对于的库 将 manual_track.h manual_track.cpp 添加到项目引入头文件中即可使用

2.2 动态库集成

以 vs2010 为例:
1.在 C/C++ ->常规 -> 附加包含目录->添加 manual_track.h
2.链接器 -> 常规 -> 附加库目录 ->添加 manual_track.lib所在目录
3.链接器 -> 输入 -> 附加依赖项,添加 manual_track.lib
4.将 manual_track.dll libcurl.dll复制到工作目录(exe所在目录下)

3 初始化SDK

建议在主线程中初始化 SDK 生成单例对象
1
// 初始化 SDK
2
// projectid: 项目id
3
//domain 包名唯一标识该应用
4
//enable默认false,设置为true日志输出到c:\\asia_log\\下
5
bool Sdk::Init(const std::string &project_id,const string &domain,bool enablelog = false)
Copied!

4 结束采集

程序结束前务必调用Shutdown()结束SDK采集数据,否则可能存在数据丢失问题
1
// 析构 SDK 实例,回到 Init 前的状态,未发送的数据上报服务器
2
static void Shutdown();
Copied!

5 埋点接口

5.1设置属性

1
void SetNumber(const string &property_name, int32_t value);
2
3
void SetNumber(const string &property_name, int64_t value);
4
5
void SetNumber(const string &property_name, double value);
6
7
void SetString(const string &property_name, const string &value);
8
9
void SetString(const string &property_name, const char *value);
10
11
void SetBool(const string &property_name, bool value);
12
13
void SetList(const string &property_name, const std::vector<string> &value);
14
15
void SetDateTime(const string &property_name, time_t seconds, int milliseconds);
16
17
// 字符串格式需要是: 2018-09-07 16:30:22.567
18
void SetDateTime(const string &property_name, const string &value);
Copied!
growingio提供growingio_track::PropertiesNode类如上接口设置埋点事件属性,调用示例如:
1
growingio_track::PropertiesNode event_properties;
2
3
event_properties.SetString("computer_name", "ABCXYZ");
4
5
event_properties.SetNumber("test_number_int", 3);
6
7
event_properties.SetNumber("test_number_double", 3.14);
8
9
event_properties.SetBool("test_bool", true);
10
11
std::string test_string = "测试字符串";
12
13
event_properties.SetString("test_stl_string", test_string);
14
15
event_properties.SetDateTime("test_time", time(NULL), 0);
16
17
std::vector<std::string> test_list;
18
19
test_list.push_back("item1");
20
21
test_list.push_back("item2");
22
23
event_properties.SetList("test_list", test_list);
24
25
growingio_track::Sdk::Track("OpenApp", event_properties);
Copied!

5.2 埋点接口

1
//发送自定义事件 API cstm event_name 仅支持大小写字母,数字,
2
3
static void Track(const string &event_name);
4
5
static void Track(const string &event_name, const PropertiesNode &properties);
6
7
//发送用户变量 API ppl
8
static void SetPeopleVariable(const PropertiesNode &properties);
9
10
//访问用户变量 API vstr
11
static void SetVisitor(const PropertiesNode &properties);
12
13
//转化变量 API evar
14
static void SetEvar(const PropertiesNode &properties);
Copied!

5.3 登录id

1
// 设置登录用户ID API
2
static void SetUserId(string &userid);
3
4
// 清除登录用户ID API
5
static void ClearUserId();
Copied!

6 上报数据

将数据通过网络发送到服务端需要在代码适当的位置显式调用 Flush() 函数,将数据发送到服务端需要有可用的网络连接,建议在适当的位置调用,如后台线程,避免阻塞界面操作等。
1
// 将所有本地数据发送到服务端
2
static bool Flush();
3
4
// 触发一次发送,发送最多 part_size 条数据
5
// 当 drop_failed_record 为 true 时,发送失败则丢弃这些数据不再发送
6
// 当 drop_failed_record 为 false 时,发送失败仍保留在队列里,下次再试
7
static bool FlushPart(size_t part_size, bool drop_failed_record);
Copied!

7 API汇总

1
// 初始化 SDK
2
// projectid: 项目id
3
//domain 包名唯一标识该应用
4
//enable默认false,设置为true日志输出到c:\\asia_log\\下
5
bool Sdk::Init(const std::string &project_id,const string &domain,bool enablelog = false)
6
7
// 将所有本地数据发送到服务端
8
static bool Flush();
9
10
// 触发一次发送,发送最多 part_size 条数据
11
// 当 drop_failed_record 为 true 时,发送失败则丢弃这些数据不再发送
12
// 当 drop_failed_record 为 false 时,发送失败仍保留在队列里,下次再试
13
static bool FlushPart(size_t part_size, bool drop_failed_record);
14
15
// 清空本地发送队列,包括内存和文件
16
static void ClearQueue();
17
18
// 析构 SDK 实例,回到 Init 前的状态,未发送的数据将暂存到磁盘
19
static void Shutdown();
20
21
//发送自定义事件 API cstm
22
static void Track(const string &event_name);
23
24
static void Track(const string &event_name, const PropertiesNode &properties);
25
26
//发送用户变量 API ppl
27
static void SetPeopleVariable(const PropertiesNode &properties);
28
29
//访问用户变量 API vstr
30
static void SetVisitor(const PropertiesNode &properties);
31
32
//转化变量 API evar
33
static void SetEvar(const PropertiesNode &properties);
34
35
// 设置登录用户ID API
36
static void SetUserId(string userid);
37
38
// clear登录用户ID API
39
static void ClearUserId();
40
41
// 使用追加的方式把队列中数据添加到本地文件中,默认是 false
42
static void AppendRecordsToDisk(bool enable);
43
44
// 将队列中的所有数据直接追加到本地文件中,并清空队列内容
45
// 只有当开启 AppendRecordsToDisk 时调用此接口才有效
46
static void DumpAllRecordsToDisk();
Copied!

8 对于 .NET的支持

C++SDK 提供C++/CLI版本动态库以支持.NET程序的埋点数据采集,你需要如下操作:
1.添加引用 manualtrackCliDll.dll
2.将对应版本的 manual_track.dll libcurl.dll 复制到工作目录
最近更新 29d ago
此页面是否有帮助?