关于android-studio:一把双刃剑-融云即时通讯sdk中的自定义消息使用心得指南-上

59次阅读

共计 2013 个字符,预计需要花费 6 分钟才能阅读完成。

一把双刃剑 — 融云即时通讯 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) 

这个问题也是蛮坑的, 害. 找他们家技术支持费了点劲才排查进去, 心愿大家遇到这种问题能快快找到我这篇教训哈.

正文完
 0