《统计系统》

相关接口

Session 的统计

使用数据统计系统需要至少添加以下调用方法,这些调用用于准确跟踪用户每次的应用使用,是准确统计启动、活跃、留存数据的基础。
1、Android
在应用的每个 ActivityonResume 方法里调用 startSession ,用于跟踪用户使用中的打开应用和页面跳转的数据。
在应用的每个 ActivityonPause 方法里调用 stopSession ,用于跟踪用户离开页面和退出应用的数据。

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    wrapper.nativeStopSession();
}   

@Override
protected void onResume() {
    // TODO Auto-generated method stub  
    super.onResume();
    wrapper.nativeStartSession();
}
void Java_com_anysdk_sample_wrapper_nativeStartSession(JNIEnv*  env, jobject thiz)
{
    if(AgentManager::getInstance()->getAnalyticsPlugin())
    {
        AgentManager::getInstance()->getAnalyticsPlugin()->startSession();
    }
}

void Java_com_anysdk_sample_wrapper_nativeStopSession(JNIEnv*  env, jobject thiz)
{
    if(AgentManager::getInstance()->getAnalyticsPlugin())
    {
        AgentManager::getInstance()->getAnalyticsPlugin()->stopSession();
    }
}

2、iOS
在游戏启动的时候调用 startSession 函数即可。

自定义事件

自定义事件可以实现在应用程序中埋点来统计用户的点击行为。同时,自定义事件还支持添加一些描述性的属性参数,使用多对 Key-Value 的方式来进行发送(非必须使用),用来对事件发生时的状况做详尽分析。
PS:部分统计 SDK 需要在统计后台添加事件。
调用方式

string eventId = "1";
AgentManager::getInstance()->getAnalyticsPlugin()->logEvent(eventId.c_str());

event_id 为当前统计的事件 ID,注意 event_id 中不要加空格或其他的转义字符。
为事件添加详尽的描述信息,可以更有效的对事件触发的条件和场景做分析, 可按照下面格式添加代码:

string eventId = "1";
map<string, string> paramMap;
paramMap["test"] = "123";
AgentManager::getInstance()->getAnalyticsPlugin()->logEvent(eventId.c_str(), &paramMap);

设置会话时长

当用户两次使用之间过长时,将被认为是两个的独立的 Session(启动),例如用户回到 Home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口: setSessionContinueMillis(long interval) 来设置这个间隔(参数单位为毫秒)。

void Analytics::setSessionContinueMillis(long millis)
{
    if(AgentManager::getInstance()->getAnalyticsPlugin())
    {
        AgentManager::getInstance()->getAnalyticsPlugin()->setSessionContinueMillis(millis);
    }
}

收集应用错误日志

收集应用的错误日志可帮助您来修正 BUG、改善产品。报表中,我们除了提供错误次数的数据外,还提供错误的详细信息阅览,并会对错误进行合理分类。

SDK自动获取异常信息

  1. 为了简化开发者的工作,我们提供自动获取异常信息的功能,但考虑异常 信息收集会损耗最终用户流量,因此自动捕获默认为关闭状态。
  2. 可向以下方法中传入 true(开启自动捕获)或 false(关闭自动捕获), 来控制自动捕获功能的开关:
    void setCaptureUncaughtException(bool enabled);
void Analytics::setCaptureUncaughtException(bool isEnabled)
{
    if(AgentManager::getInstance()->getAnalyticsPlugin())
    {
        AgentManager::getInstance()->getAnalyticsPlugin()->setCaptureUncaughtException(true);
    }
}

主动传送异常信息
void logError(const char* errorId, const char* message);

void Analytics::logError(string errorId, string message)
{
    if(AgentManager::getInstance()->getAnalyticsPlugin())
    {
        AgentManager::getInstance()->getAnalyticsPlugin()->logError(errorId.c_str(), message.c_str());
    }

}

游戏统计相关接口

