PC SDK 使用说明

当前PC SDK支持Windows XP SP3以上版本。

1. 集成SDK

1.1 SDK下载

下载 最新统计SDK 并解压缩。

1.2 导入SDK包

进入bin目录下,进入Debug(调试版本)、Release(正式版本)目录;
拷贝 libNDDataSdk.dll、libNDDataSdk.pdb 至指定目录;
拷贝对应环境下配置文件 CloudServer.inilibNDDataSdk.dll 同级目录下;

备注事项:

  1. 压缩包中含有x64、Win32两个文件夹,接入者依据自身需求接入不同文件夹中的libNDDataSdk.dll及相关文件;

  2. CloudServer.ini必须与dll文件同级目录且不能没有此文件;

2. 基本功能集成

2.1 配置基础属性

CloudServer.ini 文件内容如下:

[Server]
IP_PRODUCE=http://cloud-atlas-collection.oth.web.sdp.101.com/v0.1/?/action/collect
Port=80
Interval=1000
ListMaxCount=20

配置文件相关说明:

IP_PRODUCE 上传的采集服务器url
Port 采集服务器的端口号
Interval 采集线程定时轮询,本地采集数据库的时间间隔
ListMaxCount 每次拼接上传的最大记录数

3. 接入SDK

3.1 创建SDK接口实例

每个进程创建一个对应的接口实例,进程退出前要调用Release接口释放该指针,详情请看Release接口说明。

方法示例:

 INDDataSdkNewNew* m_pNDDataSdk = CreateNDDataSdkNew(const char* lpszAppKey);

3.2 初始化接口

virtual bool Init(const char* lpszAppVer/*app版本*/, const char* lpszChannelId/*app渠道*/) = 0;

输入参数:

  • lpszAppVer应用版本,长度大于255时会被强行截断成255,必填,格式要求UTF8格式
  • lpszChannelId渠道id, 必填,格式要求UTF8格式,否则会出现乱码问题

调用示例:

