一把双刃剑 -- 融云即时通讯sdk中的自定义消息使用心得&指南 (下)
Posted 刘建伯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一把双刃剑 -- 融云即时通讯sdk中的自定义消息使用心得&指南 (下)相关的知识,希望对你有一定的参考价值。
一把双刃剑 -- 融云即时通讯sdk中的自定义消息使用心得&指南 (下)
背景:
最近公司新上的app要加上即时通讯的功能, 自己快速实现一个当然是不可能的了(项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的不足.最后点兵点将,选了融云家的SDK(老板说了算hhhh).
他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4
这个任务当然还是落在我的头上. 我是使用的他们家的带UI的sdk,(他们家有带UI和不带UI的两种sdk, 不带UI的sdk就是只有即时通讯能力, 所有的UI都需要开发者自定实现, 带UI的sdk封装了一些基本的界面,例如会话列表, 和别人聊天的会话界面).
心得 (下)
自定义小视频消息
接上篇对自定义消息的开发心得哈.
因为融云家自带的小视频消息是需要收费的, 需要在服务端开通小视频服务后, 同时在端上做一下配置, 才可以使用小视频消息. 我一看这还得了, 想方设法收我钱呢不是. 不过他家只是对小视频类型的消息在服务端做了限制, 而不是完全不让在消息中携带视频链接. 自定义消息是随便自定义的, 那么我自定义一个小视频消息不就好啦.
大概实现思路如下:
自定义小视频消息继承MediaMessageContent,其中mLocalPath是小视频文件本地的存放路径,mMediaUrl是小视频文件上传到文件服务器后的http/https地址。
小视频的拍摄,播放我们RongCloud SDK没有接口,开发者自己实现。
当拍摄完成,发送小视频消息时使用方法
sendMediaMessage(final Message message, final String pushContent, final String pushData, final IRongCallback.ISendMediaMessageCallback callback)或者
sendMediaMessage(final Message message, final String pushContent, final String pushData, final IRongCallback.ISendMediaMessageCallbackWithUploader callback)
这两个方法的不同是后者开发者负责小视频文件的上传到指定的服务器,前者使用我们RongCloud默认的文件服务器
以上是大致步骤,小视频开发过程中可能遇到的问题,说明如下:
1.关于缩略图的处理,我们SDK没有直接上传一张图片返回一个url地址的接口,开发者可以把缩略图上传到自己的服务器,这样缩略图跟mMediaUrl类似,小视频消息展示显示缩略图时加载一张网络图片即可。
另一种缩略图处理方式类似我们SDK发送图片消息时的缩略图处理,把缩略图做base64编码,放到自定义消息体中直接传输,这种方式涉及到消息发送时把缩略图转化为base64数据和接收到消息时还原为缩略图,在我们SDK内部使用的是MessageHandler。
关于MessageHandler,我们RongCloud的每个消息都有一个MessageHandler,此前我们文档从没有介绍过这个
MessageHandler,对用户透明的,用户的自定义消息没有指定它是因为有个默认的DefaultMessageHandler。
自定义消息时可以指定自己的MessageHandler,例如图片消息的定义如下
ImageMessage.png
MessageHandler在消息发送和接收时在IPC进程中会被自动调用,它有两个方法,encodeMessage
和decodeMessage,在消息接收后调用decodeMessage时开发者可以把base64对应的数据转化为缩略图url,这样在展示缩略图时直接使用url即可。
/**
* 解码 {@link MessageContent} 到 {@link Message} 中。
*
* @param message 用于存放 MessageContent 的消息实体。
* @param content 将要被解码的 MessageContent。
*/
public abstract void decodeMessage(Message message, T content);
/**
* 对 {@link Message} 编码。
*
* @param message 将要被编码的 Message 实体。
*/
public abstract void encodeMessage(Message message);
此文档包含了两个附件分别为自定义小视频消息和对应的小视频消息MessageHandler,供开发者参考
2.开发中可能还会遇到小视频文件上传时进度更新的问题,如果开发者自定义的小视频消息不继承自MediaMessageContent而是MessageContent,需要自己在UI上维护上传进度
以上是关于一把双刃剑 -- 融云即时通讯sdk中的自定义消息使用心得&指南 (下)的主要内容,如果未能解决你的问题,请参考以下文章
iOS即时通讯SDK中,腾讯,网易,环信,融云IM SDK对比,哪个更好
融云即时通讯sdk, 把头像设置为圆角图片在4.x和5.x的区别 -- 融云即时聊天sdk使用小技巧