群组@功能


群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 UI 上显示会有不同。可以通过环信的扩展消息来实现。

  1. 发送方将想要@的人的环信 ID 通过扩展字段放到扩展消息中,并把消息发到群里。
  2. 群中成员在收到消息时,先检查扩展字段中是否有对应的字段,如果有,取出其中的环信 ID。
  3. 检查取出的环信 ID 与当前登录的环信 ID 是否一致。
  4. 如果检测一致,需要在 UI 上做特殊处理,显示出对应的提示信息,如“[有人@我]“,如不一致,不做处理。

发送方具体举例:

iOS:

// @某些人
message.ext = @{@"em_at_list":@[@"6001",@"6002"]}; // @6001,6002

Android:

List<String> atMembers = new ArrayList<String>();
        atMembers.Add("6001");
        atMembers.Add("6002");
        JSONArray atJson = new JSONArray(atMembers);
        // 设置消息的扩展为@群成员类型
        message.setAttribute("em_at_list", atJson); // @6001,6002

接收方具体举例:

iOS:

-(void)didReceiveMessage:(EMMessage *)message{
    // 获取当前登录用户环信ID
    NSString *currentUserId = [[[EaseMob sharedInstance].chatManager loginInfo] objectForKey: kSDKUsername];
    // 被@用户环信ID
    NSArray *atList = [message.ext objectForKey:@"em_at_list"];
    for (NSString *atName in atList) {
        if (atName isEqualToString:currentUserId) {
             // 当前用户被@,需要单独处理UI                    
        }
    }
}

Android:

@Override
    public void onEvent(EMNotifierEvent event) {
        switch (event.getEvent()) {
        case EventNewMessage:
            // 获取当前登录用户环信ID
            String currentUserId = EMChatManager.getInstance().getCurrentUser();
            // 获取到message
            EMMessage message = (EMMessage) event.getData();
            try {
                JSONArray atJson = message.getJSONArrayAttribute("em_at_list"); // 被@用户列表,如果当前用户被@,需要ui特殊显示
            } catch (Exception e) {
                e.printStackTrace();
            }
            break;
        }
    }

上一页:数据平滑迁移

下一页:阅后即焚