基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札

这段时间挺忙的,微信企业号等微信系列的教程全部停滞了,原因是我手头上抓着几个项目,加班就不说了,今天刚刚把新接手的项目整到大概%80的样

子吧,准备明天整整,星期一过来直接对接测试,很多朋友跑过来问问题,我是真没时间,请见谅!

今天就分享下这个项目的总结,源码就不粘贴了,因为是商业项目,只是传达下编码思想,希望其他朋友在遇到类似项目的时候有个参考,不至于找不到

一点点思路

使用UDP进行通讯,每条指令不超过1024字节,所有多字节整形数据采用网络字节顺序传输。终端每上报一条指令,平台都将回复一条通用确认。终端如

果未收到通用确认,建议重发三次

? 位置上报: 根据参数设置的定时间隔,上报当前的GPS定位信息和状态信息

? 心跳:根据参数设置的心跳间隔,上报心跳信息

? 拍照:接收平台拍照指令,进行拍照;或者出现异常状态自动拍照;

? 图片上传:将照片逐包上传到平台,并支持平台的补包请求

? 接人请求:接收平台的接人请求命令,调用导航接口,传输目的地经纬度给导航系统,实现自动导航

? 广告显示:接收中心下发的广告显示指令,进行广告显示和TTS播报(调用TTS接口)

?

一.界面显示

APP基本上不需要界面显示,唯一显示的是广告显示功能。

要求广告显示使用浮动窗口,规定窗口的位置和大小,规定字体,根据协议里面规定的停留时间进行显示,超过停留时间后自动消失。

在用户(个体微信用户)对微信服务器(微信公众平台)进行一系列的操作之后,第三方服务器会将一系列的信息通过通信,找到对应的终端号设备,而在这个唯一的 设备 ID 下,我们需要进行包的验证和采集,解析并且分发协议,给出相对应的操作,听着说起来是不是很简单?事实却不是你想的那样,呵呵,相信每个程序员都理解这句话的深意!

微信个体用户进行远程控制操作:

比如红框,用户点击车辆定位,指令先是通过公众号到达第三方服务器,这时候第三方需要做的就是接收并且根据key进行相对应的数据报发送,前提需要终端很微信号绑定,才能继续下面的流程,第三方服务器通过端口和唯一ID外加一个双方规定的数据报长度,异域值等相关验证用户有效性的条件

这个就是终端再接收到来自第三方的UDP包,经过匹配和验证之后很具协议分发做出需要做的操作,这是byte[] context 部分,其他的字节没有贴上来

,忘了说,就是在收发包的时候还要判断IP,PORT等

移动报警跟微信接人,因为涉及一些私密信息,所以我口头说说大致的流程

移动报警(震动警告):

大家都玩过微信的摇一摇吧?就是一个重力传感器,在硬件通过串口跟软件接在一起,通过一个重力感应,加速度,震动之类的,根据代码设置的阀值作出相应的警报,实现这个功能需要我们调用 hardware.SensorEventListener 这个接口

通过实现这个接口的2个函数,判断x,y,z坐标变化情况

double speed = Math.sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)/timeInterval * 10000;

//达到速度阀值,发出提示

if(speed >= SPEED_SHRESHOLD){

// 震动报警

handler.sendEmptyMessage(SENSOREVENT_STATE);

}

onSensorChanged(SensorEvent event) 在这个函数里做操作,我测试的时候,一旦受到重力影响或者摇晃终端设备,就会播报相关TTS,同时也会出发一条UDP向第三方服务器推送到用户的手机上

微信接人:

就是微信微信个别用户点击Menu之后,第三方服务器就会将这个用户的当前经纬度发送到终端,而终端需要做的还是验证包,解析,分发处理,解析出来之后通过转换参数得到可以导航的经纬参数,调用接口,这个相对容易,最麻烦的还是协议的封装,解析,验证,封包等

另外还需要对ACC的状态进行侦听,因为项目需要用到这个状态,而这个状态需要访问GPIO口,并且需要主动调用,考虑到这个状态的需要性,也为了不必要的内存浪费和OOM,我在后台新起子线程每隔5s获取一次ACC状态,并且标记,在上报位置的时候取标志位就OK了,还有就是当定位失败的时候需要填充的字节需要自己算好,跟封包也要算好,否则程序绝对崩溃!

还有个广告推送的,

因为应用没有Activity没有启动图标,是后台服务类型,自监听,自启动,推送这个广告肯定需要用到WindowManager否则会出现莫名其妙的错误,即使你CustomDialog有时候出问题,会让你头疼!我在我的代码里给这个广告弹窗设置了非窗口模式,也就是说,我的广告窗口出来后,点返回键和它所占区域之外的区域是无效的

窗口不会消失,点HOME窗口也不会消失,只是到了主界面而已,TTS也展示在了上面

而多久消失有很多做法,我这里采用TimerTask

异域值计算:从指令长度到内容的异域值,就是从指令长度到内容的所有byte按位取异或,在取一个16进制的整数作为每个收发数据包的校验码

补包请求就不说了,很麻烦的,如果真是遇到类似的项目,可以私信我

最难得关键就是协议的封装,协议解析,封包,数据解析,协议分发,估计没接触的朋友是看不懂的,封装协议估计都封不了,尤其是数据的转换,绝对会让你头痛!

其实很多智能家居方案和一些耗流量小,用户量大的应用都用到了这个,就比如QQ就用到了HTTP跟UDP相结合的通信方式

远程拍照:

