群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 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;
}
}