一把双刃剑 -- 融云即时通讯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封装了一些根本的界面,例如会话列表, 和他人聊天的会话界面).
需要:
融云的体系中默认的音讯类型只有9种.
性能 | 形容 |
---|---|
文字音讯 | 用来发送文字类音讯,其中能够包含表情、超链接(会自动识别),客户端收到音讯后计入未读音讯数、进行存储。 |
语音音讯 | 发送高质量的短语音音讯,录制的语音文件存储到融云服务端,语音文件格式为 AAC,时长下限为 60 秒,客户端收到音讯后计入未读音讯数、进行存储。 |
图片音讯 | 用来发送图片类音讯,客户端收到音讯后计入未读音讯数、进行存储。图片缩略图格局为 JPG,大小倡议不超过 100k。 |
GIF 图片音讯 | 用来发送 GIF 动静图片音讯,客户端收到音讯后计入未读音讯数、进行存储。 |
图文音讯 | 用来发送图文音讯,蕴含一个题目,一段文字内容和一张图片,客户端收到音讯后计入未读音讯数、进行存储。 |
文件音讯 | 用来发送文件类音讯,客户端收到音讯后计入未读音讯数、进行存储。 |
地位音讯 | 用来发送地理位置音讯,客户端收到音讯后计入未读音讯数、进行存储。 |
小视频音讯 | 用来发送小视频音讯,反对录制发送及抉择本地视频文件发送两种形式,录制时长不超过 10 秒,本地抉择视频文件形式时长不超过 2 分钟,小视频音讯小视频文件格式为 .mp4,客户端收到音讯后计入未读音讯数、进行存储。 |
合并转发音讯 | IMKit SDK 中反对将多条音讯合并为一条音讯进行发送,合并后的音讯以 HTML 文件的形式存储到融云服务端,客户端收到音讯后计入未读音讯数、进行存储。 |
这9种音讯其实曾经满足大部分的即时聊天场景了, 无论是打字聊天最一般的文本音讯, 还是长按录制发送的语音音讯, 以及图片音讯, 分享地位的音讯. 基本上微信有的场景, 都笼罩到了.
然而因为各家的产品各不相同, 有人须要一个比微信性能更简洁的聊天工具, 有人则须要一个像QQ那般功能强大的聊天工具. 总是有千奇百怪不同的需要的. 像咱们的app就是这样, 总有场景是这里无奈满足的. 好比QQ是能够把图片和文本音讯放入同一个音讯气泡中的(相似于富文本音讯), 那么这样的状况下, 默认的几类音讯就不够用了.
不过融云还是把这块做的很到位的, 裸露了类和接口让用户去对音讯做自定义, 基本上能够做到, 想把音讯定义成什么样就定义成什么样子.
心得(上)
这里就举一些我在开发咱们公司app时, 用到的自定义音讯, 以及应用心得和指南.
只发给以后在线用户的限时处分告诉
只给以后在线用户发送音讯, 咱们有一种游戏处分是只发放给非凡时段在线的用户的, 只有以后在线的用户能力接管到这种音讯来支付处分, 其余在该时段未在线的用户, 不能接管到, 且再次登录后也不能接管到保留的离线音讯.
这个需要就是做了一个自定义音讯来实现的.
把自定义音讯类的 MessageTag 中 flag 值设置为 MessageTag.STATUS。此音讯类型即为状态音讯,状态音讯不存储不计数,并且当接管方不在线时,此音讯会间接抛弃,用户再上线也不会收到该音讯。
有须要的同学能够看他们家对于自定义音讯的文档:https://docs.rongcloud.cn/im/...
发送自定义音讯后撤回音讯,撤回音讯会失败
这里积攒了一个教训, 也算是帮大家踩踩他们家的坑了, 那就是:
应用以下废除办法发送自定义时会呈现此谬误:
在发送自定义音讯后,撤回音讯时没有反馈,退出会话界面再次进入后能够失常撤回音讯。 在 log 中显示 recallMessage errorCode = 25101。
public Message sendMessage(ConversationType type, String targetId, MessageContent content, String pushContent, String pushData, final SendMessageCallback callback) {
必须要换成这个办法发送才行:
public void sendMessage(Message message, String pushContent, String pushData, final ISendMessageCallback callback)
这个问题也是蛮坑的, 害. 找他们家技术支持费了点劲才排查进去, 心愿大家遇到这种问题能快快找到我这篇教训哈.