IM 即时通讯
Android
开发指南

频道管理(不再维护)

更新时间: 2023/07/21 14:55:28

本文已不再维护,请前往频道概述频道管理频道黑白名单等文档查看相关说明。

频道(Channel)是具体信息通讯的发生地。以游乐场来类比,频道就相当于游乐场中的游乐设施。有了圈组服务器这个游乐场地,就必须构建游乐设施才能给用户提供服务。 SDK 中用于表示频道的结构为 QChatChannel。

QChatChannel参数说明:

返回值 参数 说明
long getChannelId() 获取频道id
long getServerId() 获取服务器id
String getName() 获取名称
String getTopic() 获取主题
String getCustom() 获取自定义扩展
QChatChannelType getType() 获取Channel类型
boolean isValid() 是否有效
long getCreateTime() 获取创建时间
long getUpdateTime() 获取更新时间
String getOwner() 获取所有者
void setName(String name) 设置名称
void setTopic(String topic) 设置主题
void setCustom(String custom) 设置自定义扩展
void setType(QChatChannelType type) 设置Channel类型
void setValid(boolean validFlag) 设置有效标志:false-无效,true-有效
QChatChannelMode getViewMode() 获取查看模式
void setViewMode(QChatChannelMode viewMode) 设置查看模式
QChatChannelMode.PUBLIC:公开的
QChatChannelMode.PRIVATE:秘密的
Long getCategoryId() 获取频道分组Id
QChatChannelSyncMode getSyncMode() 获取同步模式

创建频道

接口

创建圈组服务器后,可以在该服务器下创建频道:

/**
 * 创建频道
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回创建成功的频道
 */
InvocationFuture<QChatCreateChannelResult> createChannel(QChatCreateChannelParam param);

其中 QChatCreateChannelParam 需要传入 ServerId、Channel 名称和 Channel 类型。另外还可以设置 Channel 的主题、自定义扩展和查看模式,9.1.0版本后可设置反垃圾配置QChatAntiSpamConfig。

9.2.0 版本增加了频道分组,创建频道时可以设置需要加入的频道分组id以及是否同步频道分组配置。

9.3.0 版本增加了实时互动频道类型,创建频道时可通过 QChatChannelType 参数来选择频道类型。

如果设置为同步模式(QChatChannelMode.SYNC),请不要设置频道的查看模式(QChatChannelMode)。

示例代码

//建立一个消息类型的频道
QChatCreateChannelParam param = new QChatCreateChannelParam(943445L, "测试频道", QChatChannelType.MessageChannel);
param.setCustom("自定义扩展");
param.setTopic("主题");
//设置频道为公开频道
param.setViewMode(QChatChannelMode.PUBLIC);
QChatAntiSpamConfig antiSpamConfig = new QChatAntiSpamConfig("用户配置的对某些资料内容另外的反垃圾的业务ID");
param.setAntiSpamBusinessId(antiSpamConfig);
NIMClient.getService(QChatChannelService.class).createChannel(param).setCallback(
        new RequestCallback<QChatCreateChannelResult>() {
            @Override
            public void onSuccess(QChatCreateChannelResult result) {
                //创建Channel成功,返回创建成功的Channel信息
                QChatChannel channel = result.getChannel();
            }

            @Override
            public void onFailed(int code) {
                //创建Channel失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //创建Channel异常
            }
        });

修改频道信息

接口

如拥有频道管理权限,可修改频道信息:

/**
 * 修改频道信息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。
 */
InvocationFuture<QChatUpdateChannelResult> updateChannel(QChatUpdateChannelParam param);

其中 QChatUpdateChannelParam 需要传入待修改的 ChannelId。可以修改Channel的名称、主题、自定义扩展以及查看模式,9.1.0版本后可设置反垃圾配置QChatAntiSpamConfig。

示例代码

