超大群功能

超大群功能概述

超大群是针对大规模群聊场景的功能。目前支持不超过5000人的群聊。由于超大群场景较为特殊,并不能支持所有高级群提供的管理功能。目前超大群仅支持群主与普通成员两种身份。开通超大群功能请联系商务。

群聊消息

群聊消息收发和管理与双人聊天完全相同,仅在消息类型(kNIMMsgKeyToType)上做了区分。

获取群组

SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。SDK 提供了批量获取自己的群接口、以及根据单个群 ID 查询的接口。同样SDK 也提供了远程获取群信息的接口。

加入群组

超大群SDK只支持主动邀请的方式将用户加入到群组中。

踢人出群

超大群群组可以踢人。

C++

void TeamEventCb(const nim::SuperTeamEvent& team_event)
{
    ···
}

void foo()
{
    std::list<std::string> uids_list;
    uids_list.push_back("test_user");
    nim::SuperTeam::KickAsync("12345", uids_list, &TeamEventCb);
}

C

void TeamEventCb(int res_code, int notification_id, const char *tid, const char *result, const char *json_extension, const void *user_data)
{
    ···
}

typedef void(*nim_super_team_kick_async)(const char *tid, const char *jsonlist_uids, const char *json_extension, nim_super_team_event_cb_func cb, const void* user_data);

void foo()
{
    nim_super_team_kick_async func = (nim_super_team_kick_async) GetProcAddress(hInst, "nim_super_team_kick_async");

    Json::Value json_value;
    json_value.append("litianyi01");    
    json_value.append("litianyi02");

    func("12345", json_value.toStyledString().c_str(), "", &TeamEventCb, nullptr);
}

主动退群

除拥有者外,其他用户均可以主动退群:

C++

void TeamEventCb(const nim::SuperTeamEvent& team_event)
{
    ···
}

void foo()
{
    nim::SuperTeam::LeaveAsync("12345", &TeamEventCb);
}

C

void TeamEventCb(int res_code, int notification_id, const char *tid, const char *result, const char *json_extension, const void *user_data)
{
    ···
}

typedef void(*nim_super_team_leave_async)(const char *tid, const char *json_extension, nim_super_team_event_cb_func cb, const void* user_data);

void foo()
{
    nim_super_team_leave_async func = (nim_super_team_leave_async) GetProcAddress(hInst, "nim_super_team_leave_async");

    func("12345", "", &TeamEventCb, nullptr);
}

编辑群组资料

超大群拥有者可修改群名及其他群资料。

void nim_super_team_update_team_info_async(const char *tid, const char *json_info, const char *json_extension, nim_super_team_opt_cb_func cb, const void *user_data);

例:

C++

void OnUpdateBroadCb(const nim::SuperTeamEvent& team_event)
{
    if (team_event.res_code_ == 200)
    {
        ···
    }
}

void foo()
{
    Json::Value broad;
    broad["title"] = "title";
    broad["content"] = "内容";
    broad["creator"] = "test_user";

    Json::Value broads;
    broads.append(broad);

    Json::FastWriter writer;
    nim::SuperTeamInfo param;
    param.SetAnnouncement(writer.write(broads));
    param.SetTeamID("tid_");

    nim::SuperTeam::UpdateSuperTeamInfoAsync("tid_", param, &OnUpdateBroadCb);
}

C

void CallbackTeamOperate(int error, int team_operate, const char *tid, const char* str, const char *json_exten, const void *user_data)
{
    if (error == kNIMResSuccess)
    {
        ...
    }
    else
    {
        ...
    }
}

typedef void(*nim_super_team_update_team_info_async)(const char *tid, const char *json_info, const char *json_extension, nim_super_team_event_cb_func cb_func, const void* user_data);

void foo()
{
    Json::Value values;
    values[kNIMTeamInfoKeyID] = "tid";    
    values[kNIMTeamInfoKeyAnnouncement] = "123"; //修改群公告,同样的,目前可以修改群名称,群简介,具体参阅api文档

    nim_super_team_update_team_info_async func = (nim_super_team_update_team_info_async) GetProcAddress(hInst, "nim_super_team_update_team_info_async");
    func("tid", values.toStyledString().c_str(), nullptr, &CallbackTeamOperate, nullptr);
}

群组成员

群组通知

用户在创建群或者进入群成功之后,任何关于群的变动(群组资料变动,群成员变动等),网易云通信服务器都会下发一条群通知消息。APP 可以通过注册全局回调函数接受群组通知。

void nim_super_team_reg_team_event_cb(const char *json_extension, nim_super_team_event_cb_func cb, const void *user_data);

例:

C++

void OnTeamEventCallback(const nim::SuperTeamEvent& result)
{
    ···
}

foo()
{
    nim::SuperTeam::RegSuperTeamEventCb(&OnTeamEventCallback);
}

C

void CallbackTeamEvent(int error, int team_event, const char *tid, const char* str, const char *json_exten, const void *user_data)
{
    switch (team_event)
    {
         ...    
    }
}

typedef void(*nim_super_team_reg_team_event_cb)(const char *json_extension, nim_super_team_event_cb_func cb, const void *user_data);

void foo()
{
    nim_super_team_reg_team_event_cb func = (nim_super_team_reg_team_event_cb) GetProcAddress(hInst, "nim_super_team_reg_team_event_cb");
    func(nullptr, &CallbackTeamEvent, nullptr);
}

自定义拓展

SDK 提供了群信息的拓展接口,开发者可以通过维护群信息的两个属性来自行定义内容。

设置消息提醒

可以对超大群设置消息提醒类型,群消息提醒分为全部提醒、仅管理员消息提醒、全部不提醒等三种,默认为全部提醒。 PC SDK可以通过修改自己的群属性来设置消息提醒:

参数 类型 必须 说明
prop(C++) struct 群组成员信息
cb function 回调函数
json_extension std::string 扩展参数