发布日期:2022-12-29 22:05:25 点击次数:
NetEase IM SDK(以下简称“NIM SDK”)支持收发多种消息类型,助您快速实现多样化的消息业务场景。NIM SDK 提供
本文介绍通过网易云信 NIM SDK 实现消息收发的技术原理、前提条件以及具体的实现流程。
应用集成 NIM SDK 并完成 SDK 初始化后,消息收发流程如下图所示(本地提示消息和通知消息除外)。
上图仅以静态 Token 登录为例展示消息收发流程。网易云信 IM 还支持动态 Token 登录鉴权和第三方回调登录鉴权,相关详情请参见登录鉴权。
发送消息(sendMessage)的方法调用存在频控,一分钟内默认最多可调用 300 次。
用户B 调用observeReceiveMessage方法,注册消息接收观察者,监听消息接收。
通过sessionType参数IM电竞APP,可设置发送的文本消息为单聊消息或群聊消息。如设置为群聊消息,请确保已创建相应的群组。
可通过消息配置选项CustomMessageConfig设置该消息是否存入云端、写入漫游、计入未读数等。具体配置示例请参见消息配置选项。
本节以用户A 向用户B 发送多媒体消息为例,介绍实现多媒体消息收发的流程。
NIM SDK 提供了高清语音的录制与播放的功能,用于处理语音消息。相关详情请参见语音消息处理。
用户A 和 用户B 调用observeAttachmentProgress注册消息附件上传/下载观察者,监听消息附件的上传/下载进度。
用户B 调用observeReceiveMessage方法,注册消息接收观察者,监听消息接收。
方法,构建一条图片消息。也可调用其重载方法,指定图片上传时使用的多媒体资源存储场景。
方法,构建一条语音消息。也可调用其重载方法,指定音频上传时使用的多媒体资源存储场景。
方法IM电竞APP,构建一条视频消息。也可调用其重载方法,指定视频上传时使用的多媒体资源存储场景。
方法,构建一条文件消息。也可调用其重载方法,指定文件上传时使用的多媒体资源存储场景。
设置该消息是否存入云端、写入漫游、计入未读数等。具体配置示例请参见消息配置选项。
方法取消附件(图片、视频或文件)的上传。如果附件已经上传成功,操作将会失败 。如果成功取消了附件的上传,那么相应的消息会发送失败,对应的消息状态是
如果同一个图片/文件消息需要多次发送时,建议控制时序依次发送,避免出现发送失败的问题。
用户B 下载完多媒体资源后,可以通过对应的MsgAttachment获取到具体的附件内容。多媒体附件的基类是FileAttachment,继承自MsgAttachment。
地理位置消息收发流程与文本消息收发流程基本一致,区别在于构建消息的调用方法不同(需调用createLocationMessage)。本节仅简要展示相关调用示例,具体实现流程请参考收发文本消息。
可通过消息配置选项CustomMessageConfig设置该消息是否存入云端、写入漫游、计入未读数等。具体配置示例请参见消息配置选项。
提示消息(又叫做 Tip 消息)主要用于会话内的通知提醒,可以看做是自定义消息的简化,有独立的消息类型MsgTypeEnum.tip。 区别于自定义消息,Tip 消息暂不支持setAttachment设置附件,如需使用附件请使用自定义消息。 Tip 消息的典型使用场景包括进入会话时出现的欢迎消息和会话过程中命中敏感词后的提示等。当然这些应用场景也可以用自定义消息实现,但会相对复杂。
本节以 “您撤回了一条消息提示出现在群组中(仅对发送者可见且不发送到服务端)” 这个应用场景为例,介绍实现提示消息收发的流程。
用户A 调用observeReceiveSystemMsg方法,注册系统消息接收事件观察者,监听系统通知(本场景下为监听消息撤回系统通知)。
用户A 调用createTeam方法创建高级群,相关示例代码请参见创建群组。
用户A 调用saveMessageToLocal方法,保存该提示消息到本地数据库,但不发送到服务器。
针对一些特定场景的事件,云信服务器预置了一些通知消息,在事件发生时下发到 SDK。通知消息也是一种特定消息,开发者需解析消息中附带的信息,来获取通知内容。如最常见的通知消息——群通知事件,如有新成员进群IM电竞APP,则群内已有成员将收到此通知消息。
通知消息属于会话内的一种消息,其对应的数据结构为IMMessage,消息类型为MsgTypeEnum#notification。通知消息目前用于在群和聊天室的事件通知。
除了上述内置消息类型以外,NIM SDK 还支持收发自定义消息类型。具体实现流程介绍,请参见自定义消息收发。
通过observeMsgStatus注册消息状态变化观察者,该方法可以监听消息发送状态变化中回调IMMessage对象。
单聊或群聊消息具有服务端扩展字段和客户端扩展字段。服务端扩展字段只能在消息发送前设置,会同步到其他端;客户端扩展字段在消息发送前后设置均可,不会同步到其他端。
扩展字段,请使用 JSON 格式封装,并传入非格式化的 JSON 字符串,最大长度1024字节。
对于单聊或群聊消息,构造IMMessage对象时,通过setLocalExtension方法设置客户端扩展字段。
设置消息的客户端扩展字段后,必须调用updateIMMessage方法,否则无法生效。
对于单聊或群聊消息,构造IMMessage对象时,通过setRemoteExtension方法设置消息的服务端扩展字段,IM电竞APP