QChatUpdateChannelParam param = new QChatUpdateChannelParam(885305L);
param.setName("测试修改名称");
param.setCustom("修改自定义扩展");
param.setTopic("修改主题");
//修改查看模式为私密的
param.setViewMode(QChatChannelMode.PRIVATE);
QChatAntiSpamConfig antiSpamConfig = new QChatAntiSpamConfig("用户配置的对某些资料内容另外的反垃圾的业务ID");
param.setAntiSpamBusinessId(antiSpamConfig);
NIMClient.getService(QChatChannelService.class).updateChannel(param).setCallback(
        new RequestCallback<QChatUpdateChannelResult>() {
            @Override
            public void onSuccess(QChatUpdateChannelResult result) {
                //修改Channel成功,返回修改成功的Channel信息
                QChatChannel channel = result.getChannel();
            }

            @Override
            public void onFailed(int code) {
                //修改Channel失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //修改Channel异常
            }
        });

删除频道

接口

如拥有频道管理权限,可删除已创建的频道:

/**
 * 删除频道
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。
 */
InvocationFuture<Void> deleteChannel(QChatDeleteChannelParam param);

其中 QChatDeleteChannelParam 需要传入需要删除的 ChannelId。

示例代码

NIMClient.getService(QChatChannelService.class).deleteChannel( new QChatDeleteChannelParam(885305L)).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //删除Channel成功
            }

            @Override
            public void onFailed(int code) {
                //删除Channel失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //删除Channel异常
            }
        });

查询频道信息

SDK提供两种方式查询频道信息,分别是按 ChannelId 查询和按时间分页查询。

按 ChannelId 查询

接口

可以通过传入 ChannelId 列表查询指定的 Channel 信息:

/**
 * 通过频道Id查询频道
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的频道列表
 */
InvocationFuture<QChatGetChannelsResult> getChannels(QChatGetChannelsParam param);

其中 QChatGetChannelsParam 入参内容为将要查询的 ChannelId 列表。

示例代码

List<Long> channelIds = new ArrayList<>();
channelIds.add(885305L);
NIMClient.getService(QChatChannelService.class).getChannels(new QChatGetChannelsParam(channelIds)).setCallback(
        new RequestCallback<QChatGetChannelsResult>() {
            @Override
            public void onSuccess(QChatGetChannelsResult result) {
                //查询Channel列表成功
                List<QChatChannel> channels = result.getChannels();
            }

            @Override
            public void onFailed(int code) {
                //查询Channel列表l失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询Channel列表异常
            }
        });

按时间分页查询

接口

可以通过时间戳和查询数量分页查询频道信息:

/**
 * 通过分页接口查询频道
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的频道列表
 */
InvocationFuture<QChatGetChannelsByPageResult> getChannelsByPage(QChatGetChannelsByPageParam param);

其中 QChatGetChannelsByPageParam 需要传入查询的 ServerId、查询锚点时间戳 timeTag 和查询数量限制 limit。

示例代码

NIMClient.getService(QChatChannelService.class).getChannelsByPage(new QChatGetChannelsByPageParam(943445L,System.currentTimeMillis(),100)).setCallback(
        new RequestCallback<QChatGetChannelsByPageResult>() {
            @Override
            public void onSuccess(QChatGetChannelsByPageResult result) {
                //查询Channel列表成功
                List<QChatChannel> channels = result.getChannels();
            }

            @Override
            public void onFailed(int code) {
                //查询Channel列表l失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询Channel列表异常
            }
        });

订阅频道

接口

  • 您可以通过以下接口订阅或者取消订阅频道的消息、未读数、未读状态、系统通知。大圈组服务器下只有订阅频道后才能收到该频道的订阅内容(消息、未读数、未读状态)。
  • 与您相关的消息不需要订阅频道就可以收到,比如@你的消息(@All的消息不属于与你相关的消息)。
  • 小圈组服务器下不需要不需要订阅频道就可以收到所有该服务器下所有频道的消息。
