定位
(在线定位)
2016 年 10 月
文档说明
类型 版本 时间 创建人 备注
新建 2016-10-13 李欣欣
目录
1 概述 ........................................................................................................................................ 4
2 so 库设计 ............................................................................................................................... 5
so 库瘦身 ........................................................................................................................ 5
数据收发部分 ......................................................................................................... 5
dr 部分...................................................................................................................... 5
定位 log .......................................................................................................................... 5
so 库接口 serverInput() ........................................................................................... 6
log 文件 ................................................................................................................. 7
so 库接口 setOption() .............................................................................................. 7
3 SDK 设计及描述 ..................................................................................................................... 9
jar 包瘦身 ........................................................................................................................ 9
定位 log 回传 ................................................................................................................. 9
so 库接口 setOption() .............................................................................................. 9
回传时间点 ............................................................................................................ 10
回传接口 ............................................................................................................... 10
log 记录模式 ............................................................................................................. 10
数据扫描状态 ....................................................................................................... 11
模式切换 ............................................................................................................... 12
so 库接口 serverInput() ......................................................................................... 12
lbs_id 分配接口 ............................................................................................................ 13
4 回传 log 分析 ...................................................................................................................... 16
1 概述
针对在线定位进行优化,后续和离线定位版本进行分离,在推广时建议主推在线版本。
目的:
1 缩小定位 sdk 的大小,优化 sdk 定位效率,方便第三方集成;
2 定位 log 的收集,方便后续数据分析;
2 so 库设计
后续定位 so 库分为两个版本:在线版本、离线版本(或者称混合版)。
版本号:
主版本号:在线版本、离线版本保持一致;
次版本号:在线版本使用奇数(eg: ),离线版本使用偶数(eg: )。
在线版本目标:
配合 web 地图一起使用。
改进内容:
对 so 库瘦身(期望大小在 50kb 左右),用 c 重构的内容包括:数据收发部分,dr;
存储定位 log。
so 库瘦身
去除离线定位部分的代码,只保留在线版本所必须的,同时用 c 语言进行改写这部分代码。
数据收发部分
先只保留数据加密、数据收发部分代码,进行初步验证。
dr 部分
在数据收发部分完成后,再把 dr 部分的进行重构。
定位 log
总体流程如图:
so 库接口 serverInput()
接口参数修改,如下:
<Locating>
<ver>SdkVersion</ver>
<loc_status>定位状态:0,定位状态;1,非定位状态,此时记录 log</loc_stat>
<key>appKey</key>
<u>userId</u>
<user_info>用户信息,最长 127 个字符</user_info>
<t>timestamp</t>
<p>deviceType</p>
<gps>#longitude$latitude$accuracy</gps>
<aps>#apMac$rss$frequence#apMac$rss$frequence...</aps>
<beacons>#beaconMac$rss#beaconMac$rss...</beacons>
<acc>#accX$accY$accZ#accX$accY$accZ...</acc>
<mag>#magX$magY$magZ#magX$magY$magZ...</mag>
<cp>#compass$pitch$roll#compass$pitch$roll...</cp>
<pre>#pressure#pressure...</pre>
</Locating>
log 文件
1 log 文件命名
规则:
location_off + 日期 +
说明:
• 日期,准确到天,格式,20161009
• lbs_id,api 接口返回的 lbs_id,该字段为字符串
eg:
2 文件加密
格式为:
分隔符(4 字节)+ 时间戳(4 字节)+ 数据长度(4 字节) + 数据
说明:
• 分隔符,4 字节,固定为“FFFFFFFF”;
• 时间戳,4 字节,unix 时间戳,准确到 s;
• 数据长度,4 字节,无符号整数,为数据的长度;
• 数据,内容为给定位引擎发送的二进制流;
• 所有二进制文件都采用网络大端存储。
so 库接口 setOption()
public static native int setOption(String options);
接口参数 options:
<option>
<log_filepath>log 文件的完整路径</log_filepath>
<log_max_size>log 文件的最大大小,单位 kb</log_max_size>
</option>
3 SDK 设计及描述
后续定位 sdk 分为两个版本:在线版本、离线版本。
本期改进内容:
• 对 jar 包瘦身去除不必要的代码
• 定位 log 回传;
• 模式切换
jar 包瘦身
只保留必要功能,去除离线数据下载部分
定位 log 回传
so 库接口 setOption()
public static native int setOption(String options);
参数 options:
<option>
<log_filepath>log 文件的完整路径;每天一个文件</log_filepath>
<log_max_size>log 文件的最大大小,单位 kb;文件大小初步限制为 1024kb</log_max_size>
</option>
log 文件命名
规则:
location_off + 日期 +
说明:
• 日期,准确到天,格式,20161009
• lbs_id,api 接口返回的 lbs_id,该字段为字符串
eg:
回传时间点
当用户开始定位,并且是 wifi 链接状态时对最近 10 天的 log 进行回传。
回传接口
上传接口为以前的文件上传接口,接口如下:
WEB_URL + rtmap_lbs_api/v1/rtmap/sdklog_upload
说明:
WEB_URL 为 api 的 url 链接
log 记录模式
sdk 的运行状态分为两种:
• 定位模式 正常的定位状态,所有的功能和目前实时定位是一致的;
• log 记录模式 停止定位后的状态;
基本流程如下:
数据扫描状态
修改扫描状态如下:
模式切换
当定位关闭后进行模式切换判断,切换至 log 记录模式的依据为:最后一次定位成功时
间与当前时间不超过预定值 M(假设为 10min),开始进入 log 记录模式。
当 log 记录模式的时间与最后一次定位成功时间超过预定值 M(假设为 5min)时退出
log 记录模式。
so 库接口 serverInput()
不同的模式给 so 传送的参数不一样,具体如下:
<Locating>
<ver>SdkVersion</ver>
<loc_status>定位状态:0,定位模式;1,log 记录模式,此时记录 log</loc_stat>
<key>appKey</key>
<u>userId</u>
<user_info>用户信息,最长 127 个字符</user_info>
<t>timestamp</t>
<p>deviceType</p>
<gps>#longitude$latitude$accuracy</gps>
<aps>#apMac$rss$frequence#apMac$rss$frequence...</aps>
<beacons>#beaconMac$rss#beaconMac$rss...</beacons>
<acc>#accX$accY$accZ#accX$accY$accZ...</acc>
<mag>#magX$magY$magZ#magX$magY$magZ...</mag>
<cp>#compass$pitch$roll#compass$pitch$roll...</cp>
<pre>#pressure#pressure...</pre>
</Locating>
lbs_id 分配接口
请求方式为 https 链接方式(https 资源由部门去申请)
接口:
:8080/rtmap_lbs_api/v1/rtmap/lbsid
1 请求(post)
{
"key": "1234567890",
"pakagename": "",
"sdkversion": "",
"otheruid": "123456789",
"mac": "000302947123",
"imei": "1234567890",
"idfa": "1234567890",
"idfv": "1234567890",
"tel": "13512345678",
"deviceid": "1234567890",
"device_type": "note7",
"device_brand": "eg:sumsung",
"cpu_type": "arm 64",
"os_version": "",
"android_id": "1234567890"
}
说明:
key:智慧图的 key
pakageName:app 的包名
sdkVersion:jar 包版本
otherUid:第三方平台的用户 id
mac:手机的 mac
imei:imei 号
idfa:广告标识
idfv:提供厂商标识
tel:手机号
deviceID:手机串号
deviceType:手机型号,eg:sumsung、note7
deviceBrand:手机品牌
cpuType:cpu 型号
osVersion:系统版本
android_id:在设备首次启动时,系统会随机生成一个 64 位的数字,并把这个数字以
16 进制字符串的形式保存下来,这个 16 进制的字符串就是 ANDROID_ID
2 返回
{
"result": {
"req": "lbsid",
"error_code": "0",
"error_msg": "Success"
},
"lbsid": "408a237dfba171239b13cbdffc5db974", // 32 个 0 的用户 id,默认为空字符串
"delaylocate_time": "0", // 0 次
"log_record_time": "300", //log 记录模式下的超时时间 M,单位 s
"bei_md5": "408a237dfba171239b13cbdffc5db974", //bei 文件的 md5
"bei_url":
"
", //bei 文件的下载链接
"isbadlog_return": "1", // 1 生效
"isphone_whitelist": "1", // 1 生效
"expiration_time": "1473478588392" // 7 天后的 utc 时间
}
说明:
lbsID:lbs 分配的统一 id,string,32 个字符
delayLocateTime:延时定位时间,int,单位次
isBadLogReturn:错误定位 log 回传是否启用,1 生效,0 不生效
isPhoneWhiteList:手机白名单是否生效,1 生效,0 不生效
expirationTime:lbsid 过期时间,日期时间格式
bei_url:bei 文件下载地址
bei_md5:bei 文件的 md
4 回传 log 分析
log 向后兼容考虑:
时间戳 在 log 文件中已经保存了改字段
是否为定位 log 通过回传的 log 就可以获知。
log 已经在服务器上存储,等 log 达到一定量级后进行设计。