统计玩家帐户信息

定义一个玩家单元,更新玩家最新的属性信息。
在可确定玩家帐户后(注册、登录、登出操作完成时都需添加)尽早调用。
接口说明:
void setAccount(map<string, string> paramMap)

参数 是否必传 参数说明
Account_Id Y 游戏中玩家 ID
Account_Name Y 游戏中玩家昵称
Account_Type Y 传入账户的类型(ANONYMOUS 匿名,REGISTED 自有账号,SINA_WEIBO 新浪微博,TENCENT_WEIBO 腾讯微博,QQ ,ND91)
Account_Level Y 游戏中玩家等级
Account_Age Y 玩家年龄
Account_Operate Y 账户操作(LOGIN 登陆,LOGOUT 登出,REGISTER 注册)
Account_Gender Y 游戏角色性别(UNKNOWN 未知,FEMALE 女性,MALE 男性)
Server_Id Y 服务器 ID

调用接口范例

void Analytics::setAccount()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("setAccount"))
    {
        map<string, string> paramMap;
        paramMap["Account_Id"] = "123456";
        paramMap["Account_Name"] = "test";
        paramMap["Account_Type"] = Analytics::ConvertToString(ANONYMOUS);
        paramMap["Account_Level"] = "1";
        paramMap["Account_Age"] = "1";
        paramMap["Account_Operate"] = Analytics::ConvertToString(LOGIN);
        paramMap["Account_Gender"] = Analytics::ConvertToString(MALE);
        paramMap["Server_Id"] = "1";

        PluginParam data(paramMap);
        plugin->callFuncWithParam("setAccount",&data, NULL);

    }
}

跟踪玩家充值

跟踪玩家充值现金而获得虚拟币的行为,充入的现金将反映至游戏收入中。
充值过程分两个跟踪阶段:
1、发出有效的充值请求;
2、确认某次充值请求是否完成充值。
您可在玩家发起充值请求时(例如玩家选择了某个充值包,进入支付流程那一刻)调用 onChargeRequest,并传入该笔交易的唯一订单 ID 和详细信息; 在确认玩家支付成功时调用 onChargeSuccess,并告知完成的是哪个订单 ID; 在确认玩家支付失败时调用 onChargeFail,并告知完成的是哪个订单 ID 和失败原因。如果游戏中无法记录充值的发起,那么可以在某次充值成功后,调用 onChargeOnlySuccess 方法,来告知一次充值成功的相关信息。

接口说明:支付请求接口 [TalkingData Game专用]
void onChargeRequest(map<string, string> paramMap)

参数 是否必传 参数说明
Order_Id Y 订单唯一 ID
Product_Name Y 商品名
Currency_Amount Y 现金数额(元)
Currency_Type Y 请使用国际标准组织 ISO 4217 中规范的 3 位字母代码标记货币类型。点击查看参考例:人民币 CNY;美元 USD;欧元 EUR
Payment_Type Y 支付的途径,最多 16 个字符。例如:“支付宝”“苹果官方”“XX 支付 SDK”
Virtual_Currency_Amount Y 虚拟币数值

调用接口范例

void Analytics::onChargeRequest()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onChargeRequest"))
    {
        map<string, string> paramMap;
        paramMap["Order_Id"] = "123456";
        paramMap["Product_Name"] = "test";
        paramMap["Currency_Amount"] = Analytics::ConvertToString(2.0);
        paramMap["Currency_Type"] = "CNY;";
        paramMap["Payment_Type"] = "渠道";
        paramMap["Virtual_Currency_Amount"] = Analytics::ConvertToString(100);

        PluginParam data(paramMap);
        plugin->callFuncWithParam("onChargeRequest",&data, NULL);

    }
}

接口说明:支付成功接口 [TalkingData Game专用] void onChargeSuccess(string orderId)
调用接口范例