/**
 * 订阅频道
 * 大服务器下,只有订阅频道后才能收到该频道的订阅内容(消息、未读数、未读状态);与你相关的消息不需要订阅频道就可以收到,比如@你的消息(@All的消息不属于与你相关的消息)
 * 小服务器下,不需要订阅频道就可以收到所有该服务器下所有频道的消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回订阅结果
 */
InvocationFuture<QChatSubscribeChannelResult> subscribeChannel(QChatSubscribeChannelParam param);

其中 QChatSubscribeChannelParam 需要传入订阅类型、订阅操作类型和待订阅的serverId+channelId列表。

示例代码

List<QChatChannelIdInfo> channelIdInfos = new ArrayList<>();
channelIdInfos.add(new QChatChannelIdInfo(943445L,885305L));
//订阅channel的【消息未读数】/【通知】
QChatSubscribeChannelParam param = new QChatSubscribeChannelParam(QChatSubscribeType.CHANNEL_MSG_UNREAD_COUNT, QChatSubscribeOperateType.SUB, channelIdInfos);

NIMClient.getService(QChatChannelService.class).subscribeChannel(param).setCallback(new RequestCallback<QChatSubscribeChannelResult>() {
    @Override
    public void onSuccess(QChatSubscribeChannelResult result) {
        //订阅成功,返回订阅Channel的未读信息
        List<QChatUnreadInfo> unreadInfoList = result.getUnreadInfoList();
    }

    @Override
    public void onFailed(int code) {
        //订阅失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //订阅异常
    }
});

查询未读信息

接口

可以通过以下接口查询服务器下各频道得未读信息。

该方法单次最多查询频道数量为 100。

/**
 * 查询服务器下各频道得未读信息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的信息
 */
InvocationFuture<QChatGetChannelUnreadInfosResult> getChannelUnreadInfos(QChatGetChannelUnreadInfosParam param);

查询频道成员列表

接口

可以通过以下接口分页查询某频道下的成员列表。如果是公开频道,则成员为除拉入此频道黑名单外的所有圈组服务器成员;如果是私密频道,则为此频道下白名单中所有圈组服务器成员。

/**
 * 通过分页接口查询频道成员
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的频道成员
 */
InvocationFuture<QChatGetChannelMembersByPageResult> getChannelMembersByPage(QChatGetChannelMembersByPageParam param);

其中 QChatGetChannelMembersByPageParam 中传入查询的 ServerId、ChannelId、查询锚点时间戳 timeTag 和查询数量限制 limit,其中如果需要查询当前时间,timeTag请务必传0。

示例代码

QChatGetChannelMembersByPageParam queryParam = new QChatGetChannelMembersByPageParam(getLong(this,SP_SERVERID),getLong(this,SP_CHANNELID),System.currentTimeMillis());
queryParam.setLimit(100);
NIMClient.getService(QChatChannelService.class).getChannelMembersByPage(queryParam).setCallback(new RequestCallback<QChatGetChannelMembersByPageResult>() {

更新频道黑白名单

接口

如有权限管理黑白名单,可更新频道的黑白名单成员信息。

/**
 * 更新频道黑白名单成员
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。
 */
InvocationFuture<Void> updateChannelBlackWhiteMembers(QChatUpdateChannelBlackWhiteMembersParam param);

其中QChatUpdateChannelBlackWhiteMembersParam参数说明如下:

返回值 参数 说明
Long getServerId() 获取服务器Id
Long getChannelId() 获取频道Id
QChatChannelBlackWhiteType getType() 获取黑白名单类型
QChatChannelBlackWhiteType.WHITE:白名单
QChatChannelBlackWhiteType.BLACK:黑名单
QChatChannelBlackWhiteOperateType getOperateType() 获取黑白名单操作类型
QChatChannelBlackWhiteOperateType.ADD:添加
QChatChannelBlackWhiteOperateType.REMOVE:移除
List< String> getToAccids() 获取账户accid列表:添加或者移除到黑白名单的accid列表

示例代码

//将accids中的这些账户添加到黑名单中
NIMClient.getService(QChatChannelService.class).updateChannelBlackWhiteMembers(new QChatUpdateChannelBlackWhiteMembersParam(943445L,885305L,
        QChatChannelBlackWhiteType.BLACK, QChatChannelBlackWhiteOperateType.ADD,accids)).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void result) {
        //更新Channel黑白名单成员成功

    }

    @Override
    public void onFailed(int code) {
        //更新Channel黑白名单成员失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //更新Channel黑白名单成员异常
    }
});