if(m_pNDDataSdk) 
{
  m_pNDDataSdk->Init("1.0.8.5","101PPT");
}
风险:初始化接口调用后,即会立即采集本地设备信息等数据并上传数据,请大家注意接入方式。如以非法形式或非主程序接入方式产生的数据一切问题,由项目方自行承担。 ### 3.3 释放接口实例 释放 `CreateNDDataSdkNew()`返回的指针 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->Release(); m_pNDDataSdk = NULL; } ``` ### 3.4 账号的统计 通常在用户登录后,调用该方法,以便统计活跃用户数,上传用户登录时的IP地址、AppKey 、Mac地址、账号ID和用户ID。 ```c++ virtual void Login(const __int64 i64UserId/*用户id*/, const char* lpszAccountId =""/*账号id*/) = 0; ``` 输入参数: * `i64UserId`:用户ID,此数据为101帐号中心返回的user_id字段 * `lpszAccountId`:用户账号ID,此参数暂时无使用,可不用传入数据值 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->Login(2143423); // 旧接口:BeginSession } ``` 通常在用户登出后,调用该方法,以便统计用户活跃时长,上传用户登录时的IP地址、AppKey 、Mac地址、账号ID和用户ID。 ``` virtual void Logout() = 0;//用户登出 ``` 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->Logout(); //旧接口:EndSession } ``` ## 4. 高级功能接入 以下功能可根据项目的情况进行接入,如无详细的接入要求可暂时不接入以下功能 ### 4.1 自定义事件采集 > * 字符串参数为UTF8格式 > * int型整数为32位 #### 4.1.1 自定义事件-单个事件: 如果只需要统计某个事件发生的次数,可以只传一个事件id ```c++ virtual bool AddEvent(const char* lpszEventId) = 0; ``` 输入参数: `lpszEventId`事件ID,长度大于255时会被强行截断成255 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->AddEvent("eventShowXX"); } ``` #### 4.1.2 自定义事件-统计次数&属性: 此事件方法可以统计次数与属性,如购买事件,可能有买苹果、买梨子、买香蕉等,而且需要对每种类型的水果的购买次数分别统计,则可以使用以下方式: ```c++ virtual bool AddEvent(const char* lpszEventId, const char* lpszLabel) = 0; ``` 输入参数: `lpszEventId`:事件ID,长度大于255时会被强行截断成255 `lpszLabel`:事件属性,长度大于255时会被强行截断成255 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->AddEvent("eventBuy", "apple"); m_pNDDataSdk->AddEvent("eventBuy", "banana"); } ``` #### 4.1.3 自定义事件-多维度的统计(Map): 考虑到某些情况下,对于一个事件,我们不止有一个维度的属性要统计。如:购买事件,除了水果的类型,有时还可能需要统计门店,可以使用带Map的接口。 方法示例: ```c++ virtual bool AddEvent(const char* lpszEventId, INDDataMAP* pMap) = 0; ``` 输入参数: * `lpszEventId`:事件ID,长度大于255时会被强行截断成255 * `pMap`:事件属性集接口,事件属性的JSON串长度不能超过2048,超过部分会被抛弃,不上传; 上传的Key-Value对,排序方式是按Key字母按从小到大,依次出现在JSON串中; 调用示例: ```c++ NDDataSDK::INDDataMAP* pMap = NDDataSDK::CreateNDDataMap();//创建用户自定属性接口 if (pMap) { pMap->Add("type", "apple");//事件属性集接口; pMap->Add("store", "0AD056SDSD00AS"); //最后出现在json串的 顺序依次为 {"store":"0AD056SDSD00AS","type":"apple"},这是因为"store" < "type"(符合字符串比较大小的结果) } if(m_pNDDataSdk) { m_pNDDataSdk->AddEvent("eventBuy", pMap); } if (pMap) pMap->Release();//释放用户自定义属性 ``` #### 4.1.4 自定义事件-多维度特殊属性的统计(Map): ```c++ virtual bool AddEvent(const char* lpszEventId, INDDataMAP* pMap, int nEventValue) = 0; ``` 此接口在4.1.3接口之上,提供额外数值计算功能。如:需扩展统计购买的金额,同时需要对金额做一些数值上的计算分析,则需要调用带`int`类型value的接口。 输入参数: * `lpszEventId`:事件ID,长度大于255时会被强行截断成255; * `pMap`:事件属性集接口,事件属性的JSON串长度不能超过2048,超过部分会被抛弃,不上传;上传的Key-Value对,排序方式是按Key字母按从小到大,依次出现在JSON串中; * `nEventValue`:特殊属性值; 调用示例: ```c++ NDDataSDK::INDDataMAP* pMap =NDDataSDK::CreateNDDataMap();//创建用户自定属性接口 if (pMap) { pMap->Add("type", "apple");//事件属性集接口; pMap->Add("store", "0AD056SDSD00AS"); //最后出现在JSON串的 顺序依次为 {"store":"0AD056SDSD00AS","type":"apple"},这是因为"store" < "type"(符合字符串比较大小的结果) } if(m_pNDDataSdk) { m_pNDDataSdk->AddEvent("eventBuy", pMap, 2); } if (pMap) pMap->Release();//释放用户自定义属性 ``` ## 5. 支持设置缓存条数发送功能 ```c++ void SetFlushBulkSize(int nSize = 100) = 0;//支持设置缓存条数发送功能 ``` 参数说明: * `nSize`每次发送的最大记录数,默认30秒。 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->SetFlushBulkSize(); } ``` ## 6. 设置发送定时间隔 ```c++ void SetFlushInterval(int nSeconds = 30) = 0;//设置发送定时间隔 ``` 参数说明: * `nSeconds`定时发送记录的时间间隔,默认30秒。 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->SetFlushInterval() } ``` ## 7. 强制上传数据 ```c++ void Flush() = 0;//强制上传数据 ``` 参数说明: * `nSize`每次强制上传发送的最大记录数 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->Flush(); } ``` ## 8.安装应用 ```c++ virtual bool Install(const char* lpszAppVer, const char* lpszChannelId) = 0; ``` 参数说明: * `lpszAppVer`应用版本号,字符串,内容长度限制32位以下,不允许出现异常字符 * `lpszChannelId`应用渠道号,字符串,内容长度限制32位以下,不允许出现异常字符,中文请转换为UTF8格式 调用示例: ```c++ if(m_pNDDataSdk) { m_pNDDataSdk->Install('v1.0','baidu'); } ``` **备注:**调用安装应用无需调用Init接口,只需要调用安装接口即可

9.卸载应用

virtual bool UnInstall(const char* lpszAppVer) = 0;

参数说明:

  • lpszAppVer应用版本号,字符串,内容长度限制32位以下,不允许出现异常字符

调用示例:

if(m_pNDDataSdk)
{
     m_pNDDataSdk->UnInstall('v1.0');
}

