tencent cloud

文档反馈

Android&iOS&Mac

最后更新时间:2022-11-10 14:54:18

    功能描述

    社群是一个由于共同主题而让大家聚集在一起的超大群组,可以在社群下根据不同兴趣创建多个话题。
    社群用来管理群成员。社群下的所有话题不仅可以共享社群成员,还可以独立收发消息而不相互干扰。

    • 社群和话题的管理接口在核心类 V2TIMGroupManager(Android) / V2TIMManager(Group)(iOS & Mac) 中。
    • 话题中的消息相关接口在核心类 V2TIMMessageManager(Android) / V2TIMManager(Message)(iOS & Mac) 中。
    说明:

    6.2.2363 及以上版本支持,需 购买旗舰版 并在 控制台 > 功能配置 > 群组配置 > 群功能配置 > 社群 打开开关后方可使用。

    社群管理

    创建社群

    创建支持话题的社群分两步:

    1. 创建 V2TIMGroupInfo (Android / iOS & Mac / Windows) 对象,其中 groupType 设置为 CommunityisSupportTopic 设置为 true/YES
    2. 调用 createGroup (Android / iOS & Mac / Windows) 接口创建群组。

    示例代码如下:

    V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
    v2TIMGroupInfo.setGroupName("This is a Community");
    v2TIMGroupInfo.setGroupType(V2TIMManager.GROUP_TYPE_COMMUNITY);
    v2TIMGroupInfo.setSupportTopic(true);
    V2TIMManager.getGroupManager().createGroup(v2TIMGroupInfo, null, new V2TIMValueCallback<String>() {
     @Override
     public void onSuccess(String groupID) {
       // 创建社群成功
     }
      @Override
     public void onError(int code, String desc) {
         // 创建社群失败
     }
    });
    

    获取加入的社群列表

    调用 getJoinedCommunityList(Android / iOS & Mac / Windows) 获取已经加入的支持话题的社群列表。

    示例代码如下:

    V2TIMManager.getGroupManager().getJoinedCommunityList(new V2TIMValueCallback<List<V2TIMGroupInfo>>() {
     @Override
     public void onSuccess(List<V2TIMGroupInfo> v2TIMGroupInfos) {
         // 获取社群列表成功
     }
     @Override
     public void onError(int code, String desc) {
         // 获取社群列表失败
     }
    });
    

    其他管理接口

    其他功能跟普通群组使用方法一样,涉及的接口有:

    分类 功能 接口
    社群管理 加入社群 joinGroup (Android / iOS & Mac)
    退出社群 quitGroup (Android / iOS & Mac)
    解散社群 dismissGroup (Android / iOS & Mac)
    获取社群资料 getGroupsInfo (Android / iOS & Mac)
    修改社群资料 setGroupInfo (Android / iOS & Mac)
    社群成员管理 获取社群成员列表 getGroupMemberList (Android / iOS & Mac)
    获取社群成员资料 getGroupMembersInfo (Android / iOS & Mac)
    修改社群成员资料 setGroupMemberInfo (Android / iOS & Mac)
    踢出社群成员 kickGroupMember (Android / iOS & Mac)

    话题管理

    同一社群下可创建多个话题,多个话题共享一套社群成员关系,但不同话题内独立收发消息、互不干扰。

    说明:

    需在 控制台 > 功能配置 > 群组配置 > 群功能配置 > 社群 页面,完成开通社群后,再打开开通话题开关,方可使用。

    创建话题

    创建话题分两步:

    1. 创建 V2TIMTopicInfo (Android / iOS & Mac / Windows) 对象。
    2. 调用 createTopicInCommunity (Android / iOS & Mac / Windows) 接口创建话题。

    示例代码如下:

    V2TIMTopicInfo topicInfo = new V2TIMTopicInfo();
    topicInfo.setTopicName(topicName);
    topicInfo.setTopicFaceUrl(topicFaceUrl);
    topicInfo.setIntroduction(topicIntroduction);
    topicInfo.setNotification(topicNotification);
    topicInfo.setCustomString(topicCustomString);
    // groupID 填支持话题的社群 ID
    V2TIMManager.getGroupManager().createTopicInCommunity(groupID, topicInfo, new V2TIMValueCallback<String>() {
     @Override
     public void onSuccess(String topicID) {
         // 创建话题成功
     }
      @Override
     public void onError(int code, String desc) {
         // 创建话题失败
     }
    });
    

    删除话题

    调用 deleteTopicFromCommunity(Android / iOS & Mac / Windows) 接口删除话题。

    示例代码如下:

    V2TIMManager.getGroupManager().deleteTopicFromCommunity(groupID, topicIDList, new V2TIMValueCallback<List<V2TIMTopicOperationResult>>() {
     @Override
     public void onSuccess(List<V2TIMTopicOperationResult> v2TIMTopicOperationResults) {
         // 删除话题成功
     }
      @Override
     public void onError(int code, String desc) {
         // 删除话题失败
     }
    });
    

    修改话题信息

    修改话题信息分两步:

    1. 创建 V2TIMTopicInfo (Android / iOS & Mac / Windows) 对象,并设置需要修改的字段。
    2. 调用 setTopicInfo (Android / iOS & Mac / Windows) 接口修改话题信息。

    示例代码如下:

    V2TIMTopicInfo topicInfo = new V2TIMTopicInfo();
    topicInfo.setTopicID(topicID);
    topicInfo.setTopicName(topicName);
    topicInfo.setTopicFaceUrl(topicFaceUrl);
    topicInfo.setIntroduction(topicIntroduction);
    topicInfo.setNotification(topicNotification);
    topicInfo.setCustomString(topicCustomString);
    topicInfo.setDraft(topicDraft);
    topicInfo.setAllMute(false);
    V2TIMManager.getGroupManager().setTopicInfo(topicInfo, new V2TIMCallback() {
     @Override
     public void onSuccess() {
         // 修改话题信息成功
     }
      @Override
     public void onError(int code, String desc) {
         // 修改话题信息失败
     }
    });
    

    修改话题其他信息可参考禁言成员修改话题消息接收选项

    获取话题列表

    调用 getTopicInfoList (Android / iOS & Mac / Windows) 接口获取话题列表。

    • 当 topicIDList 列表为空时,为获取该社群下的所有话题列表
    • 当 topicIDList 填入指定的话题 ID 时,为获取填入的话题列表

    示例代码如下:

    V2TIMManager.getGroupManager().getTopicInfoList(groupID, topicIDList, new V2TIMValueCallback<List<V2TIMTopicInfoResult>>() {
     @Override
     public void onSuccess(List<V2TIMTopicInfoResult> v2TIMTopicInfoResults) {
        // 获取话题列表成功
     }
      @Override
     public void onError(int code, String desc) {
        // 获取话题列表失败
     }
    });
    

    实现话题分组

    社群-分组-话题三级结构中的分组实现原理为:
    社群资料的 customInfo (Android / iOS & Mac / Windows) 中定义一个字段保存该社群的话题分组列表;每个话题所属的分组,存储于话题资料的 customString (Android / iOS & Mac / Windows) 字段中。

    • 加载社群时,根据社群(群组)资料中的 customInfo 的话题分组列表字段,展示分组列表。
    • 加载社群下的 Topic 列表时,通过话题资料中的 customString 获取分组名分配到所属分组中。
    说明:

    社群(群组)中 customInfo 的话题分组列表字段名,key 值,可由您自行定义。
    以下示例代码中,将其命名为 topic_category

    配置社群的分组列表

    此处直接修改群组 groupInfocustomInfo 即可。此处为一个 Map,key 值是您定义的话题分组列表字段名。
    示例代码如下:

    List<String> categoryList = new ArrayList<>();
    categoryList.add("分组1");
    categoryList.add("分组2");
    byte[] categoriesByteArray = gson.toJson(categoryList).getBytes();
    Map<String, byte[]> customMap = new HashMap<>();
    // 需要先在控制台配置群自定义字段 topic_category
    customMap.put("topic_category", categoriesByteArray);
    V2TIMGroupInfo modifyInfo = new V2TIMGroupInfo();
    modifyInfo.setGroupID(groupID);
    modifyInfo.setCustomInfo(customMap);
    V2TIMManager.getGroupManager().setGroupInfo(modifyInfo, new V2TIMCallback() {
    @Override
    public void onSuccess() {
        // 修改群资料成功
    }
        @Override
    public void onError(int code, String desc) {
        // 修改群资料失败
    }
    });
    

    获取社群的分组列表

    示例代码如下:

    String groupID = "group1";
    List<String> groupIDList = new ArrayList<>();
    groupIDList.add(groupID);
    V2TIMManager.getGroupManager().getGroupsInfo(groupIDList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() {
    @Override
    public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfos) {
        if (v2TIMGroupInfos.size() == 0) {
            return;
        }
        V2TIMGroupInfoResult v2TIMGroupInfoResult = v2TIMGroupInfos.get(0);
        if (v2TIMGroupInfoResult.getResultCode() == BaseConstants.ERR_SUCC) {
            byte[] topicCategoryBytes = v2TIMGroupInfoResult.getGroupInfo().getCustomInfo().get("topic_category");
            List<String> topicCategories = null;
            if (topicCategoryBytes != null) {
                Gson gson = new Gson();
                try {
                    // 解析出分组列表
                    topicCategories = gson.fromJson(new String(topicCategoryBytes), List.class);
                } catch (JsonParseException e) {
                }
            }
        }
    }
        @Override
    public void onError(int code, String desc) {
        }
    });
    

    为话题添加分组

    话题所属的分组可以使用话题的 customString 字段来保存。

    示例代码如下:

    Map<String, Object> map = new HashMap<>();
    map.put("category", "分组1");
    Gson gson = new Gson();
    V2TIMTopicInfo topicInfo = new V2TIMTopicInfo();
    topicInfo.setTopicID(topicID);
    topicInfo.setCustomString(gson.toJson(map));
    V2TIMManager.getGroupManager().setTopicInfo(topicInfo, new V2TIMCallback() {
     @Override
     public void onSuccess() {
         // 修改话题信息成功
     }
      @Override
     public void onError(int code, String desc) {
         // 修改话题信息失败
     }
    });
    

    获取话题所在分组

    直接从 获取话题列表 中,取出 customString 解析 json 即可。

    监听话题回调

    V2TIMGroupListener (Android / iOS & Mac / Windows) 中增加了话题相关的回调方法,onTopicCreatedonTopicDeletedonTopicInfoChanged,用来监听话题事件。

    示例代码如下:

    V2TIMGroupListener v2TIMGroupListener = new V2TIMGroupListener() {
     @Override
     public void onTopicCreated(String groupID, String topicID) {
         // 监听话题创建通知
     }
      @Override
     public void onTopicDeleted(String groupID, List<String> topicIDList) {
         // 监听话题删除通知
     }
      @Override
     public void onTopicInfoChanged(String groupID, V2TIMTopicInfo topicInfo) {
         // 监听话题信息更新通知
     }
    };
    V2TIMManager.getInstance().addGroupListener(v2TIMGroupListener);
    

    话题消息

    话题消息相关功能跟普通消息使用方法一样,涉及的接口有:

    功能 接口 说明
    发送消息 sendMessage (Android / iOS & Mac) 参数 groupID 填为话题 topicID
    接收消息 V2TIMAdvancedMsgListener (Android / iOS & Mac) 中的 `onRecvNewMessage` 方法 消息中的 groupID 即为话题 topicID
    标记会话已读 markGroupMessageAsRead (Android / iOS & Mac) 参数 groupID 填为话题 topicID
    获取历史消息 getGroupHistoryMessageList (Android / iOS & Mac) 参数 groupID 填为话题 topicID
    撤回消息 revokeMessage (Android / iOS & Mac) 参数 groupID 填为话题 topicID
    联系我们

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

    技术支持

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

    7x24 电话支持