qtAnalytics原生插件封装了QuickTracking APP统计SDK,实现QuickTracking统计功能包括启动次数、事件、页面等APP数据的统计。
qtAnalytics 原生插件使用攻略
1.使用之前须从QuickTracking申请账号并创建应用,获取 appkey 和收数域名。
2.配置 config.xml 文件,配置完毕后需通过云端编译生效,配置方法如下:
名称:qtAnalytics
参数:ios_appkey、ios_channel、android_appkey、android_channel、primaryDomain、standbyDomain
配置示例:
<feature name="qtAnalytics">
<param name="ios_appkey" value="YOUR_IOS_APP_KEY"/>
<param name="ios_channel" value="YOUR_IOS_CHANNEL"/>
<param name="android_appkey" value="YOUR_ANDROID_APP_KEY"/>
<param name="android_channel" value="YOUR_ANDROID_CHANNEL"/>
<param name="primaryDomain" value="YOUR_primaryDomain"/>
<param name="standbyDomain" value="YOUR_standbyDomain"/>
</feature>
字段描述:
ios_appkey:iOS App的Key。
ios_channel:iOS渠道号。
android_appkey:Android App的Key。
android_channel:Android渠道号。
primaryDomain:收数主域名。
standbyDomain:收数副域名。
原生插件接口
初始化接口
init
参数
参数 | 类型 | 含义 | 默认值 | 备注 | |
logEnabled | 布尔类型 | 控制【Quick Tracking】LOG的输出 | false | App正式上线前请关闭SDK运行调试日志。避免无关Log输出。 | |
callback(ret, err) | ret | JSON 对象 | { status:true //布尔类型;SDK是否初始化成功 } | 无 |
|
err | JSON 对象 | { msg:'错误信息' //字符串类型;错误信息 } | 无 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.init(
{logEnabled:true},
function(ret, err) {
if (ret.status) {
api.alert({
msg: JSON.stringify(ret)
})
} else {
api.alert({
msg: JSON.stringify(err)
})
}
}
);
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
关闭采集
disableSDK
考虑到app端上有隐私策略操作流程控制,因此 sdk 对开启、关闭标识没有额外的缓存状态控制,即如果本次冷启动后关闭SDK功能后希望每次冷启动都是关闭采集的状态,需业务研发主动调用 disableSDK API 功能
由于iOS sdk 应用生命周期内仅能初始化一次,并且初始化场景依赖于网络和服务端通信,因此再调用 SDK 关闭、开启功能时,需要有如下场景使用注意:
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.disableSDK();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
开启SDK
enableSDK
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.enableSDK();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
路径设置
resetStorePath
注意,需要检查目前是否已经使用了友盟+SDK,如果已经使用,请务必设置更改SDK文件路径。
更改SDK文件路径方式:
已经集成了友盟+SDK,现在需要集成QT SDK:在QT和友盟+的所有代码最前面增加(至少早于收数域名)[QTConfigure resetStorePath];
已经集成了QT SDK,现在需要集成友盟+SDK:在QT和友盟+的所有代码最前面(至少早于收数域名)增加[UMConfigure resetStorePath];
如果不按照上述的逻辑调用,则会使友盟+SDK与QT SDK共同使用一个存储路径,导致日志混乱。具体逻辑为:先调用的哪个SDK初始化方法,就重新设置另外一个SDK的文件路径,比如先初始化的友盟+SDK,就调用 [QTConfigure resetStorePath];,如果是先初始化的QT SDK,就需要调用[UMConfigure resetStorePath];
请注意:如果您重新设置了QT SDK的路径,用户账号、应用版本等主动设置给SDK的特征信息存储Key值会发生变化,如果您依赖了这些字段做业务处理,请重新设置,我们强烈建议您在初次集成时就进行配置,避免数据损失。
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.resetStorePath();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
自定义安卓设备标识符
setAndroidDeviceInfo
SDK实现了默认的设备标识符采集,此默认实现类默认会采集如下标识。
设备标识或设备信息 | 采集方法 | 备注 |
AndroidID | String getAndroidID(Context context) | Android ID |
Serial | String getSerial() | Android手机设备序列号 |
IMEI | String getImei(Context context) | IMEI |
IMSI | String getImsi(Context context) | IMSI |
WiFiMac | String getWifiMac(Context context) | WiFiMac |
OAID | String getOaid(Context context) | 广告ID(国内) |
GAID | String getGaid(Context context) | Google广告ID |
MCCMNC | String getMCCMNC(Context context) | MCC:移动国家编码 MNC:移动网号 接口返回值:MCC值和MNC值拼接结果,MCC是3位整数,MNC为两位整数。例如:46011 |
如果开发者希望针对上表中的某几个设备标识符采集行为做控制,如:不采集IMEI字段和Serial字段,自行实现OAID的采集方法。就可以自定义这几个字段
注意:
如果不进行自定义,则默认由QuickTracking SDK采集。
请在调用SDK初始化函数之前,先调用setAndroidDeviceInfo设置函数
如果不需要对设备标识采集行为做控制,就不需要调用
参数
参数 | 类型 |
AndroidID | 字符串 |
Serial | 字符串 |
IMEI | 字符串 |
IMSI | 字符串 |
WiFiMac | 字符串 |
OAID | 字符串 |
GAID | 字符串 |
MCCMNC | 字符串 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.setAndroidDeviceInfo({
IMEI:null,
Serial:null,
OAID:"custom_oaid"
});
qtAnalytics.init(
{logEnabled:true},
function(ret, err) {
if (ret.status) {
api.alert({
msg: JSON.stringify(ret)
})
} else {
api.alert({
msg: JSON.stringify(err)
})
}
}
);
可用性
Android系统
可提供的1.0.0及更高版本
自定义idfa
customSetIdfa
自定义设置idfa,不采集可返回 ''
参数 | 类型 | 描述 |
idfa | 字符串 | 苹果广告标识 |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetIdfa({
idfa: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义idfv
customSetIdfv
自定义设置idfv,不采集可返回 ''
参数 | 类型 | 描述 |
idfv | 字符串 | 应用级标识 |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetIdfv({
idfv: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义openUdid
customSetOpenUdid
自定义设置openUdid,不采集可返回 ''
参数 | 类型 | 描述 |
openUdid | 字符串 | openUdid |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetOpenUdid({
openUdid: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义utdid
customSetUtdid
自定义设置utdid,不采集可返回 ''
参数 | 类型 | 描述 |
utdid | 字符串 | 淘宝utdid,若您集成了淘宝utdid SDK,QuickTracking才会采集 |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetUtdid({
utdid: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义mcc
customSetMcc
自定义设置mcc,不采集可返回 ''
参数 | 类型 | 描述 |
mcc | 字符串 | 移动信号国家码 |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetMcc({
mcc: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义mnc
customSetMnc
自定义设置mnc,不采集可返回 ''
参数 | 类型 | 描述 |
mnc | 字符串 | 移动网络号码 |
注意:请谨慎决定是否实现对应方法,一旦你选择在自己实现采集方法,此设备标识的采集工作就由你全权接管了,SDK不会再试图采集此设备标识。SDK能采集到的设备标识越少,对统计数据的准确性和稳定性负面影响越大
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.customSetMnc({
mnc: ''
});
可用性
iOS系统
可提供的1.0.0及更高版本
自定义设备ID
setCustomDeviceId
参数 | 类型 | 描述 |
deviceId | 字符串 | SDK支持自定义umid,如果要使用自定义umid需要在初始化前(即init前) 设置setCustomDeviceId 接口为有效值(非空)。 |
注意:
因此功能在未获取umid时生效,本地如果已存在umid,设置后无效。如果本地已获取到umid可以通过卸载重装方式验证此功能。
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.setCustomDeviceId({
deviceId: 'xxxxxx'
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
获取设备ID
getUMIDString
示例代码
var qtAnalytics = api.require('qtAnalytics');
var umidStr = qtAnalytics.getUMIDString();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
登录
在统计用户时以设备为标准,如果需要统计应用自身的账号,请使用此接口:
onProfileSignIn
参数 | 类型 | 描述 |
userId | 字符串 | 用户账号ID,长度小于64字节 |
注意:账号ID设置后将被存入本地存储,只有卸载App、清空应用数据或者调用下述的登录接口时,账号ID才会失效,否则每一个事件都将携带账号ID。
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onProfileSignIn({userId:"custom_userId"});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
登出
账号登出时需调用此接口,调用之后不再发送账号相关内容
onProfileSignOff
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onProfileSignOff()
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
设置用户属性
在上报用户属性之前,需要先设置userId上报用户账号,否则QuickTracking流量分析对用户属性不会进行关联计算。确认上报用户的账号ID后,上报用户属性接口为:
setUserProfile
参数 | 类型 | 描述 |
properties | json 格式 | 用户键值对 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.setUserProfile({
properties:{
sex:"girl", //性别
age:"8"//年龄
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
注册全局属性
注册全局属性后,后续触发的所有事件都将自动包含这些属性;且这些属性及属性值存入缓存,APP退出后清除。在分析数据时,可根据此属性进行查看和筛选。
registerGlobalProperties
参数 | 类型 | 描述 |
properties | json 格式 | 全局属性键值对 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
var param = {properties:{a:"1",b:"2"}};
qtAnalytics.registerGlobalProperties(param);//当前globalproperty为a:1和b:2
var param = {properties:{b:"3",c:"4"}};
qtAnalytics.registerGlobalProperties(param);//当前globalproperty为a:1、b:3和c:4
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
删除一个全局属性
unregisterGlobalProperty
参数 | 类型 | 描述 |
propertyName | 字符串 | 只支持大小写字母、数字及下划线! |
示例代码
var qtAnalytics = api.require('qtAnalytics');
var param = {propertyName:"lnch_Source"};
qtAnalytics.unregisterGlobalProperty(param);
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
根据Key获取单个全局属性
getGlobalProperty
参数 | 类型 | 描述 |
propertyName | 字符串 | 只支持大小写字母、数字及下划线! |
示例代码
var qtAnalytics = api.require('qtAnalytics');
var param = {propertyName:"lnch_Source"};
var gp = qtAnalytics.getGlobalProperty(param);
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
获取所有全局属性
getGlobalProperties
描述:返回字符串中包含所有全局属性及对应的属性值,以 K-V键值对的形式表示全局属性-属性值。多个键值对间用逗号分割。数据外层是大括号。如:{"id":"SA1375","userName":"Mike","account_type":"vip", "MemberLevel":"Level1"}
示例代码
var qtAnalytics = api.require('qtAnalytics');
var allgp = qtAnalytics.getGlobalProperties();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
清除所有的全局属性
clearGlobalProperties
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.clearGlobalProperties();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
页面手动采集开始
开发者如果希望对页面路径和页面停留时长进行采集和统计。可以通过调用onPageStart/onPageEnd这组接口进行手动埋点。
注意:
onPageStart 是SDK记录页面进入的信息,onPageStart不会上报事件,只有调用onPageEnd的时候才会上报页面浏览事件。
onPageStart和onPageEnd必须成对调用,且传值的pageName需要保持一致,如果没有onPageEnd或者onPageEnd与onPageStart传值的pageName不一致,则onPageStart记录的信息不会生效。
onPageStart
参数 | 类型 | 描述 |
pageName | 字符串 | 自定义页面名。 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onPageStart({pageName:"MainScreen"});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
页面手动采集结束
onPageEnd
参数 | 类型 | 描述 |
pageName | 字符串 | 自定义页面名。 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onPageEnd({pageName:"MainScreen"});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
页面属性上传
支持给当前页面附加自定义属性。
setPageProperty
参数 | 类型 | 描述 |
pageName | 字符串 | 自定义页面名。 |
properties | json 格式 | 页面的自定义属性 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onPageStart({pageName:"MainScreen"});
qtAnalytics.setPageProperty({
pageName:"MainScreen",
properties:{
home_param_1:"value11" // 当前页面相关属性设置
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
给下一个页面附加自定义属性
请注意:必须在下一个页面onPageStart之前调用
setNextPageProperty
参数 | 类型 | 描述 |
properties | json 格式 | 传给下一个页面业务参数。 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.setNextPageProperty({
properties: {
nextPageProperty: "secondPageProperty"
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
事件埋点
自定义事件可以用于追踪用户行为,记录行为发生的具体细节。
onEventObject
参数 | 类型 | 描述 |
eventId | 字符串 | 为当前统计的事件ID。 |
pageName | 字符串 | 事件发生时的页面编码 |
properties | json 格式 | 事件的自定义属性。 |
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onEventObject({
eventId:"play_music",
pageName:"MainScreen",
properties:{
music_type:"popular", //自定义参数:音乐类型,值:流行
singer:"JJ", //歌手:(林俊杰)JJ
song_name:"A_Thousand_Years_Later", //歌名:一千年以后
song_price:100 //价格:100元
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
杀进程保护方法
如果开发者调用kill或者exit之类的方法杀死进程,请务必在此之前调用onKillProcess,用来保存统计数据。
onKillProcess
示例代码
var qtAnalytics = api.require('qtAnalytics');
qtAnalytics.onKillProcess();
可用性
Android系统
可提供的1.0.0及更高版本
注意事项
由于YonBuilder平台没有透出openURL接口,因此iOS端暂时无法使用埋点验证功能,您可以使用实时日志验证功能进行测试,获取设备ID的方式请参考:获取设备ID
YonBuilder不支持全埋点功能
YonBuilder不支持分享裂变功能