1. HTTP数据上报
本方案适用于不方便在App产品内直接集成Hubble SDK,但是对数据实时性要求又比较高的场景
具体的方式是,由App开发者在App运行时按照 “事件-用户” 模型组织数据并通过Hubble开放的http接口主动推送数据。目前,这种方式仅支持Android和iOS应用
1.1. 定义数据
事件数据
字段名 | 字段描述 | 数据类型 | 是否必填 |
---|---|---|---|
userId | 用户 ID | string | 必填 |
deviceUdid | 设备 ID | string | 非必填 |
dataType | 数据报文类型(默认外部事件 e) | string | 必填 |
sdkType | sdk类型 (Android / iOS) | string | 必填 |
eventId | 事件 ID | string | 必填 |
time | 事件发生时间(绝对毫秒) | long | 必填 |
costTime | 事件耗时(毫秒) | int | 非必填 |
appKey | 应用标识 | string | 必填 |
sessionUuid | 会话 ID | string | 非必填 |
ip | 客户端ip | string | 非必填 |
country | 国家 | string | 非必填 |
region | 省份 | string | 非必填 |
city | 城市 | string | 非必填 |
appVersion | app版本 | string | 非必填 |
appChannel | app渠道 | string | 非必填 |
devicePlatform | 设备平台 | string | 非必填 |
deviceOs | 操作系统 | string | 非必填 |
deviceOsVersion | 操作系统版本 | string | 非必填 |
deviceModel | 设备机型 | string | 非必填 |
deviceManufacturer | 设备制造商 | string | 非必填 |
deviceResolution | 设备分辨率 | string | 非必填 |
useWifi | 是否使用wifi | string | 非必填 |
screenWidth | 分辨率(宽) | string | 非必填 |
screenHeight | 分辨率(高) | string | 非必填 |
deviceCarrier | 网络运营商 | string | 非必填 |
networkType | 联网类型 | string | 非必填 |
localeLanguage | 本地语言 | string | 非必填 |
category | 事件类别 | string | 非必填 |
label | 事件标签 | string | 非必填 |
attributes | 事件自定义属性 | map | 非必填 |
// 自定义事件demo数据
{
"userId": "18921895133",
"deviceUdid": "5cc9531c48a0e12a7143c13bee058166e9e9d8e1",
"dataType": "e",
"sdkType": "iOS",
"eventId": "clickButton",
"time": 1434556935000,
"costTime": 20,
"appKey": "MA-XXXX-437494F370B3",
"sessionUuid": "1234-342423-232",
"ip": "172.0.0.1", // 用于解析下面的国家-省份-城市信息 最好填入
"country": "中国",
"region": "浙江",
"city": "杭州",
"appVersion": "3.2",
"appChannel": "appstore",
"devicePlatform": "iPad",
"deviceOs": "iOS",
"deviceOsVersion": "7.0",
"deviceModel": "iPhone6",
"deviceManufacturer": "Apple",
"deviceResolution": "640x960",
"userWifi": "true",
"screenWidth": "640",
"screenHeight": "960",
"deviceCarrier": "中国移动",
"networkType": "4G",
"localeLanguage": "en",
"category": "首页",
"label": "我喜欢的",
"attributes": {
"userfrom": "baidu",
"lastPage": "个人信息页"
}
}
用户数据
字段名 | 字段描述 | 数据类型 | 是否必填 |
---|---|---|---|
userId | 用户ID | string | 必填 |
$account | 用户账号 | string | 非必填 |
$realName | 用户姓名 | string | 非必填 |
$birthday | 用户生日 | string | 非必填 |
$age | 用户年龄 | int | 非必填 |
$gender | 用户性别 | string | 非必填 |
$country | 常用地址-国家 | string | 非必填 |
$province | 常用地址-省份 | string | 非必填 |
$city | 常用地址-城市 | string | 非必填 |
attributes | 用户自定义属性 | map | 非必填 |
// 用户demo数据 通过da_user_profile事件组织数据
{
"eventId": "da_user_profile",
"dataType": "ie",
"appKey": "MA-TF52-SDDFE56U1233",
"userId": "ABCDEF123456789",
"attributes": {
"$userProfile": {
"$type": "profile_set" // 必带 说明是用户属性
"$account": "hubbletest@163.com", // $开头的字段为公共字段
"$realName": "王磊",
"$birthday": "1990-09-10",
"$age": 28,
"$gender": "male",
"$$country": "中国",
"$province": "浙江",
"$city": "杭州",
"vip": "黄金", // 非$开头字段为业务自定义字段
"nickname":"小王王"
}
}
}
说明: 1. 事件数据和用户数据均定义成标准json格式,并且key区分大小写,请和上述文档保持一致 2. 最终发送数据时,json数据需要进行base64编码 3. 事件-用户数据字段说明中的非必填字段,建议开发同学在条件允许情况下竟可能的填入,方便后续在Hubble的各个分析功能中使用 4. 用户数据是通过da_user_profile
事件进行组织的,所有的用户属性都设置到attrubutes.$userProfile
字段中,$
开头的字段为Hubble公共字段,解析时如果遇到$
开头的非公共字段则直接丢弃。目前只支持基础类型字段,不支持map
和array
5. 虽然本方案未直接使用SDK采集数据,但是仍然需要开发方发送sdkType
字段,默认Android / iOS
6. 在定义数据时,请尽量使用公共字段,公共字段不满足业务需求时才自定义属性
1.2. 推送接口
数据发送接口说明
接口地址:https://hubble.netease.com/track/s/?data=base64_data
唯一参数:data
发送方式: get
请求头部:增加两个参数
1. X-SHA1-APPKEY APPKEY的SHA1加密值
以java发送为例:
httpGet.addHeader("X-SHA1-APPKEY", SHA1Util.encryptSHA(appkey));
具体sha1加密,自行参考实现
2. X-CLIENT-IP
移动客户端IP,获取不到可以设置为空
发送数据demo
https://xxx.xxx.com/track/s/?data=eyJldmVudElkIjoidGhyZWFkLXRlc3QiLCJkYXRhVHlwZSI6ImUiLCJpcCI6IjEyMy4xMjMuMTIzLjEyMyIsInNka1R5cGUiOiJzZXJ2ZXItamF2YSIsImF0dHJpYnV0ZXMiOnsiJHRpbWUiOjE1MDE2NjUwMjk5MTYsIm9zIjoid2luZG93cyIsIm9zVmVyc2lvbiI6IjEwLjEuMyIsImlwIjoiMTIzLjEyMy4xMjMuMTIzIiwiQ2hhbm5lbCI6ImJhaWR1In0sInNka1ZlcnNpb24iOiIxLjAuMCIsImFwcEtleSI6Ik1BLTZSV0UtUVdIS0hFS0RGMTIiLCJ0aW1lIjoxNTAxNjY1MDI5OTE2LCJ1c2VySWQiOiJsaWJ1eWktdGVzdCJ9
注意:
如果你最终选择这种发送方式,请一定先与Hubble开发人员进行联系,为你进行详细说明