人车通信技术文档
一.总体介绍
手机端与车机端的通信目前包含两种通道:局域网(socket)通道和外网通道(websocket)。消息发送是基于当前场景选择合适的通道发送消息。目前消息发送的类型有:文本,位置,语音,车辆分享,url链接,文件等。其中文件消息主要包括图片,其他类型的文件等。下面对上述的这些消息类型做详细的说明。
二.消息类型
1.文本消息
此消息类型属于TEXT,不管当前是否连接局域网,这类消息统一走websocket即时消息服务通道。
构建的消息体:
{“msg":"消息记录","img":"https:\\thirdwx.qlogo.cn\mmopen\vi_32\1nCwUjMtzQJd2VW7icMLXHApib1RYO2B0eBVCe9tJ0uqNOjpu9Us34FpWOzXI0sCNAeiaKpic9ySuthkfA7Dsp6Hyw\132","avatar":"James"}
其中msg 为发送的内容,img 为发送者的头像,avatar为发送者的昵称。
然后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法说明)
2.车辆分享消息
此消息类型属于SHARE,不管当前是否连接局域网,这类消息统一走websocket即时消息服务通道。
构建的消息体:
{“msg”:”消息记录”,”img”:”https:\\thirdwx.qlogo.cn\mmopen\vi_32\1nCwUjMtzQJd2VW7icMLXHApib1RYO2B0eBVCe9tJ0uqNOjpu9Us34FpWOzXI0sCNAeiaKpic9ySuthkfA7Dsp6Hyw\132”,”avatar”:”James”,”bpname”:”车辆名字”,"deviceid":"车辆设备id"}
其中msg 为发送的内容,img 为发送者的头像,avatar为发送者的昵称,bpname为分享的车辆名字,deviceid为分享的车辆设备id
然后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法说明)
3.文件消息
此消息类型属于IMAGE,包括其他非图片类的文件都是统一定义为此类型。这类消息会根据当前的场景选择合适的消息通道发送。下面介绍下各自场景消息通道:
3.1 局域网通道(socket)
这类通道是先走socket发送文件流的模式到车机端指定的文件存储位置,发送完毕后,再通过webscoket通道发送即时消息。具体构建的消息体如下:
Socket通道构建的消息体:
{“client_app_id_":"eagsen_pi","command_parameter_":"","command_text_":"open_file_intent","executor_action_":"","executor_category_":"android.intent.category.DEFAULT","executor_type_":"NONE","file_category_":"PICTURES","file_name_":"/storage/emulated/0/splashAd/d557c152-3aa8-47ba-bc1e-55372d8884bf.png.jpg","id_":"1694135573783","message_body":"nobody","message_body_size_":"0","message_body_type_":"FILE","need_remote_response_":false}
其中需要客户端赋值的字段有:
command_text_字段 代表与车机端约定好的指令类型,不能随意更改。车机端收到该指令处理其逻辑。
file_category_ 字段 代表文件存储目录分类标识。目前目录分类标识有MOVIES,MUSIC,PICTURES,OTHER,TEMP,SYN等
file_name_ 字段 文件名包含路径
message_body_type_ 字段 消息体类型,文件类固定为FILE
然后调用socket通道发送消息(请参考socket消息通道调用方法说明)
webSocket通道构建的消息体:
{“msg”:"d557c152-3aa8-47ba-bc1e-55372d8884bf.png.jpg","transferType":"local","img":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/1nCwUjMtzQJd2VW7icMLXHApib1RYO2B0eBVCe9tJ0uqNOjpu9Us34FpWOzXI0sCNAeiaKpic9ySuthkfA7Dsp6Hyw\/132","avatar":"James","url":"PICTURES\/d557c152-3aa8-47ba-bc1e-55372d8884bf.png.jpg","filetype":"image\/jpeg","filename":"d557c152-3aa8-47ba-bc1e-55372d8884bf.png.jpg","filesize":"1.46M"}
重要字段说明:transferType 代表文件传输的类型,根据不同消息通道场景传不同的传输类型,主要有 local 指socket传输类型,remote 指websocket传输类型。
最后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法说明)。
3.2 webSocket即时消息服务通道
这类通道是在局域网未连接的情况下会触发。先上传文件到oos服务,上传完毕后,再通过webSocket即时消息服务通道发送消息。
构建的消息体 请参考局域网消息通道之webSocket通道构建的消息体,唯一的区别就是transferType 传入的是remote类型。
最后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法说明)。
以上两种通道文件发送,在车机端都会触发文件自动打开。
4.语音消息
在业务层面上看,被定义为一个独立的消息类型属于VOICE。但是基于语音本质上也是一个录音文件,因此也符合文件消息范畴,共用文件消息发送业务逻辑。语音目前没有在车机端收到后直接播放,只有在聊天页面里面点击语音播放。具体请参考文件消息类型说明,构建消息体唯一的区别就是webSocket消息通道下,语音消息会新增一个字段second 语音时长。
5.位置消息
此类消息类型属于LOCATION。这类消息会根据当前的场景选择合适的消息通道发送。跟文件消息有点区别,不同的是位置消息是先调用webSocket通道发送即时消息,然后再判断 a.当前是否局域网连接 b.终端id是否是车机 c.当前显示的车机是否与当前连接的车机一致 同时满足a,b,c三个条件即调用socket消息通道发送消息。
5.1 webSocket即时消息通道构建的消息体:
{“msg":"未来社区","img":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/1nCwUjMtzQJd2VW7icMLXHApib1RYO2B0eBVCe9tJ0uqNOjpu9Us34FpWOzXI0sCNAeiaKpic9ySuthkfA7Dsp6Hyw\/132","avatar":"James","title":"(乐都)未来社区","address":"上海市xx区xx路xx号xx号楼","latitude":31.016136,"longitude":121.211341}
除了发送者基本信息外,主要携带了位置信息。
最后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法说明)。
5.2 socket通道构建的消息体:
{“client_app_id_":"eagsen_pi","command_parameter_":"","command_text_":"open_map_intent","executor_action_":"","executor_category_":"android.intent.category.DEFAULT","executor_type_":"NONE","file_category_":"TEMP","file_name_":"","id_":"1694139521303","message_body":"{\"url\":\"\",\"name\":\"未来社区\",\"latitude\":\"31.016136\",\"longitude\":\"121.211341\"}","message_body_size_":"0","message_body_type_":"JSON","need_remote_response_":false}
其中需要客户端赋值的字段有:
command_text_字段 代表与车机端约定好的指令类型,不能随意更改。车机端收到该指令处理其逻辑。
file_category_ 字段 代表文件存储目录分类标识。目前目录分类标识有MOVIES,MUSIC,PICTURES,OTHER,TEMP,SYN等
message_body 字段 代表消息体,此处是位置信息
message_body_type_ 字段代表消息体类型,位置信息固定为JSON类型
最后调用socket通道发送消息(请参考socket消息通道调用方法说明)
6.url链接消息:
此类消息类型属于URL。这类消息会根据当前的场景选择合适的消息通道发送6.1 webSocket通道构建的消息体:
{“msg”:"url链接","img":"https:\\thirdwx.qlogo.cn\mmopen\vi_32\1nCwUjMtzQJd2VW7icMLXHApib1RYO2B0eBVCe9tJ0uqNOjpu9Us34FpWOzXI0sCNAeiaKpic9ySuthkfA7Dsp6Hyw\132","avatar":"James"}
字段说明请参考文本消息。
最后调用Mq服务发送消息(请参考Mq(webSocket)即时消息服务通道调用方法
说明)。
6.2 socket通道构建的消息体:
{“client_app_id_":"eagsen_pi","command_parameter_":"","command_text_":"open_url_intent
“,"executor_action_":"","executor_category_":"android.intent.category.DEFAULT","executor_type_":"NONE","file_category_":"TEMP","file_name_":"","id_":"1694139521303","message_body":"{\"url\":\"url链接\"}","message_body_size_":"0","message_body_type_":"JSON","need_remote_response_":false}
其中需要客户端赋值的字段有:
command_text_字段 代表与车机端约定好的指令类型,不能随意更改。车机端收到该指令处理其逻辑。
file_category_ 字段 代表文件存储目录分类标识。目前目录分类标识有MOVIES,MUSIC,PICTURES,OTHER,TEMP,SYN等
message_body 字段 代表消息体,此处是url链接
message_body_type_ 字段代表消息体类型,位置信息固定为JSON类型
最后调用socket通道发送消息(请参考socket消息通道调用方法说明)
三.消息通道
1.socket消息通道调用方法
ClientUtils.getInstance().requestEagvis(entity, sendCallback)
其中参数entity 就是构建的消息体对象MessageHeaderEntity ;参数sendCallback 发送回调事件监听。
2. Mq(webSocket)即时消息服务通道调用方法
MqClient.getInstance().send(String targetId, String senderDevId, Constant.MessageType messageType, JSONObject jsonObject
)
其中messageType为消息类型,请参考前面第二部分消息类型有具体消息类型说明,jsonObject为构建的消息体,请参考前面第二部分消息类型的构建消息体说明。
关键字:#消息# #通道# #消息体# #发送# #调用#
- End -
关于 鹰信 Eagsen
秉持“移动的智能空间”理念,致力于汽车信息化、智能化研究,引领"人车通信"、"车车通信"的发展方向。