消息被拦截后,各平台客户端如何处理被拦截消息的状态

描述

消息被拦截后,在客户端应该如何处理将消息置为发送失败的状态。

解决方案

  1. 被拦截的消息,在客户端发送消息的回调中,默认是发送成功的状态,如果需要让客户端感知到消息被拦截,需要开通下图功能。此功能不会额外收费。

  2. 开通此功能后,不同平台客户端还需要分别去处理被拦截的消息:

    Android 端:

    a. 需要设置敏感信息拦截监听器,被拦截的消息信息会在此监听器中回调,具体参考下面链接:敏感信息拦截回调 | 融云开发者文档

    b. 此监听器中会返回被拦截的消息 Uid(BlockMsgUId),需调用 io.rong.imlib.RongCoreClient#getMessageByUid 方法,获取到被拦截消息的详细信息。

    c. 含 Ui 集成,可以调用 io.rong.imkit.IMCenter#setMessageSentStatus 方法,修改为发送失败的状态,此方法会自动刷新 UI。

    d. 无 Ui 集成,调用 io.rong.imlib.RongCoreClient#setMessageSentStatus 方法,修改为发送失败的状态,业务侧处理 UI 刷新即可。

    e. 修改发送失败状态可参考下面代码块.

    message.setSentStatus(SentStatus.FAILED);
    // 含 UI 集成调用此方法
    IMCenter.getInstance().setMessageSentStatus(message, null);
    
    // 无 UI 集成调用此方法
    RongCoreClient.getInstance().setMessageSentStatus(message, null);
    

    iOS 端:

    a. 需要设置敏感信息拦截监听器,被拦截的消息信息会在此监听器中回调,具体参考下面链接:敏感信息拦截回调 | 融云开发者文档
    b. 实现对应回调方法后,参考下面代码实现修改消息状态的逻辑:

    #pragma mark - RCMessageBlockDelegate
    - (void)messageDidBlock:(RCBlockedMessageInfo *)blockedMessageInfo {
        // 通过 messageUID 获取对应的 message 信息
        RCMessage *blockMessage = [[RCCoreClient sharedCoreClient] getMessageByUId:blockedMessageInfo.blockedMsgUId];
    
        // 调用 IMLibCore 接口修改消息的发送状态
        [[RCCoreClient sharedCoreClient] setMessageSentStatus:blockMessage.messageId sentStatus:SentStatus_FAILED completion:^(BOOL ret) {
    
         // 如果使用的是 IMKit ,需要延时发送刷新消息状态的通知; 如果是使用的 IMLib 则需要您自行处理 UI 刷新
         RCMessageCellNotificationModel *notifyModel = [[RCMessageCellNotificationModel alloc] init];
         notifyModel.actionName = CONVERSATION_CELL_STATUS_SEND_FAILED;
         notifyModel.messageId = blockMessage.messageId;
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
             [[NSNotificationCenter defaultCenter]
                 postNotificationName:KNotificationMessageBaseCellUpdateSendingStatus
                                 object:notifyModel];
             });
     }];
    }
    

如有疑问,欢迎提交工单