设防、撤防状态通知解决方案

Author : 李宗

Data: 2016年9月9日


术语缩写和解析

  1. 设备状态 ➯ 设备当前的状态,防御状态或者未防御状态
  2. 设防 ➯ 发送指令,让设备变成防御状态 设防成功后,车辆进入防御状态,擅自挪动会触犯告警,同时客户端会收到通知.
  3. 撤防 ➯ 发送指令,让设备变成未防御状态
  4. 操作 ➯ 设防、撤防操作
  5. 操作状态 ➯ 进行撤防、设防操作后,服务端对这条指令返回的执行状态,注意不是设备状态 用户操作指令发出后后,服务端立即返回的操作状态可能是 待发送待处理离线待发完成一般是待发送,等数秒后(指令生效需要时间),再去请求API查询这条指令的状态,如果返回完成,则表示这条指令已经生效了.
  6. 待发送待处理的状态区别不理解,离线待发不理解,需要宁波方面做下说明

目标

要求用户在我们的app或者网页上进行操作的时候,无论成功或者失败,我们的系统应及时通知到用户.

痛点

由于操作需要发送指令给设备,再加上中间的网络传输加上设备响应和服务器相关业务逻辑,导致用户在客户端上进行操作后,不能及时获取到操作是否成功。用户不清楚操作成功与否的情况下,会对车辆的安全构成隐患.

解决思路

  • 区分入口

    目前客户端有App和微信内置网页两个入口,故应有对应的解决方案.

    客户端调用操作接口的时候,也应该带上自己的客户端标志,以区分自己是App还是微信内网页.

  • App客户端
    1. 个推推送

      利用App的推送通知栏消息:用户操作之后,客户端提示“指令已经发送成功,1分钟内生效”;待操作成功后(大约要20-60秒),由宁波服务端使用个推接口给我们客户端App推送操作成功或者失败的消息,客户端App拿到消息后,创建通知栏消息展示出来,同时发出提示音和震动.

    2. 延迟轮循数据

      用户设防操作之后,客户端提示“设防指令已经发送成功,1分钟内生效”,同时客户端创建一个异步延时轮询任务:20秒后客户端主动去调用API接口查询操作状态,

      如果操作状态是 完成,则表示指令生效,客户端App创建通知栏消息展示出来,同时发出提示音和震动;

      如果是其他操作状态,则开启轮询,每10秒获取一次状态,直到状态是完成为止.

  • 微信内网页
    1. 模版消息通知

      利用微信认证服务号接口:用户操作之后,客户端提示“指令已经发送成功,1分钟内生效”;待操作成功后(大约要20-60秒),由宁波服务端使用微信接口让公众号给用户微信推送推送操作成功或者失败的消息.只有用户关注了该公众服务号号才可使用

    2. 界面提供下拉刷新

      考虑到手机网页本身的限制和用户不会在一个网页界面等待停留(用户不在这个页面或者将浏览器切换到后台程序时,这个页面的所有代码、逻辑都不会执行),没有采用轮询机制或者是websocket推送,而是在界面提供一个下拉刷新组件,让用户自己手动去下拉刷新更新数据,获取到最新设备状态 ,这种方式可以配合上面几种方式一起使用.

  • 建议(重要)

    上述方法的 个推推送模版消息通知 都存在一个问题,就是过分依赖于宁波服务器,像用 个推给app推消息、给微信推消息这种业务动作不应该由基础平台来做,而是由 接口消费方(对于宁波来说,上海这边就是接口消费方)来做,故希望加入接口回调机制 ,类似于支付回调,就以本次的设防撤防接口在App中的场景为例:

    1. 首先是客户使用App客户端进行了设防操作,客户端会发送请求到上海服务器;
    2. 上海服务器拿到请求后,将请求处理下转发给宁波服务器,格式类似于:

      http://宁波服务器.com/api?callback='http://上海服务器.com/receive'&else=123

      注意:⚠️这时候会给宁波服务器一个很重要的参数callback,这个callback是一个上海服务器的http url地址

    3. 宁波服务器拿到请求后,马上向车卫士的硬件设备发送指令,同时返回一个操作状态 给上海服务器,大意就是你的请求俺收到了,这个callback参数就是你的地址是吧,好!等处理好了俺去这个地址再通知你~

    4. 然后上海服务器收到了回信,就高高兴兴的把消息给了客户端;客户端一看,忙完了告诉我?总不能让客户耗着吧,就先给客户打个定心丸吧,就说“已经向您的爱车发送设防命令,1分钟内生效,结果会推送给您”.

    5. 宁波服务器这边接着第3步,这时硬件设备和宁波服务器说,“你让我干的事我好了”;宁波服务器得信后,马上根据callback参数上的url地址,找到上海服务器对接的,说俺好了.

    6. 上海服务器这边得令后,就开始掉用个推推送接口,给用户客户端发消息;客户端收到消息后,创建通知栏消息展示出来,同时发出提示音和震动.

    然后没有然后了

以上就是全部,如有理解错误,请指正。

results matching ""

    No results matching ""