void Analytics::onChargeSuccess()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onChargeSuccess"))
    {
        PluginParam data("123456");
        plugin->callFuncWithParam("onChargeSuccess",&data, NULL);

     }
}

接口说明:支付失败接口 [TalkingData Game专用]
void onChargeFail(map<string, string> paramMap)

参数 是否必传 参数说明
Order_Id Y 订单 ID
Fail_Reason Y 失败原因

调用接口范例

void Analytics::onChargeFail()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onChargeFail"))
    {
        map<string, string> paramMap;
        paramMap["Order_Id"] = "123456";
        paramMap["Fail_Reason"] = "test";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("onChargeFail",&data, NULL);
    }
}

接口说明:仅统计支付成功接口[DataEye专用]
void onChargeOnlySuccess(map<string, string> paramMap)

参数 是否必传 参数说明
Order_Id Y 订单唯一 ID
Product_Name Y 商品名
Currency_Amount Y 现金数额(元)
Currency_Type Y 请使用国际标准组织 ISO 4217 中规范的 3 位字母代码标记货币类型。点击查看参考例:人民币 CNY;美元 USD;欧元 EUR
Payment_Type Y 支付的途径,最多 16 个字符。例如:“支付宝”“苹果官方”“XX 支付 SDK”
Virtual_Currency_Amount Y 虚拟币数值

调用接口范例

void Analytics::onChargeOnlySuccess()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onChargeOnlySuccess"))
    {
        map<string, string> paramMap;
        paramMap["Order_Id"] = "123456";
        paramMap["Product_Name"] = "test";
        paramMap["Currency_Amount"] = Analytics::ConvertToString(2.0);
        paramMap["Currency_Type"] = "1";
        paramMap["Payment_Type"] = "1";
        paramMap["Virtual_Currency_Amount"] = Analytics::ConvertToString(100);
        PluginParam data(paramMap);
        plugin->callFuncWithParam("onChargeOnlySuccess",&data, NULL);
        }
}

跟踪游戏内消费

跟踪游戏中全部使用到虚拟币的消费点,如购买虚拟道具、VIP 服务、复活等;跟踪某物品或服务的耗尽;
在任意消费点发生时尽快调用 onPurchase,在某个道具/服务被用掉(消失)时尽快调用 onUse,在成功向玩家赠予虚拟币时调用 onReward 方法来传入相关数据。
消费点特指有价值的虚拟币的消费过程,如果游戏中存在普通游戏金币可购买。

接口说明:
void onPurchase(map<string, string> paramMap)

参数 是否必传 参数说明
Item_Id Y 物品 ID
Item_Type Y 物品类型
Item_Count Y 物品数量
Virtual_Currency Y 虚拟金额
Currency_Type Y 虚拟币类型

调用接口范例

void Analytics::onPurchase()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onPurchase"))
    {
        map<string, string> paramMap;
        paramMap["Item_Id"] = "123456";
        paramMap["Item_Type"] = "test";
        paramMap["Item_Count"] = Analytics::ConvertToString(2);
        paramMap["Virtual_Currency"] = "1";
        paramMap["Currency_Type"] = "gold";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("onPurchase",&data, NULL);
    }
}

接口说明:
void onUse(map<string, string> paramMap)

参数 是否必传 参数说明
Item_Id Y 物品 ID
Item_Type Y 物品类型
Item_Count Y 物品数量
Item_Price Y 物品单价
Use_Reason Y 用途说明

调用接口范例

void Analytics::onUse()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onUse"))
    {
        map<string, string> paramMap;
        paramMap["Item_Id"] = "123456";
        paramMap["Item_Type"] = "test";
        paramMap["Item_Count"] = Analytics::ConvertToString(2);
        paramMap["Use_Reason"] = "1";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("onUse",&data, NULL);
    }
}

接口说明:
void onReward(map<string, string> paramMap)

