作者:腾讯云-ahqzhang
群内 @ 消息与普通消息没有本质区别,仅是在被 @ 的人在收到消息时,需要在UI上做特殊处理,例如QQ的消息列表中会有标红提示。具体实现可以参考以下方案:
- 1 在发送消息时监听键盘事件,是否输入了 @ 字符,当检测到发送方输入了 @ 字符时,在UI上弹出群成员列表,以供发送方选择需要 @ 的人,假设被选到的用户为
user1
- 2 选择完需要被 @ 的人后,在消息输入框里添加上 @ 及被选中的人的id, 例如 "@user1"
- 3 在消息中添加一个
TIMCustomElem
, 并在TIMCustomElem
里添加自己设计的标识该消息为 @ 消息的消息协议。 一个简单的协议定义可以如下:
{
"type":"REMIND",
"target":"user1"
}
@消息的构建过程示例代码如下(以android平台为例):
代码语言:javascript复制 // 发送一条文本消息,并在消息中 @ 群成员 user1
TIMMessage msg = new TIMMessage();
//构建文本消息元素体
TIMTextElem txtElem = new TIMTextElem();
txtElem.setText("@user1 nice to meet u");
if(msg.addElement(txtElem) != 0){
Log.e(TAG, "add text elem failed");
return;
}
try{
//填充自定义的消息协议
JSONObject remindProto = new JSONObject();
remindProto.put("type", "REMIND");
remindProto.put("target", "user1");
//根据自己定义的协议构建自定义消息元素
TIMCustomElem customElem = new TIMCustomElem();
customElem.setDesc("remind msg");
customElem.setData(remindProto.toString().getBytes("utf-8");
if(msg.addElement(customElem) != 0){
Log.e(TAG, "add custom elem failed");
return;
}
}catch(Exception e){
Log.e(TAG, "build custom elem failed");
return;
}
注: 其中
TIMTextElem
不是必须的,如果确认不需要进行脏字过滤的情况下,可以把TIMTextElem
中的消息内容填到TIMCustomElem
中的desc
属性中。
- 4 构建好消息后,发送到群里
- 5 群里的成员接收到消息后,检查消息中的
TIMCustomElem
中的消息协议是否是 @ 消息协议。如果是, 则进行下一步处理,否则跳过 - 6 判断被 @ 的人是否与当前登录用户一致,如果是,则在UI中进行特殊处理,否则不需要处理