分页查询频道黑白名单

接口

如有权限管理黑白名单,可分页查询频道黑白名单成员列表:

/**
 * 分页查询频道黑白名单成员列表
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的黑白名单成员
 */
InvocationFuture<QChatGetChannelBlackWhiteMembersByPageResult> getChannelBlackWhiteMembersByPage(QChatGetChannelBlackWhiteMembersByPageParam param);

其中 QChatGetChannelBlackWhiteMembersByPageParam 需要传入查询的 ServerId、ChannelId、黑白名单类型、查询锚点时间戳timeTag 和查询数量限制limit。

示例代码

//查处频道黑名单中的成员列表
NIMClient.getService(QChatChannelService.class).getChannelBlackWhiteMembersByPage(new QChatGetChannelBlackWhiteMembersByPageParam(943445L,885305L,QChatChannelBlackWhiteType.BLACK,System.currentTimeMillis())).setCallback(new RequestCallback<QChatGetChannelBlackWhiteMembersByPageResult>() {
    @Override
    public void onSuccess(QChatGetChannelBlackWhiteMembersByPageResult result) {
        //查询成功,返回频道黑名单中成员列表
        List<QChatServerMember> members = result.getMemberList();
        //下一页的起始时间戳
        long nextTimeTag = result.getNextTimeTag();
        //是否还有下一页
        boolean hasMore = result.isHasMore();
    }

    @Override
    public void onFailed(int code) {
        //查询失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //查询异常
    }
});

更新频道黑名单身份组

接口

如有权限管理黑白名单,可更新频道的黑白名单身份组:

/**
 * 更新频道黑白名单身份组
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。
 */
InvocationFuture<Void> updateChannelBlackWhiteRoles(QChatUpdateChannelBlackWhiteRolesParam param);

其中 QChatUpdateChannelBlackWhiteRolesParam 需要传入操作的ServerId、ChannelId、黑白名单类型、黑白名单操作类型和身份组Id列表。

示例代码

NIMClient.getService(QChatChannelService.class).updateChannelBlackWhiteRoles(new QChatUpdateChannelBlackWhiteRolesParam(943445L,885305L,
        QChatChannelBlackWhiteType.BLACK, QChatChannelBlackWhiteOperateType.ADD,roleIds)).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void result) {
        //更新Channel黑白名单身份组成功

    }

    @Override
    public void onFailed(int code) {
        //更新Channel黑白名单身份组失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //更新Channel黑白名单身份组异常
    }
});

分页查询黑白名单身份组列表

接口

如有权限管理黑白名单,可查询频道黑白名单身份组列表:

/**
 * 分页查询频道黑白名单身份组列表
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的黑白名单身份组
 */
InvocationFuture<QChatGetChannelBlackWhiteRolesByPageResult> getChannelBlackWhiteRolesByPage(QChatGetChannelBlackWhiteRolesByPageParam param);

其中 QChatGetChannelBlackWhiteRolesByPageParam 需要传入查询的 ServerId、ChannelId、黑白名单类型、查询锚点时间戳 timeTag 和查询数量限制 limit。

示例代码

//查处频道黑名单中的身份组列表
NIMClient.getService(QChatChannelService.class).getChannelBlackWhiteRolesByPage(new QChatGetChannelBlackWhiteRolesByPageParam(943445L,885305L,QChatChannelBlackWhiteType.BLACK,System.currentTimeMillis())).setCallback(new RequestCallback<QChatGetChannelBlackWhiteRolesByPageResult>() {
    @Override
    public void onSuccess(QChatGetChannelBlackWhiteRolesByPageResult result) {
        //查询成功,返回频道黑名单中身份组列表
        List<QChatServerRole> roleList = result.getRoleList();
        //下一页的起始时间戳
        long nextTimeTag = result.getNextTimeTag();
        //是否还有下一页
        boolean hasMore = result.isHasMore();
    }

    @Override
    public void onFailed(int code) {
        //查询失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //查询异常
    }
});