参数 是否必传 参数说明
Item_Id Y 物品 ID
Item_Type Y 物品类型
Item_Count Y 物品数量
Use_Reason Y 用途说明

调用接口范例

void Analytics::onReward()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("onReward"))
    {
        map<string, string> paramMap;
        paramMap["Item_Id"] = "123456";
        paramMap["Item_Type"] = "test";
        paramMap["Item_Count"] = Analytics::ConvertToString(2);
        paramMap["Use_Reason"] = "1";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("onReward",&data, NULL);
    }
}

关卡

我们提供了一组方法来统计关卡相关的事件。 startLevelfailLevelfinishLevel 在游戏开启新的任务的时候调用 startLevel 方法,在任务失败的时候调用 failLevel 方法,在成功过关的时候调用 finishLevel 方法。其中 startLevelfailLevel/finishLevel 方法需要配对出现。

接口说明:
void startLevel(map<string, string> paramMap)

参数 是否必传 参数说明
Level_Id Y 关卡 ID
Seq_Num Y 关卡顺序

调用接口范例

void Analytics::startLevel()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("startLevel"))
    {
        map<string, string> paramMap;
        paramMap["Level_Id"] = "123456";
        paramMap["Seq_Num"] = Analytics::ConvertToString(1);
        PluginParam data(paramMap);
        plugin->callFuncWithParam("startLevel",&data, NULL);
    }
}

接口说明:
void finishLevel(string levelID)
调用接口范例

void Analytics::finishLevel()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("finishLevel"))
    {
        PluginParam data("123456");
        plugin->callFuncWithParam("finishLevel",&data, NULL);
    }
}

接口说明:
void failLevel(map<string, string> paramMap)

参数 是否必传 参数说明
Level_Id Y 关卡 ID
Fail_Reason Y 失败原因

调用接口范例

void Analytics::failLevel()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("failLevel"))
    {
        map<string, string> paramMap;
        paramMap["Level_Id"] = "123456";
        paramMap["Fail_Reason"] = "test";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("failLevel",&data, NULL);
    }
}

任务

我们提供了一组方法来统计任务相关的事件。 startTaskfailTaskfinishTask 在游戏开启新的任务的时候调用 startTask 方法,在任务失败的时候调用 failTask 方法,在成功过关的时候调用 finishTask 方法。其中 startTaskfailTask/finishTask 方法需要配对出现。

接口说明:
void startTask(map<string, string> paramMap)

参数 是否必传 参数说明
Task_Id Y 任务 ID
Task_Type Y 任务类型(GUIDE_LINE 新手引导、MAIN_LINE 主线、 BRANCH_LINE 分支、 DAILY 日常、 ACTIVITY 活动、 OTHER 其他)

调用接口范例

void Analytics::startTask()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("startTask"))
    {
        map<string, string> paramMap;
        paramMap["Task_Id"] = "123456";
        paramMap["Task_Type"] = Analytics::ConvertToString(GUIDE_LINE);
        PluginParam data(paramMap);
        plugin->callFuncWithParam("startTask",&data, NULL);
    }
}

接口说明:
void finishTask(string taskID)
调用接口范例

void Analytics::finishTask()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("finishTask"))
    {
        PluginParam data("123456");
        plugin->callFuncWithParam("finishTask",&data, NULL);
    }
}

接口说明:
void failTask(map<string, string> paramMap)

参数 是否必传 参数说明
Task_Id Y 任务 ID
Fail_Reason Y 失败原因

调用接口范例

void Analytics::failTask()
{
    ProtocolAnalytics* plugin = AgentManager::getInstance()->getAnalyticsPlugin();
    if(plugin && isFunctionSupported("failTask"))
    {
        map<string, string> paramMap;
        paramMap["Task_Id"] = "123456";
        paramMap["Fail_Reason"] = "test";
        PluginParam data(paramMap);
        plugin->callFuncWithParam("failTask",&data, NULL);
    }
}

【评论区】