前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >部网络货运信息交互系统位置信息插件SDK接入总结

部网络货运信息交互系统位置信息插件SDK接入总结

作者头像
莫空9081
发布2023-10-16 10:09:31
3070
发布2023-10-16 10:09:31
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录

背景

APP接入部网络货运信息交互平台,这里记录一下接入想法和过程。

实现

iOS SDK提供的方法,共有下面6个

  • init
  • start
  • send
  • pause
  • restart
  • stop

看起来很简单,但是需要考虑SDK某个方法可能会失败,而且可能会有同一个司机多个托运单、或者同一托运单分段多个司机运输以及托运过程中换车、司机运输中换手机等场景,想要持续记录位置信息,完成完整的一个单据链路就不那么容易了。

而这些场景的处理,需要服务端的协助,但是服务端没有和部网络货运信息平台直接交互的接口,无法直接从货运信息平台读取状态和数据,所以处理就显得麻烦了。

我们的设想是,服务端兜底处理异常,所以,首先要让服务端知道当前处理的单据和步骤,故而需要一个记录接口,每次执行SDK的方法后,成功或失败都同步给服务端。

为了避免出现其他手机或其他用户或后台手动关闭单子的情况,需要服务端提供另一个查询是否有待结束运单的接口,同样,这个接口在每次执行SDK的方法后,都要调用,用于获取是否有待关闭的运单。

而还有一种情况,即用户开始运单后,APP被杀掉了再次打开时,这时候应该执行SDK的什么方法?或者司机中途换了另一个手机登陆了账号,这时候原手机上再次打开应该执行什么方法?新手机上应该执行什么方法?所以需要一个查询接口,用于这种情况下查询待执行的步骤。

但是问题来了,同一个司机,由于顺路或者车型大的原因,可能同时有多个运单,而每个运单的间隔发送时间不一定相同?所以如何同时开启多个timer,不会混乱,且又能保证运单结束后,关闭对应的timer?通过运单号和分单号作为key,创建timer封装到单独的Model中,model作为value,存储在字典中。每次要创建timer前,根据运单号和分单号查询对应timer是否存在,存在则不重复创建;不存在则创建。当执行了SDK 的Stop或Pause方法后,同样的方法获取到对应timer,然后停止这个timer。

但在实际中,遇到了SDK由于某种原因Stop失败,实际上这个运单已经结束的情况;还遇到了SDK执行方法成功,但是保存状态到服务端时失败的情况。这些异常情况,单独根据同步记录表是没有办法处理的,只能从业务表中获取对应状态后,再返回对应要执行的方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档