新的事件发送定义(讨论中).md
4.84 KB
##CHANGELOG ###[2016-02-16]
Add
- 追加MNS授时问题的解决方案
###[2016-01-12]
Changed
- profile相关事件追加
###[2015-12-26]
Changed
- 心跳时间从3分钟降低为1分钟
##1、格式的定义 提交地址:URL?TOKEN=XXXX,参考:MNS
目前测试用提交的服务器地址为:http://1296825402699921.mns.cn-hangzhou.aliyuncs.com/queues/boxfish-log-v2-test
- queueURL: http://1296825402699921.mns.cn-hangzhou.aliyuncs.com
- queueName: boxfish-log-v2-test
method:POST
事件格式(事件之间有序)
[event,...]
event定义(事件内部无序)
{
"app_key":"应用标示",
"user_id":"用户唯一标示,可以为空",
"device_id":"设备唯一标示(IDFA,OPENUDID)",
"event_id":"事件唯一标示GUID",
"key":"自定义事件名称",
"time":"时间戳(单位:毫秒)",
"type":"调取的方法",
"properties":{"自定义参数":"键值对的形式"}
}
参数级别按先后顺序分为:系统级,会话级,事件级
- 系统级:系统启动时由SDK获取到的系统信息,固定以$开头
- 会话级:在整个会话的生命周期里的全局参数(可以修改)
- 事件级:在当前事件里的参数
最后上报的事件为这三个级别依次叠加后的结果。
系统级参数
参数 | 级别 | 栗子 | 定义 |
---|---|---|---|
$lib | 系统 | iOS |
SDK类库 |
$lib_version | 系统 | 1.2.0 |
SDK库版本 |
$os | 系统 | iPhone OS |
操作系统 |
$os_version | 系统 | 9.1 |
操作系统版本 |
$model | 系统 |
iPod touch or x86_64
|
硬件型号 |
Apple Watch 38mm 不重要 |
|||
$screen_width | 系统 | 1024 |
屏幕宽度 |
$screen_height | 系统 | 768 |
屏幕高度 |
$manufacturer | 系统 | Apple |
制造商,默认值为:UNKNOWN |
$app_version | 系统 | 655 |
编译号(Bundle version) |
$app_release | 系统 | 1.0 |
语义化版本号(Bundle versions string, short) |
xxxxxxxx |
|||
北京 |
|||
北京 |
|||
中国 |
|||
1 or 0 |
|||
$ip | 会话 | 192.168.0.110 |
IP(目前从http://user.i.test.boxfish.cn/ip 来获取),默认值为:UNKNOWN |
$network | 会话 |
NULL or 2G or 3G or 4G or WIFI
|
网络状态 |
$carrier | 会话 | 中国联通 |
运营商,默认值为:UNKNOWN |
type的取值
类型 | 说明 | 备注 |
---|---|---|
begin_session | 应用启动 | 应用启动或进入前台时自动触发 |
end_session | 应用关闭 | 应用启动退出到后台或者关闭时自动触发 |
session_duration | 心跳 | 应用每1分钟发出一次 |
track | 普通监测 | 只有这个事件才有key属性 |
track_signup | 注册监测(服务器会对用户进行处理) | 用于第一次注册 |
profile_set | 设置profile | 批量存放properties为用户属性,覆盖所有已存在的属性 |
profile_set_once | 设置一次profile | 批量存放properties为用户属性,只有当属性不存在时才保存 |
profile_unset | 取消设置profile | 批量删除已经存在的属性,如果不存在,则不删除 |
profile_increment | profile自增长 | 可以对已经存在的属性进行增减,必须已经存在,且为int或者float类型,参数可以为负数 |
profile_append | profile追加 | 这个是什么鬼? |
profile_delete | profile删除 | 删除该用户 |
##2、缓存机制
A. 离线缓存 所有离线事件均进行缓存,当有网络后,会批量发出这些事件。
B. 服务器确认 如果服务器未能确认成功接收事件,则隔一段事件后,需要重新发出
C. 服务器去重 服务器会记录已经发出事件的GUID,如果某GUID已经接收过,则不会将该事件再次记录,返回客户端消息成功接收(重复信息)。
D. 服务器重排列 服务器会定期梳理事件,尽可能保证last_event_id的事件在event_id的前面。如果出现循环,丢失等情况,则略过。
##3、MNS授时问题 由于我们采取的方式为客户端将事件直接发送给MNS服务器,而用户设备的时间是否准确直接影响到MNS到底能否正确接收,所以这里出现了授时问题,解决方案如下:
- 提交时如果response状态码为:408,则发生了授时问题,此时需要通过response拿到正确的服务器时间
- 拿到正确的服务器时间后计算与本设备的时间偏移量并保存起来
- 拿当前时间加上偏移量重新计算签名并重新提交
##参考: