IM 即时通讯
Android
开发指南

消息重发与转发

更新时间: 2024/01/26 17:41:00

网易云信 NIM Android SDK 的 MsgServiceObserve 类和 MsgService 类,分别提供监听消息转发/重发的方法和转发/重发消息的方法。发送转发消息与发送不同类型(如文本、音频、视频等)的消息的方法一致,需要先构建待转发的消息再调用sendMessage方法将其发送至目标用户。

除了通知消息外,其他类型消息均支持转发给其他会话。

前提条件

已完成 SDK 初始化

API使用限制

发送消息(sendMessage)的方法调用存在频控,一分钟内默认最多可调用 300 次。

重发消息

消息发送失败之后,可以重发消息。消息重发和消息发送共用 sendMessage 方法,如果 resend 参数设置为 true,则重发消息。

V9.10.0 新增重发拉黑状态消息相关开关,默认不开启。开启后使用优化的发送逻辑。如有需要,请联系商务经理或技术支持进行开启。优化后的重发拉黑消息逻辑如下:

  • 若重发拉黑状态消息时,用户还处于黑名单中,此时会产生一条新消息,发送端会收到 7101 错误码,接收端则无法接收到该消息。

    处于拉黑状态时,无论重发多少次消息,产生的新消息都是同一条,即同一个 msgid。

  • 若重发拉黑状态消息时,用户已不在黑名单中,此时产生一条新消息,发送端会收到 200 状态码,接收端正常接收到该消息。

转发一条消息

网易云信 NIM Android SDK 支持转发通知和音视频通话事件消息以外所有其他消息类型。

API调用时序

转发不同类型消息的实现方法类似,本节仅以转发一条文本消息为例进行介绍。

uml diagram

实现流程

本节以上述 API 时序图中用户A、B、C 的消息交互场景为例,介绍转发一条消息的实现流程。

  1. 用户C 调用 observeReceiveMessage 方法,注册消息接收观察者,监听消息接收。

  2. 用户B 接收到用户A 发送的消息,调用 createForwardMessage 构建一条转发消息,调用时将message参数设置为接收到的消息,将sessionId设置为用户C 的云信 IM 账号 ID。

  3. 用户B 调用 sendMessage方法,发送该消息。

    示例代码如下:

    // 该帐号为示例,请先注册
    String account = "testAccount";
    // 以单聊类型为例
    SessionTypeEnum sessionType = SessionTypeEnum.P2P;
    // forwardMessage为待转发的消息, 一般由上下文获得
    IMMessage message = MessageBuilder.createForwardMessage(forwardMessage, account, sessionType);
    // 发送给对方
    NIMClient.getService(MsgService.class).sendMessage(message, false).setCallback(new RequestCallback<Void>() {
                    @Override
                    public void onSuccess(Void param) {
    
                    }
    
                    @Override
                    public void onFailed(int code) {
                        
                    }
    
                    @Override
                    public void onException(Throwable exception) {
    
                    }
                });
    
  4. SDK 触发Observer回调函数,将该消息发送至用户C。

合并转发多条消息

合并转发多条消息的实现流程,与转发单条消息的实现流程类似,区别在于构建方法为createForwardMessageListFileDetail

  • 该方法的入参messages即为待转发的消息集合,一般由上下文获得。
  • 该方法将返回待转发的多条消息字符串(String),可以通过 MessageConvert.convertJsonToMessage 方法将其转为 IMMessage 对象。

API参考

API
说明
observeReceiveMessage 注册/注销消息接收观察者,若注册则监听消息接收
createForwardMessage 构建一条转发消息
createForwardMessageListFileDetail 构建待合并转发的多条消息
sendMessage 发送/重发消息
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • API使用限制
  • 重发消息
  • 转发一条消息
  • API调用时序
  • 实现流程
  • 合并转发多条消息
  • API参考