iOS下结合高德地图司机打卡整理
业务描述:司机根据后台人员排的班次进行自动打卡无需任何操作
需求:司机在时间范围前一分钟后五分钟在范围则自动打卡.
前后10分钟出范围自动打卡.上班次延误未超过下趟班次的到达时间,可以在出范围进行打卡.到站打卡只和范围有关.
1.由于后台数据经常存在变化的情况,前台在无当前班次的情况定时刷新,一分钟刷新一次或者手动拉取刷新.
2 定时传位置需要重传,打卡状态允许离线打卡.
3 班次类型具有正常班次和滚动班次的区别,正常班次跟时间地点有关,滚动班次只和地点有关系
4 滚动班次可以设置手动设置当前班次.也可自动匹配.
5 司机允许异常手动出发打卡和结束异常到站打卡,其实可以设置个最大允许次数,手动打卡每天可以定一些规则次数允许只允许有4次
6 司机账号只允许单点登录
实现思路:
主要几个模块
1.单例的定位管理模块内容主要管理当前班次和所有班次的数组维护其状态
2.单例管理的单独用于所有的失败请求重传 失败的任务存到本地fmdb存下,网络变化时检测任务有则传
3.由于对网络和定位等要求很高.所有控制器继承基类包括检查网络状态的情况和定位权限的更改,退出当前账号的处理
说说遇到最坑的地方吧.
遇到一个空指针异常奈何收集不到bug,因为我不去现场.产生bug的原因是本地存储了失败的任务,打卡的接口需要传经纬度,重启app时会自动重传失败任务,但是定位回调不一定先返回值,导致崩溃。还有一个是由于后台说那个字段不可能为空,结果还是有几率返回空.找到这个bug先后通过极光,bugly,iOS自带的拦截异常发现不行,极光,只能拦截到ns系列的异常,bugly能拦截到swift的异常但是全是地址符。一堆汇编地址.找的到就有鬼了.最后通过xcode的ipa 果然就定位到了曲折. 只不过没那么即时.好歹解决了