更新用户频道推送配置

接口

您可通过以下接口设置频道维度接收推送消息类型:

/**
 * 更新用户频道推送配置
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateUserChannelPushConfig(QChatUpdateUserChannelPushConfigParam param);

其中QChatUpdateUserChannelPushConfigParam中需要传入对应的ServerId、ChannelId和推送消息类型选项QChatPushMsgType。 QChatPushMsgType提供5种类型:

  • ALL:推送全部类型消息
  • HIGH_MID_LEVEL:只推送高、中等级消息
  • HIGH_LEVEL:只推送高等级消息
  • NONE:全部消息都不推送
  • INHERIT:继承上一级配置(即继承服务器维度的配置)

示例代码

NIMClient.getService(QChatChannelService.class).updateUserChannelPushConfig(new QChatUpdateUserChannelPushConfigParam(1607312, 1492446L,QChatPushMsgType.ALL))
				.setCallback(new RequestCallback<Void>() {
					@Override
					public void onSuccess(Void param) {
						//操作成功
					}

					@Override
					public void onFailed(int code) {
						//操作失败,返回错误code
					}

					@Override
					public void onException(Throwable exception) {
						//操作异常
					}
				});

获取用户频道推送配置列表

接口

您可通过以下接口获取多个频道的推送配置:

/**
 * 获取用户频道推送配置列表
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果
 */
InvocationFuture<QChatGetUserPushConfigsResult> getUserChannelPushConfigs(QChatGetUserChannelPushConfigsParam param);

其中QChatGetUserChannelPushConfigsParam中需要传入需要查询的serverId和channelId列表。 QChatGetUserPushConfigsResult返回查询到的用户推送配置QChatUserPushConfig列表

QChatUserPushConfig参数说明如下:

返回值 参数 说明
String getAccid() 获取用户accid
long getServerId() 获取服务器id
long getChannelId() 获取频道id
QChatDimension getDimension() 获取推送维度
QChatPushMsgType getPushMsgType() 获取推送接收哪些消息类型
long getCreateTime() 获取创建时间
long getUpdateTime() 获取更新时间

示例代码

List<QChatChannelIdInfo> channelIdInfos = getChannelIdInfos();
NIMClient.getService(QChatChannelService.class).getUserChannelPushConfigs(new QChatGetUserChannelPushConfigsParam(channelIdInfos))
        .setCallback(new RequestCallback<QChatGetUserPushConfigsResult>() {
            @Override
            public void onSuccess(QChatGetUserPushConfigsResult result) {
                //操作成功
                List<QChatUserPushConfig> userPushConfigs = result.getUserPushConfigs();
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

此文档是否对你有帮助?
有帮助
去反馈
  • 创建频道
  • 接口
  • 示例代码
  • 修改频道信息
  • 接口
  • 示例代码
  • 删除频道
  • 接口
  • 示例代码
  • 查询频道信息
  • 按 ChannelId 查询
  • 接口
  • 示例代码
  • 按时间分页查询
  • 接口
  • 示例代码
  • 订阅频道
  • 接口
  • 示例代码
  • 查询未读信息
  • 接口
  • 查询频道成员列表
  • 接口
  • 示例代码
  • 更新频道黑白名单
  • 接口
  • 示例代码
  • 分页查询频道黑白名单
  • 接口
  • 示例代码
  • 更新频道黑名单身份组
  • 接口
  • 示例代码
  • 分页查询黑白名单身份组列表
  • 接口
  • 示例代码
  • 更新用户频道推送配置
  • 接口
  • 示例代码
  • 获取用户频道推送配置列表
  • 接口
  • 示例代码