Android SDK (>=4.0.0)
Android SDK 从 4.0.0
版本起支持多主体/多实例上报,对 SDK
初始化进行升级,如您对多主体 / 多实例 无需求,可直接使用 Android SDK 老版本(<=v4.0.0) 。
注意:移动端SDK 大于等于 v4.0.0
时,H5使用的 js sdk
版需 大于等于 v4.0.0
,分析平台版本需升级至 v4.0.0
。
1. 集成SDK
1.1 使用AndroidStudio自动导入
1.1.1 引入仓库
集成 ZhugeIO SDK 时需要注意是否已经添加 mavenCentral()
仓库地址。
- AGP7及以上
// 在Project中的settings.gradle文件中添加代码仓库地址。
dependencyResolutionManagement {
repositories {
// 添加sdk依赖的 maven 仓库地址
mavenCentral()
}
}
- AGP 7.0以下
// 在 project 中的 build.gradle 文件中添加代码仓库地址。
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
repositories {
// 添加maven仓库
mavenCentral()
}
}
1.1.2 引入SDK
在App的 build.gradle
文件中添加
dependencies {
implementation 'io.github.zhugefe:zhugeio-analytics:4.0.0'
}
添加完毕之后重新build工程即可。
若您使用为老版本,对多主体/多实例无需求,可直接使用 Android SDK 老版本(<=v4.0.0) ,此处改为如下代码重新打包即可。
dependencies {
implementation 'io.github.zhugefe:zhugeio-analytics:3.7.1'
}
1.2 手动引入SDK
- 下载SDK v4.0.0
- 若您的业务中需使用到广告监测,参考 Android SDK (<4.0.0)集成开发指南,暂不支持多主体 / 多实例特性。
- 解压文件,将下载的SDK添加到工程的libs目录下,重新build工程即可。
在App的build.gradle
文件中添加:
dependencies {
implementation files('libs/下载文件名')
}
2. 初始化SDK
说明
建议您在用户同意您App中的隐私政策后,再进行 SDK 初始化。
2.1 获取 APPKEY
在开始集成前,首先拥有一个应用/主体,进行SDK集成前,您需要获取对应应用/主体的App Key信息。
您可以在「应用管理」->「主体管理」->「设置」中可查看您的App Key
2.2 获取数据上送域名
私有化部署版本需要获取数据上送域名。 如您不清楚此域名,请联系您的项目经理或技术支持。
2.3 初始化 SDK
将SDK的初始化代码放入Application的onCreate中。
使用 ZhugeParam
实体类来定义信息,然后使用该参数初始化SDK:
// 私有化部署: 设置私有化部署数据上送域名,参考2.2节获取,例如 https://yourdomain.com,注意域名后不要加“/”
ZhugeParam param = new ZhugeParam.Builder()
.appKey("app key")
.appChannel("your app channel")
.uploadEventUrlAndBackupUrl('上报域名', '备用上报域名')
.build();
ZhugeSDK sdk = ZhugeSDK.getInstance();
sdk.initWithParam(context, param);
参数说明:
参数 | 说明 |
---|---|
context | 应用上下文 |
appKey | 官网申请的appKey |
appChannel | 应用分发渠道 |
上述三个参数为SDK必须的参数,不能为空。
saas上报域名
- 首选域名:https://su.zhugeio.com
- 备用上报域名:https://subak.zhugeio.com
2.4 多实例初始化(可选,多主体/多实例 场景)
调用 ZhugeSDK.newInstance()
来获得一个新的 SDK 实例。然后针对每一个实例,定义对应的ZhugeParam
,然后通过 ZhugeParam
来初始化对应的实例
ZhugeSDK zg_user = ZhugeSDK.newInstance();
ZhugeParam param = new ZhugeParam.Builder()
.appKey("user app key")
.appChannel("your app channel")
.uploadEventUrlAndBackupUrl('上报域名', '备用上报域名')
.build();
zg_user.initWithParam(param);
3. 延迟采集
Android 请在获取权限后初始化 SDK
// 主体1
sdk.initWithParam(context, param);
// 主体2
zg_user.initWithParam(param);
4. ZhugeParam 参数选项
ZhugeParam
是SDK初始化的配置参数载体,各项功能开关及自定义选项均通过该参数来传递,可选配置项有:
参数名称 | 类型 | 含义 | 默认值 |
---|---|---|---|
appKey | string | 应用标识 | 无默认,必传参数 |
appChannel | string | 应用渠道 | 无默认,必传参数 |
enableAutoTrack | boolean | 是否开启全埋点 | false,不开启 |
enableDurationOnPage | boolean | 是否开启页面停留时长采集 | false,不开启 |
enableViewExpose | boolean | 是否启用元素曝光采集 | false,不开启 |
enableVisual | boolean | 是否开启可视化采集 | false,不开启 |
enableDebug | boolean | 是否开启实时调试 | false,不开启 |
enableEncryption | boolean | 是否开启数据加密上报 | false,不开启 |
setEncryptionType | ZGEncryptType | 数据加密上报时的加密方法 | 默认为RSA+AES |
codelessEditorUrl | string | 可视化埋点的设置webSocket域名,私有部署配置 | wss://saas.zhugeio.com |
codelessEventUrl | string | 可视化埋点获取事件的域名 | https://saas.zhugeio.com |
businessKey | string | 该实例对应业务ID | 空 |
uploadEventUrlAndBackupUrl | string | 数据上传主域名与备份域名 | 主域名:https://su.zhugeio.com |
setRSAPubKey | string | RAS加密上传的公钥,设置该字段时,需要同步更改后台privateKey | 详见SDK |
enableExceptionReport | boolean | 是否开启崩溃采集 | false,不开启 |
4.1 崩溃采集
该功能开启之后,SDK可以采集原生代码的部分崩溃信息,并上报到服务器。 崩溃采集信息包括:异常名称、异常描述、发生时间、应用版本、应用包名等信息。
注:
- 如果你同时使用了其他崩溃采集工具或自己采集,请测试兼容性;
- 如遇到问题,请随时联系我们。
4.2 全埋点采集
全埋点采集功能可以自动采集PV和按钮点击事件,全埋点采集默认采集数据:
$page_title:页面标题
$eid":全埋点类型 click / pv
$element_content:控件的文本内容
$element_type:控件的类型
$element_selector:控件的选择器
4.3 页面停留采集
页面停留采集可以自动统计用户在每个 Activity
的停留时长
4.4 设置上传域名
私有部署客户可以通过该参数设置数据上传域名
url
为服务器端数据采集接口所在路径,具体参考2.2节
获取。
backupUrl
为主接口失效时的备份域名,没有可以为空。注意url需包含协议名称,即http还是https。
4.5 数据上传加密
注:此功能需要联系我们开通,仅支持私有化部署
加密算法
当开启数据加密上传时,默认采用的加密算法为国密SM4,你也可以设置SDK采用传统的RSA+AES加密。通过如下接口设置SDK所采用的数据加密算法:
ZhugeParam.setEncryptionType(ZGEncryptType type)
ZGEncryptType
为SDK内部定义的一个枚举类,包含AES_RSA
与SM4_SM2
,默认为SM4_SM2
。
注意,使用国密算法,应用还需在应用的依赖中添加国密算法的SDK,即在引用zhuge的地方添加如下依赖:
implementation 'org.bouncycastle:bcprov-jdk15on:1.69'
implementation 'org.bouncycastle:bcpkix-jdk15on:1.69'
5. 全局初始化配置
在初始化SDK之前,你可以调用各种设置接口,自定义SDK功能,下列接口均需在SDK初始化之前调用。
注意:此处为全局设置,每个SDK实例都会使用该配置。
5.1 开启日志
在SDK初始化之前,调用如下接口开启日志
ZhugeSDK.openLog();
5.2 设置每日上传数量
为了节约用户流量,SDK通过每日上传事件数量限制流量消耗,默认为 50000
事件。你可以根据需要调用如下接口设置该数量,该值每个SDK实例单独计算
ZhugeSDK.setMaxSendSize(int size)
5.3 设置本地最大事件数
SDK在数据上传到服务端之前,会在本地缓存用户的事件。以防止无网或者上传失败时数据丢失,但本地最大保存数量有限制,默认为3000条事件,你也可以调用如下接口自定义该数量,该值每个SDK实例单独计算
ZhugeSDK.setMaxLocalSize(int size);
5.4 自定义设备ID
SDK默认采用uuid作为设备ID,如果你有自己的设备ID标识方案,可以在初始化之前设置,作为设备ID使用
ZhugeSDK.setDid(String did)
6. 主体/实例 初始化配置
在初始化SDK之前,你可以调用各种设置接口,自定义SDK功能,下列接口均需在SDK初始化之前调用。
注意:此处为 对应主体 / 实例配置,仅对配置的对应主体 / 实例生效。
6.1 可视化埋点
6.1.1 可视化埋点开启
在 init 之前针对ZhugeParam开启该功能:
ZhugeParam param = new ZhugeParam.Builder()
.appKey("app key")
.appChannel("your app channel")
.uploadEventUrlAndBackupUrl('上报域名', '备用上报域名')
.enableVisual(true)
.build();
打开开关之后,诸葛SDK启动时会拉取所配置的事件列表,并进行绑定。为保证不遗漏事件,建议在application的onCreate生命周期中初始化SDK。
私有化需结合部署情况设置可视化服务的地址,请在sdk初始化之前,针对ZhugeParam调用如下代码:
//设置可视化设置时的服务器域名,注意格式
String editorUrl = "wss://xxx.zhugeio.com";
//设置获取可视化事件时的服务器域名
String eventUrl = "https://xxx.zhugeio.com";
ZhugeParam param = new ZhugeParam.Builder()
.appKey("app key")
.appChannel("your app channel")
.uploadEventUrlAndBackupUrl('上报域名', '备用上报域名')
.enableVisual(true)
.codelessEventUrl(eventUrl)
.codelessEditorUrl(editorUrl)
.build();
6.1.2 设置可视化埋点
要配置应用的可视化埋点事件,需要你连接诸葛后台的可视化配置界面。要做到这点,需要你在手机上安装开启了可视化埋点的应用,然后用手机扫描页面上的二维码,在下方输入框输入SDK在应用端对应的scheme,默认为123456
。然后点击下方的打开应用,即可开始可视化配置。
若你想更改这个默认的scheme,请在应用的manifest文件的application标签下,添加如下代码
<activity
android:name="com.zhuge.analysis.stat.ZhugeVisualActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:launchMode="singleTask"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
<!--替换下方schem里zgio后面的字符-->
android:scheme="zgio123456"
android:host="visualized" />
</intent-filter>
</activity>
将schem中zgio123456
里的数字部分替换为任何你们确定的字符,例如替换为zgioabcdefg
,然后打包安装至手机。
然后,在输入appId的地方,输入你自定义的字符,例如abcdefg
,然后点击去开启按钮,即可打开应用。
6.2 其他设置
诸葛io支持自己定义SDK数据上传规则,例如:两次会话之间的时间间隔,即在多长时间内重新回到应用算作同一个会话;以及SDK生成的数据达到多少条后开始上传。具体的可定义信息及定义方式如下:
用户通过在Manifest中 <application\>
节点下添加 <meta-data\>
来指定配置。
可指定的配置有:
1.会话间隔,此项指定应用在多长时间内回到应用算作同一个会话。以秒为单位,整数类型,默认为30秒。
<meta-data
android:name="com.zhuge.config.SessionInterval"
android:value="30"/>
2.触发上传记录数,此项指定本地达到多少条数据时可上传。整数类型,默认为1条。
<meta-data
android:name="com.zhuge.config.UploadLimit"
android:value="1"/>
3.数据上传间隔,此项指定若待上传数据未全部上传完成,每个批次间隔N秒上传。整数类型,默认为5秒。
<meta-data
android:name="com.zhuge.config.FlushInterval"
android:value="5"/>
7. 埋点采集
以下接口,对应的SDK实例,均需初始化过才可使用.
注意:下面调用方法是基于 sdk.xxx
进行调用,其中 sdk
为初始化后的SDK实例对象,参考 2.3
章节。
7.1 识别用户
为了保持对用户的跟踪,你需要为他们记录一个识别码,你可以使用用户id、email等唯一值来作为用户的识别码。另外,你可以在跟踪用户的时候, 记录用户更多的属性信息,便于你更了解你的用户:
sdk.identify(Context context, String uid,JSONObject pro);
参数说明:
参数 | 说明 |
---|---|
context | 应用上下文 |
uid | 用户唯一标识 |
pro | 用户属性 |
代码示例:
//定义用户识别码
String userid = user.getUserId();
//定义用户属性
JSONObject personObject = new JSONObject();
personObject.put("avatar", "http://tp4.sinaimg.cn/5716173917/1");
personObject.put("name", "张三");personObject.put("gender", "男");
personObject.put("等级", 90);
//标识用户
sdk.identify(getApplicationContext(),userid, personObject);
7.2 自定义事件
在你希望记录用户行为的位置,自定义事件,调用如下代码:
sdk.track(Context context,String eventName,JSONObject pro);
参数说明:
参数 | 说明 |
---|---|
context | 应用上下文 |
eventName | 事件名称 |
pro | 事件属性 |
代码示例:
//定义与事件相关的属性信息
JSONObject eventObject = new JSONObject();
eventObject.put("分类", "手机");
eventObject.put("名称", "iPhone6 plus 64g");
eventObject.put("价格", 5888); //数值型属性不要带引号
//记录事件
sdk.track(getApplicationContext(), "购买", eventObject);
注意: 在添加事件属性时,需注意事件属性类型。如果事件属性类型为「数值型属性」,需要在上传数据时修改数据类型为「数值型」,并且在诸葛io后台埋点管理中修改为「数值型」。
7.3 事件时长统计
若你希望统计一个事件发生的时长,比如视频的播放,页面的停留,那么可以调用如下接口来进行:
sdk.startTrack(String eventName);
说明:调用startTrack()
来开始一个事件的统计,eventName为一个事件的名称
sdk.endTrack(String eventName,JSONObject pro);
说明:调用endTrack()
来记录事件的持续时长。调用endTrack()
之前,相同eventName的事件必须已经调用过startTrack()
,否则这个接口并不会产生任何事件。
代码示例:
//视频播放开始
sdk.startTrack("观看视频");
//视频观看结束
JSONObject pro = new JSONObject();
pro.put("名称","非诚勿扰");
pro.put("期数","2016-11-02");
sdk.endTrack("观看视频",pro);
注意: startTrack()
与endTrack()
必须成对出现(eventName
一致),单独调用一个接口是无效的。
7.4 设置自定义属性
若有一些属性,每一个事件都要拥有,你可以调用 setSuperProperty()
传入;之后,每一个经过track()
, endTrack()
传入的事件,都将自动获得这些属性。
sdk.setSuperProperty(JSONObject pro);
7.5 收入数据采集
收入数据采集,需调用trackRevenue()方法,自动记录收入事件以及事件属性;price(商品价格)、productID(商品ID)、productQuantity(商品数量)、revenueType(收入类型)为收入事件内置属性,必传项。
具体使用方法如下:
JSONObject revenuePro = new JSONObject();
revenuePro.put("price",229); //数值型属性不要带引号
revenuePro.put("productID","小米NFC手环");
revenuePro.put("productQuantity",2); //数值型属性不要带引号
revenuePro.put("revenueType","手环");
sdk.trackRevenue(this,revenuePro);
7.6 在WebView中统计
如果你的页面中使用了WebView嵌入HTML,JS的代码,并且希望统计HTML中的事件,可以通过下面的文档来进行跨平台的统计。
注意: 如果你的HTML是运行在浏览器的,还是无法进行统计的,以下仅针对使用WebView加载网页的情况。
Java代码集成
首先要找到你的WebView对象,并做如下处理:
WebView webView = (WebView) findViewById(R.id.web);
webView.getSettings().setJavaScriptEnabled(true);
// 注意,此处需使用 ZhugeSDK.ZhugeJS 而不是 sdk.ZhugeJS
webView.addJavascriptInterface(new ZhugeSDK.ZhugeJS(),"zhugeTracker");
JS代码统计
Native 端配置好之后,即可在 html 页面中通过 js 进行移动端的打点,具体统计方式请参照 JS 集成文档,JS 的 sdk 会自动判断页面来自浏览器或 APP,区分事件所属平台。
7.7 元素曝光采集
曝光采集功能默认关闭,需要在 SDK初始化之前设置ZhugeParam进行开启
标记需要曝光采集的元素
一般而言,在view初始化之后调用如下方法进行标记
sdk.viewExpTrack(ViewExposeData data)
关于参数ViewExposeData
参数 | 传参方式 | 是否必须 | 说明 |
---|---|---|---|
view | 构造函数传参 | 必须 | 需要曝光采集的view |
eventName | 构造函数传参 | 必须 | 事件名称 |
prop | setProp() | 非必须 | 曝光时对应的事件属性 |
代码示例:
View view = findViewById(R.id.view);
ViewExposeData exposeData = new ViewExposeData(view, "view曝光");
JSONObject prop = new JSONObject();
prop.put("prop","value");
exposeData.setProp(prop);
sdk.viewExpTrack(exposeData);
7.8 获取会话ID
sdk.getSid()
你可以通过这个接口来获得当前应用所属的会话ID。
7.9 立即上传本地所有数据
sdk.flush()
应用通过诸葛统计的数据,都是先存储在设备上。当应用启动或者设备上存储的事件大于等于5条时,会尝试进行上传。若你想尽快的发送数据,那么可以调用flush()来进行一次数据发送。
7.10 其他API
注意:此处调用的是ZhugeSDK类的接口,而非 sdk对象 的接口,以下信息各主体均为一致信息。
ZhugeSDK.getDid()
你可以通过这个接口来获取当前设备在诸葛体系下的设备标识。
8. 权限说明
标准版
权限 | 说明 | 使用场景和目的 |
---|---|---|
android.permission.INTERNET | 发送网络请求 | 上报数据到服务器 |
android.permission.ACCESS_NETWORK_STATE | 获取网络状态 | 数据采集,获取设备网络信息 |
android.permission.ACCESS_WIFI_STATE | 获取wifi状态 | 数据采集,获取设备wifi信息 |
配置如下:
<uses-permission
android:name="android.permission.INTERNET"/>
<!--需要获取网络状态-->
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"/>
9. 常见问题
9.1 v4.0.0和老版本SDK使用区别
初始化
所有原通过 ZhugeSDK.getInstance().xxx
调用的方法改为 ZhugeParam.xxx
使用。
以 setUploadURL
为例:
v4.0.0之前版本:
ZhugeParam param = new ZhugeParam.Builder()
.appKey("app key")
.appChannel("your app channel")
.build();
ZhugeSDK.getInstance().setUploadURL('上报域名', '备用上报域名');// 此处为老方式
ZhugeSDK.getInstance().initWithParam(context, param);
v4.0.0及之后版本:
ZhugeParam param = new ZhugeParam.Builder()
.appKey("app key")
.appChannel("your app channel")
.uploadEventUrlAndBackupUrl('上报域名', '备用上报域名')// 此处为新方式
.build();
ZhugeSDK sdk = ZhugeSDK.getInstance();
sdk.initWithParam(context, param);
具体变化如下:
ZhugeSDK.getInstance().openDebug();// 是否开启实时调试
ZhugeSDK.getInstance().openExceptionTrack();// 是否开启崩溃采集
ZhugeSDK.getInstance().openAutoTrack();// 是否开启全埋点
ZhugeSDK.getInstance().openVisual();// 是否开启可视化采集
ZhugeSDK.getInstance().enabelDurationOnPage();// 是否开启页面停留时长采集
ZhugeSDK.getInstance().enableExpTrack();// 是否开启曝光采集
ZhugeSDK.getInstance().setupCodelessUrl(String url);// 设置可视化埋点的 Websocket 域名
ZhugeSDK.getInstance().setupCodelessGetEventsUrl(String url);// 设置可视化埋点的远程事件获取 URL 域名
ZhugeSDK.getInstance().setUploadURL(String url ,String backupUrl);// 设置数据上传域名
ZhugeSDK.getInstance().setZGSeeEnable(boolean enable);// 注意:此方法已经废弃
ZhugeSDK.getInstance().setEncryptionEnable(boolean enable);// 开启数据上传加密
ZhugeSDK.getInstance().setEncryptionType(ZGEncryptType type);// 设置数据加密类型
ZhugeSDK.getInstance().setRSAPubKey(String key);// 设置数据加密rsa公钥
变更为
ZhugeParam params = new ZhugeParam.Builder()
//设置appKey
.appKey("appkey")
//设置appChannel
.appChannel("zhugeio-demo")
//对该实例启用实时调制
.enableDebug(true)
//启用页面时长统计,启用全埋点
.enableDurationOnPage(true).enableAutoTrack(true)
//设置事件上传域名
.uploadEventUrl("https://zhugeio.com")
//设置业务ID,每个appKey对应一个业务ID
.businessKey("业务1")
//开启数据加密上传
.enableEncryption(true)
//设置数据加密类型,默认为AES_RSA
.setEncryptionType(ZGEncryptType.AES_RSA).build();
//通过上述配置初始化默认SDK实例
ZhugeSDK.getInstance().initWithParam(context, params);
具体方法含义参照 第4节
文档。
移除内容
ZhugeSDK.getInstance().setEncryptionType(int type);
ZhugeSDK.getInstance().setLogLevel(int level);
ZhugeSDK.getInstance().setPersistenceStorage(boolean enable);
ZhugeSDK.getInstance().cacheDataEncode();
ZhugeSDK.getInstance().isEnableCacheDataEnacode();
调用方法升级(兼容之前的调用方法)
之前为 ZhugeSDK.getInstance().xxx()方式调用,现同时支持如下方法调用:
ZhugeSDK.setMaxLocalSize(int size);
ZhugeSDK.setMaxSendSize(int size);
ZhugeSDK.openLog();
ZhugeSDK.setDid(String did);
ZhugeSDK.getDid();
9.2 移动端使用v4.0.0及以上版本 和 低于v4.0.0的js sdk做h5打通的兼容问题
H5上报数据数据均会上报至默认主体/实例
,即通过ZhugeSDK.getInstance()
初始化主体/实例。
9.3 移动端使用v4.0.0及以下(之前)版本,js sdk使用v4.0.0以上版本的H5打通兼容问题
- 若 不使用多主体/多实例场景,无影响。
- 若 使用多主体/多实例场景,H5上报数据均会上报至
默认主体/实例
,即通过ZhugeSDK.getInstance()
初始化主体/实例。