用户点击远程拍照,指令到第三方服务器再到终端,解析获得之后,通过调取相机,拍照,获取本地时间,以时间戳为ID,将此ID转换为int转byte再集体封包发送给第三方,之后上报照片的Byte包,因为协议每次最多1kb,所以需要把数据分包发送

因为UDP丢包的情况比较频繁,所以需要补包的协议指令,一同时提供了2种方式

补包指令

整个项目从看文档,解决问题,包括协议这块,请教过一些同事,到即将测试,花了几天时间,加班好几天了,嘿嘿,终于差不多了,因为我也是第一次接触这玩意儿,顺便写下心得,方便后面接触到此项目的朋友参考参考,少走弯路

另给站在一线的工程师,说一句,辛苦了!当然,也包括我啦! 哈哈!!!谢谢观看!

时间: 2024-10-09 20:26:36

基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札的相关文章

基于CentOS 6.5构建KVM服务器平台、网络和存储、公钥和私钥的建立

1.什么是虚拟化通过虚拟化技术将一台计算机虚拟成多台逻辑上的计算机.每个逻辑上的计算机可以安装不同的操作系统,这些系统之间互相独立并且互不干扰2.什么虚拟机一个软件平台,如同一个物理机上面运行操作系统和应用程序3.目前主流的虚拟化产品VMwareMicosoftCitrix RedHat 4.KVM网络设置NAT模式(默认)    KVM虚拟机网卡选择NAT,网关指向HOST主机的内网192.168.1.1,它就可以直接访问外网.路由模式(HOST开启路由转发功能)    HOST主机充当路由器

基于安卓的个人理财软件的设计与实现--项目心得

首先,你在往下看时,我必须先说一句,我是小白.所以,作为小白,我的app可以不去适配各种分辨率,可以有各种傻x才写的代码. 第一次做app,个人理财软件,我第一个想法就是随手记还有挖财.刚开始说安卓app只是有很多想法,但是不知道怎么实现.为了学习安卓基础,下了xx安卓视频教程,然后又发现了幕课网,幕课网很多大牛,而且课程说得不错.不过在做项目的时候,发现很多都忘记了,又不想回去看视频了,一般是直接百度找解决方案,最开心的就是有demo,源代码直接下载复制. 而且我很赞成要避免重复造轮子,如果有

开发交通运输部·车载导航系统中的第一关——硬件终端如何与服务器通信——玩转通信协议(源码下载)

一.引子与协议说明 之前开发了一个项目——车载导航系统.遇到的第一个问题就是硬件设备如何与服务器通信. 关键在于通信协议! 众所周知:要想实现通信,首先通信双方就要达成通信协议. 话不多说,且看协议:  ————————————————华丽的分割线————————————————— 以上的这些协议说明是不是看得很头大呢? 遵循如此这般的通信协议的硬件设备又如何才能与服务器以及PC顺利通信呢? 还请各位看官稍安勿躁!且听我娓娓道来! 二.基础知识-TCP与粘包 我们都知道,互联网的核心是TCP/I

基于Android平台的快递轨迹查询应用开发全程视频教程

课程讲师:欧楠课时数量:10(17节)课时用到技术:MenuDrawer.DbUtils.HttpUtils.讯飞语音识别涉及项目:基于Android平台的快递轨迹查询应用开发项目咨询QQ:1609173918 http://yunpan.cn/cVgILJtNYMcDB 访问密码 f885 目前Android平台移动应用开发正如火如荼的发展,智能手机和平板电脑的出货量正快速上升,人们正越来越习惯于在移动平台进行娱乐和各种操作.目前电子商务的发展使人们在每次网购之后都需要了解购买的商品的物流信息

微信硬件设备接入接口协议

微信硬件设备接入接口协议 (公开使用)Tencent Technologies Co., Ltd.腾讯科技有限公司All rights reserved产品版本 密级V2.0Beta 请输入密级:公开Tencent.腾讯科技有限公司项目名称: 微信硬件设备接入接口协议 共 页第 2 页 共 29页第 3 页 共 29页 文档历史记录第 4 页 共 29页部门 微信产品部\开放平台中心\平台开发组\架构优化组起始人员 koukoutan文档版本 描述 撰写人员 更新时间V1.0Beta 初稿 ko

基于Android设备的 Kali Linux渗透测试教程(内部资料)

试读样章下载地址:http://pan.baidu.com/s/1hqgPu3U 前  言 Kali Linux是业内最知名的安全渗透测试专用操作系统.它的前身就是业界知名的BackTrack操作系统.BackTrack在2013年停止更新,转为Kali Linux.Kali Linux集成了海量渗透测试.攻击等专用工具.通过系统更新,用户可以快速获取最新的各类工具.所以,Kali Linux是渗透测试专业人员的不二选择. 由于渗透目标多样化,使用传统形式的电脑PC或者笔记本并不是很方便.而智能

基于android的Socket通信

一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过建立sock

Android操作HTTP实现与服务器通信

本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响

微信小程序通过低功率蓝牙控制单片机上硬件设备

1.软件部分介绍 微信小程序是一种新的应用,用户不需要下载应用只用通过扫二维码或者打开链接就能使用,使用完后不需要卸载,直接关闭就行了.微信在2017年初推出微信小程序开发环境.任何企业,媒体,个人都可以注册开发.是一种全新的 开发模式.微信也因此受到许多程序员的一致好评,尤其是微信小程序的云开发,提供大量数据处理接口,让初学者也可以很快入手.不需要后端数据库的支持,自己一个人就可以开发前端和后台. 微信小程序为蓝牙模块提供了18个API.其中低功率蓝牙9个,传统蓝牙9个.本次设计使用了其中的9