Android 超级群频道与用户组用法
本页给出 Android 端从“超级群 → 频道 → 用户组 → 按 SUPER_GROUP(10) 收发消息”的完整用法,示例使用 SDK 公开方法(io.nipaas.imlib),并标注版本与限制。语义与兼容规则见 超级群会话类型。
| 项 | 内容 |
|---|---|
| 包 / 模块 | io.nipaas.imlib |
| 超级群类型常量 | ConversationType.SUPER_GROUP(数值 10;旧版本 SDK 可用数值 10 或继续 2+super) |
| 调用风格 | 回调式(callback-last);有返回数据用 ResultCallback<T>,无数据用 OperationCallback |
| 频道/用户组操作 | 8 个语义操作(创建/列表/加入/离开频道、创建/列表用户组、绑定、按用户反查) |
| 消息 | 频道消息按超级群会话发送;rev23 起可带 options.channelId 按频道投递(不带则群级);10 与存量 2+super 共用同一会话键 |
版本前提
示例中的 SUPER_GROUP 常量与“按 10 发送”需要 SDK/服务端包含 rev22。
若当前环境尚未升级:① 用数值 10 传参(仍有实现拒绝风险);② 继续用 GROUP(2) + groupType=super(存量兼容写法)。
频道/用户组接口(rev21)不依赖 10,可直接使用。
前置条件
- 应用已开通
supergroup服务(未开通返回 1021);客户端已连接(CONNECTED)。 - 超级群成员上限 100000;频道/用户组创建需要群主或管理员权限(否则 1003)。
- 频道列表/用户组列表需要群成员身份;频道 ID 在应用内唯一,跨群同名时用
groupId消歧。
步骤 1:创建/确认超级群
Java
// 1) 创建/确认超级群(复用 createGroup,options.groupType=super)
client.createGroup("产品社区", listOf("alice", "bob"),
GroupOptions(groupId = "g_1001", groupType = GroupType.SUPER),
new ResultCallback<Group>() {
@Override public void onSuccess(Group group) { /* maxMembers=100000 */ }
@Override public void onError(IMError error) { /* 1021 服务未开通 / 1015 超限 */ }
});步骤 2:频道管理
Java
// 2) 频道:创建 → 列表 → 加入 / 离开
client.createSupergroupChannel(
new CreateSupergroupChannelParams("g_1001", "产品讨论", ChannelType.PUBLIC, null),
new ResultCallback<SupergroupChannel>() {
@Override public void onSuccess(SupergroupChannel channel) { /* channel.getChannelId() */ }
@Override public void onError(IMError error) { /* 1003/1005/1015 */ }
});
client.listSupergroupChannels("g_1001", new ResultCallback<SupergroupChannelListResult>() {
@Override public void onSuccess(SupergroupChannelListResult result) { /* result.getChannels() */ }
@Override public void onError(IMError error) { /* 1003/1005 */ }
});
client.joinSupergroupChannel(channelId, new SupergroupChannelOptions("g_1001"),
new ResultCallback<JoinSupergroupChannelResult>() {
@Override public void onSuccess(JoinSupergroupChannelResult r) { /* r.getAlreadyJoined() */ }
@Override public void onError(IMError error) { /* 1003 私有频道无权限 / 1005 */ }
});
client.leaveSupergroupChannel(channelId, new SupergroupChannelOptions("g_1001"), callback);步骤 3:用户组与绑定
Java
// 3) 用户组:创建 → 绑定频道
client.createUserGroup(new CreateUserGroupParams("g_1001", "核心成员", Arrays.asList("alice", "bob")),
new ResultCallback<UserGroup>() {
@Override public void onSuccess(UserGroup group) { /* group.getUserGroupId() */ }
@Override public void onError(IMError error) { /* 1003 非管理员 / 1004 用户不存在 / 1015 */ }
});
client.bindUserGroupToChannel(channelId, userGroupId, new SupergroupChannelOptions("g_1001"),
new ResultCallback<BindUserGroupToChannelResult>() {
@Override public void onSuccess(BindUserGroupToChannelResult r) { /* r.getReverseIndexed() */ }
@Override public void onError(IMError error) { /* 1003/1005 */ }
});步骤 4:按 10 收发与会话
Java
// 4) 按 10 发送 / 历史 / 会话列表 / 事件
client.sendTextMessage(ConversationType.SUPER_GROUP, "g_1001", "大家好",
new SendMessageCallback() {
@Override public void onSuccess(Message message) { /* 已分配 seq */ }
@Override public void onError(IMError error) { /* 1001/1003/1006/1008 */ }
});
client.getHistoryMessages(ConversationType.SUPER_GROUP, "g_1001", new HistoryOptions(20, null),
new ResultCallback<HistoryPage>() {
@Override public void onSuccess(HistoryPage page) { /* page.getMessages() 可含 2 与 10 */ }
@Override public void onError(IMError error) { /* 1001/1003 */ }
});
client.getConversationList(new ResultCallback<List<Conversation>>() {
@Override public void onSuccess(List<Conversation> list) { /* 10 或 2+super */ }
@Override public void onError(IMError error) { }
});
client.addEventListener(IMClientEvent.MESSAGES, payload -> { /* 按 type 10 或 2+super 判断 */ });接口与错误码
| 操作 | 入参 | 返回 | 错误码 |
|---|---|---|---|
createSupergroupChannel | params:{groupId:string, name:string, type:ChannelType, joinPolicy?:JoinPolicy} | SupergroupChannel | 1001 1002 1003 1005 1015 |
listSupergroupChannels | groupId:string | {groupId:string, channels:SupergroupChannel[], total:uint32} | 1001 1002 1003 1005 |
joinSupergroupChannel | channelId:string, options:{groupId?:string}? | {groupId:string, channelId:string, userId:string, joined:bool, alreadyJoined:bool} | 1001 1002 1003 1005 |
leaveSupergroupChannel | channelId:string, options:{groupId?:string}? | {groupId:string, channelId:string, userId:string, left:bool, wasMember:bool} | 1001 1002 1003 1005 |
bindUserGroupToChannel | channelId:string, userGroupId:string, options:{groupId?:string}? | {groupId:string, channelId:string, userGroupId:string, bound:bool, reverseIndexed:bool} | 1001 1002 1003 1005 |
createUserGroup | params:{groupId:string, name:string, members?:string[]} | UserGroup | 1001 1002 1003 1004 1015 |
listUserGroups | groupId:string | {groupId:string, userGroups:UserGroup[], total:uint32} | 1001 1002 1003 1005 |
getUserGroupsByUser | userId:string, options:{groupId?:string}? | {userId:string, userGroups:UserGroup[], total:uint32} | 1001 1002 1003 |
| 错误码 | 名称 | 含义 | 可重试 |
|---|---|---|---|
1001 | INVALID_PARAMETER | 参数错误 | 否 |
1002 | INVALID_TOKEN | Token 无效或已过期 | 否 |
1003 | FORBIDDEN | 无权限 | 否 |
1004 | USER_NOT_FOUND | 用户不存在 | 否 |
1005 | GROUP_NOT_FOUND | 群组不存在 | 否 |
1006 | NOT_GROUP_MEMBER | 未加入群组 | 否 |
1015 | MEMBERSHIP_LIMIT | 成员数量超出上限 | 否 |
限制
- 频道消息已支持(rev23):发送传 options.channelId 即按频道投递;不带 channelId 为群级消息。频道消息不单独成会话,未读/回执按群会话聚合。
- 不自动创建默认频道(RCDefault),频道需要显式创建;默认免打扰未实现。
- 单群频道与用户组各 100 个上限(超限 1015);频道名/用户组名长度在接口内校验(1001)。
- IMKit 未提供频道/用户组组件;10 的会话渲染需要 IMKit 升级到识别 rev22 的版本。
- iOS / HarmonyOS 为契约预留(声明同构,无运行时代码)。