10. 功能配置

10.1 环境切换

根据不同环境配置环境下的CloudServer.ini文件,打开CloudServer.ini文件后找到[Server]设置里面的[IP]为如下表格的内容:

序号 环境 云图网址 网址
1 开发 http://cloud-atlas-visualization.dev.web.nd http://cloud-atlas-collection.dev.web.nd/v0.1/?/action/collect
2 集成 http://cloud-atlas-visualization.pre1.web.nd http://cloud-atlas-collection.pre1.web.nd/v0.1/?/action/collect
3 预生产 https://cloud-atlas-visualization.beta.101.com http://cloud-atlas-collection.beta.web.sdp.101.com/v0.1/?/action/collect
4 生产 http://yuntu.101.com http://cloud-atlas-collection.oth.web.sdp.101.com/v0.1/?/action/collect
5 加利福尼亚 暂无 暂无

10.2 测试过程中的日志查看

通过设置调试模式

  • 调试开关,启用时,会将日志输出。我们可以在exe文件目录下找到Log目录, 进入Log目录将发现如下文件, debug.log为调试信息输入文件 data.log数采集到的记录文件, error.log:为错误输出文件(只有发生错误后才会创建)
  • @param bFlag true-启用,false-关闭

方法定义:

virtual void SetDebugMode(bool bFlag) = 0;

调用示例:

if(m_pNDDataSdk)
{
  m_pNDDataSdk->SetDebugMode(true);
}

注意:生产环境请不要打开调试模式,以免生成大量日志。

依据上述要求开启调试模式后,可进入 C:\Users{用户名}\AppData\Roaming\Log 目录查看实时日志内容。

11 使用案例

11.1 动态加载dll使用方法(DEMO下载

typedef NDDataSDK::INDDataSdkNew*  (*CreateNDDataSdkNew)(const char* lpszAppKey,  NDDataSDK::ENV_TYPE type);
typedef NDDataSDK::INDDataMAP*  (*CreateNDDataMap)();

HINSTANCE m_hModule = ::LoadLibrary(L"libNDDataSdk.dll");
if (m_hModule)
{
    CreateNDDataSdkNew funCreateNDDataSdk = (CreateNDDataSdkNew)::GetProcAddress(m_hModule, "CreateNDDataSdkNew");
    CreateNDDataMap funCreateNDDataMap = (CreateNDDataMap)::GetProcAddress(m_hModule, "CreateNDDataMap");
   if (funCreateNDDataSdk && funCreateNDDataMap)
   {
      NDDataSDK::INDDataSdkPtr pSdk = funCreateNDDataSdk("appkey", type);
      if (pSdk != NULL)
      {
        result = pSdk->Init("version", "channel");
        // 设置缓存条数发送功能,达到指定条数自动上传数据
        pSdk->SetFlushBulkSize(30);
        // 设置发送定时间隔,默认30秒
        pSdk->SetFlushInterval(30);
        // 上报登录数据
        pSdk->Login(123);
        // 设置调试模式
        pSdk->SetDebugMode(true);

**用法一:**
        pSdk->AddEvent("1");

**用法二:**
        pSdk->AddEvent("1", "2");

**用法四:**
        NDDataSDK::INDDataMAP* pMap = funCreateNDDataMap();
        if (pMap)
        {
          pMap->Add("tcp", "ip");
          pMap->Add("age", "118");
          pMap->Add("year", "2015");
          pMap->Add("year", "2016");
        }
         pSdk->AddEvent("1", pMap);
         pMap->Release();

**用法四:**
           NDDataSDK::INDDataMAP* pMap = funCreateNDDataMap();
           if (pMap)
           {
            pMap->Add("tcp", "ip");
            pMap->Add("age", "118");
            pMap->Add("year", "2015");
            pMap->Add("year", "2016");
           }
           pSdk->AddEvent("1", pMap, 3);
           pMap->Release();
           pSdk->AddException("1", 1, "123");
           pSdk->Logout();
           pSdk->UnInit();
         }
        }

        // 数据立即上传
        pNDDataSdk->Flush();
        // 用户登出操作
        pNDDataSdk->Logout();
        // 用户退出应用操作
        pNDDataSdk->UnInit();

       ::FreeLibrary(m_hModule);
  }
© Appfactory Team all right reserved,powered by Gitbook最后修订时间: 2021-05-13 11:17:07

results matching ""

    No results matching ""