tencent cloud

文档反馈

Android & iOS & Mac

最后更新时间:2023-07-17 14:27:39

    功能描述

    群 @ 消息是指发送方监听输入栏里的输入字符,当用户输入 @ 字符后,弹出群成员选择界面。选择完需要 @ 的成员后以 “@A @B @C......” 形式显示在输入框,并可以继续编辑消息内容,完成消息发送。 接收方会在会话界面的群聊天列表,重点显示 “有人@我” 或者 “@所有人” 标识,提醒用户有人在群里 @ 自己了。
    说明
    目前仅支持文本 @ 消息。

    功能演示

    监听 @ 字符选择群成员
    编辑群 @ 消息发送
    收到群 @ 消息
    
    
    
    
    
    
    
    
    
    图一:在聊天界面监听到输入框输入 "@" 字符后,可以跳转到群成员选择界面,选择需要 @ 的群成员。 图二:在群成员选择完成后,重新返回聊天界面,继续编辑群 @ 消息发送。 图三:如果有消息 @ 我,自己会收到会话更新,可以在会话 Cell 展示 “有人@我” 信息。

    发送群 @ 消息

    1. 发送方监听聊天界面的文本输入框,启动群成员选择界面。选择完成后回传所选择的群成员 ID 和昵称信息,ID 用于构建消息对象 V2TIMMessage,昵称用于在文本框显示。
    2. 发送方调用 createAtSignedGroupMessage (Android / iOS & Mac / Windows) 接口创建一条群 @ 消息,拿到消息对象 V2TIMMessage,并在其中指定需要 @ 的成员。
    3. 发送方调用 sendMessage (Android / iOS & Mac / Windows) 将刚才创建的 @ 消息对象发送出去。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 创建一条原始文本消息
    V2TIMMessage textMsg = V2TIMManager.getMessageManager().createTextMessage("这是一条文本消息");
    // 使用原始文本消息创建一条群 @ 消息,@ 群成员 "user1" 和 "user2"
    List<String> atUserList = new ArrayList<>();
    atUserList.add("user1");
    atUserList.add("user2");
    V2TIMMessage atMsg = V2TIMManager.getMessageManager().createAtSignedGroupMessage(textMsg, atUserList);
    // 发送群 @ 消息
    V2TIMManager.getMessageManager().sendMessage(atMsg, null, "toGroupID", V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onError(int code, String desc) {
    // 群@消息发送失败
    }
    @Override
    public void onSuccess(V2TIMMessage v2TIMMessage) {
    // 群@消息发送成功
    }
    @Override
    public void onProgress(int progress) {
    }
    });
    // 创建一条原始文本消息
    V2TIMMessage *textMsg = [[V2TIMManager sharedInstance] createTextMessage:@"这是一条文本消息"];
    // 使用原始文本消息创建一条群 @ 消息,@ 群成员 "xixi" 和 "yahaha"
    V2TIMMessage *atMsg = [[V2TIMManager sharedInstance] createAtSignedGroupMessage:textMsg atUserList:@[@"xixi", @"yahaha"]];
    // 发送群 @ 消息
    [[V2TIMManager sharedInstance] sendMessage:atMsg receiver:nil groupID:@"groupA" priority:V2TIM_PRIORITY_NORMAL onlineUserOnly:NO offlinePushInfo:nil progress:nil succ:nil fail:nil];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    V2TIMStringVector atUserList;
    atUserList.PushBack("user1");
    atUserList.PushBack("user2");
    V2TIMMessage message = V2TIMManager::GetInstance()->GetMessageManager()->CreateTextMessage(u8"这是一条文本消息");
    V2TIMMessage at_message = V2TIMManager::GetInstance()->GetMessageManager()->CreateAtSignedGroupMessage(message, atUserList);
    
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 群@消息发送成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 群@消息发送失败
    delete callback;
    },
    [=](uint32_t progress) {});
    
    V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
    at_message, "denny", {}, V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, false, {}, callback);

    接收群 @ 消息

    1. 在加载和更新会话处,需要调用 V2TIMConversationgroupAtInfolist (Android / iOS & Mac / Windows) 接口获取会话的 @ 数据列表。
    2. 通过列表中 V2TIMGroupAtInfo 对象的 atType (Android / iOS & Mac / Windows) 接口获取 @ 数据类型,并更新到当前会话的 @ 信息。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    //获取群@数据列表
    List<V2TIMGroupAtInfo> atInfoList = conversation.getGroupAtInfoList();
    // 解析@类型(@我,@所有人, @我且@所有人)
    boolean atMe = false;
    boolean atAll = false;
    String atTips = "";
    for(V2TIMGroupAtInfo atInfo : atInfoList){
    if (atInfo.getAtType() == V2TIMGroupAtInfo.TIM_AT_ME){
    atMe = true;
    continue;
    }
    if (atInfo.getAtType() == V2TIMGroupAtInfo.TIM_AT_ALL){
    atAll = true;
    continue;
    }
    }
    
    // 根据@类型,提示
    if (atMe && !atAll) {
    atTips = "[有人@我]";
    } else if (!atMe && atAll) {
    atTips = "[@所有人]";
    } else if (atMe && atAll) {
    atTips = "[有人@我][@所有人]";
    }
    // 获取群@数据列表
    NSArray<V2TIMGroupAtInfo *> *atInfoList = conversation.groupAtInfolist;
    
    // 解析@类型(@我,@所有人, @我且@所有人)
    BOOL atMe = NO; // 是否@我
    BOOL atAll = NO; // 是否@所有人
    NSString *atTipsStr = @"";
    for (V2TIMGroupAtInfo *atInfo in atInfoList) {
    switch (atInfo.atType) {
    case V2TIM_AT_ME:
    atMe = YES;
    break;
    case V2TIM_AT_ALL:
    atAll = YES;
    break;
    case V2TIM_AT_ALL_AT_ME:
    atMe = YES;
    atAll = YES;
    break;
    default:
    break;
    }
    }
    
    // 根据@类型,提示
    if (atMe && !atAll) {
    atTipsStr = @"[有人@我]";
    }
    if (!atMe && atAll) {
    atTipsStr = @"[@所有人]";
    }
    if (atMe && atAll) {
    atTipsStr = @"[有人@我][@所有人]";
    }
    // 获取群@数据列表
    V2TIMGroupAtInfoVector groupAtInfolist = conversation.groupAtInfolist;
    // 解析@类型(@我,@所有人, @我且@所有人)
    bool atMe = false;
    bool atAll = false;
    std::string atTips = "";
    
    for (size_t i = 0; i < groupAtInfolist.Size(); ++i) {
    const V2TIMGroupAtInfo& atInfo = groupAtInfolist[i];
    switch (atInfo.atType) {
    case V2TIM_AT_ME:
    atMe = true;
    break;
    case V2TIM_AT_ALL:
    atAll = true;
    break;
    case V2TIM_AT_ALL_AT_ME:
    atMe = true;
    atAll = true;
    break;
    default:
    break;
    }
    }
    
    // 根据@类型,提示
    if (atMe && !atAll) {
    atTips = u8"[有人@我]";
    } else if (!atMe && atAll) {
    atTips = u8"[@所有人]";
    } else if (atMe && atAll) {
    atTips = u8"[有人@我][@所有人]";
    }
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持