群组相关
更新时间: 2024/05/24 17:49:50
如何判断账号是否为某群成员?
根据群 ID 和账号查询群成员信息,下例为异步接口,如果本地群成员资料已过期,SDK 会去服务器获取最新资料。实现onResult
回调,如果查询成功,表示账号为该群成员,会返回成员信息。
NIMClient.getService(TeamService.class).queryMemberList(teamId).setCallback(new RequestCallbackWrapper<List<TeamMember>>() {
@Override
public void onResult(int code, final List<TeamMember> members, Throwable exception) { ... }
});
调用 –fetchTeamMembers:completion:
接口获取群成员,在获取到的成员列表中查看是否有指定成员。
调用 nim_team_query_team_members_async (const char *tid, bool include_user_info, const char *json_extension, nim_team_query_team_members_cb_func cb, const void *user_data)
接口查询群成员,在回调函数nim_team_query_team_members_cb_func) (const char *tid, int member_count, bool include_user_info, const char *result, const char *json_extension, const void *user_data)
中解析群成员 id json,通过kNIMTeamUserKeyValidFlag
字段判断该成员目前是否还在群里。
调用 nim.getTeamMembers(options)
接口获取群成员,option
中传入群 ID 和结果回调函数,获取成功时回调获得群成员列表。
关于群组的注意事项
-
关于创建群组时的成员数量
创建普通群时,至少要传入两个成员账号,否则会返回错误代码 414。
创建高级群时,可以只传入群主自己的账号(members
对象填owner
),稍后再邀请其他用户。 -
关于创建群组返回 414
建议可以检查下各个传参是否正确,例如:群名称长度,群名称最大 64 个字符,超过也会报 414。
-
调用IM SDK主动退群接口,返回 802
高级群的群主不能直接退群,可以先转让群再退群,或者直接解散群。
-
普通群获取群成员,返回 802
可能原因包含但不限于:普通群刚加入的新成员是处于未激活状态的(暂不属于该群),当收到群内消息后,该新成员会自动激活,激活后才可以调用「获取群成员」的接口。
-
发送群消息,返回 802
- 发消息的用户不在群里面。
- 用户被禁言了,您可以调用服务端的 API 查看该用户是否在禁言列表中,获取群组禁言列表。
-
调用IM服务端API解散群,返回 414
可能原因包含但不限于:如果群主账号被封禁后,再调用服务端API解散群,会返回
{"desc": "check accid001", "code": 414}
-
接受入群邀请返回 807
调用
acceptInvite(String teamId, String inviter)
方法,必须要先触发邀请的动作,返回 807 是由于没有触发邀请动作而导致。
关于群组的数量限制
-
创建群数量
- 对于高级群:
- 免费版每个accid可创建50个高级群。
- 正式版每个accid默认可创建100个高级群(可联系商务顾问升级扩展)。
- 已解散的群不占用数量。
- 对于普通群:免费版和正式版都没有创建普通群的数量限制,但是受加入群数量的限制。另外普通群功能受限,具体请点此查看。
- 对于高级群:
-
加入群数量
每个accid可以加入的群数量上限为5000个。
-
群最高人数(群容量)
每个群的人数上限默认为200人,开通 IM 套餐包可进行扩展。
[注意1] 升级扩展前创建的群,人数上限仍然是200。如需更改高级群支持的人数上限,可以通过IM服务端API「编辑群资料」https://api.netease.im/nimserver/team/update.action
,指定参数teamMemberLimit
表示群人数上限。
[注意2] 各端获取群最高人数的方法:- Server:调用
https://api.netease.im/nimserver/team/queryDetail.action
「获取群组详细信息」返回的maxusers
字段。 - 客户端SDK: Android:
Team
的getMemberLimit()
方法,iOS:NIMTeam
的level
字段,Web: 群对象的level
字段。
[注意3] 如果「单次邀请进群人数」大于「群最高人数」减去「群内已有人数」时,会返回错误码801,该次邀请的账号全都无法入群。
- Server:调用
-
群管理员人数
受「群最高人数」限制。
IM SDK怎么设置高级群的加入验证模式、邀请模式、被邀请模式 可以在创建高级群的时候设置,或者编辑群资料时修改设置。以下为SDK设置和修改方法。Server设置和修改方法,具体请点此查看。
[注意] 「加入验证模式」只对「主动申请加入群组」有效,「邀请用户加入群组」不受此属性影响。
-
Windows (C)
-
Android
-
iOS
-
Web
-
- 调用
nim_team_create_team_async
创建群组时,传入的team_info
为群组信息Json Keys,其中:- 通过
kNIMTeamInfoKeyJoinMode = "join_mode"
指定主动申请加入群组时的验证模式NIMTeamJoinMode
,默认为kNIMTeamJoinModeNoAuth = 0
不需要验证 - 通过
kNIMTeamInfoKeyInviteMode = "invite_mode"
指定邀请模式NIMTeamInviteMode
(谁可以邀请他人入群),默认为kNIMTeamInviteModeManager = 0
管理员 - 通过
kNIMTeamInfoKeyBeInviteMode = "be_invite_mode"
指定被邀请模式NIMTeamBeInviteMode
,默认为kNIMTeamBeInviteModeNeedAgree = 0
需要同意
- 通过
- 调用
nim_team_update_team_info_async
编辑群组资料时,传入的json_info
为群组信息Json Keys,可以修改相应设置。
- 调用
-
- 调用
NIMClient.getService(TeamService.class).createTeam(Map<TeamFieldEnum, Serializable> fields, TeamTypeEnum type, String postscript, List<String> members)
创建群组时,指定TeamFieldEnum
的:VerifyTypeEnum
主动申请加入群组时的验证模式 (Free不需要验证,Apply需要验证,Private不允许加入)InviteMode
邀请模式 (谁可以邀请他人入群,Manager仅管理员,All所有人)BeInviteMode
被邀请模式 (NeedAuth需要同意,NoAuth不需要同意)
- 调用
NIMClient.getService(TeamService.class).updateTeam(teamId, TeamFieldEnum field, value)
编辑群组资料时,可以修改相应设置。
- 调用
-
- 调用
-createTeam:users:completion:
创建群组时,通过NIMCreateTeamOption
指定:joinMode
主动申请加入群组时的验证模式NIMTeamJoinMode
(NIMTeamJoinModeNoAuth = 0
默认不需要验证,NIMTeamJoinModeNeedAuth = 1
需要验证,NIMTeamJoinModeRejectAll = 2
不允许任何人加入)inviteMode
邀请模式NIMTeamInviteMode
(谁可以邀请他人入群,NIMTeamInviteModeManager = 0
默认仅管理员/群主,NIMTeamInviteModeAll = 1
所有人)beInviteMode
被邀请模式NIMTeamBeInviteMode
(NIMTeamBeInviteModeNeedAuth = 0
默认需要同意,NIMTeamBeInviteModeNoAuth = 1
不需要同意)
- 通过
-updateTeamJoinMode:teamId:completion:
修改验证模式
通过-updateTeamInviteMode:teamId:completion:
修改邀请模式
通过-updateTeamBeInviteMode:teamId:completion:
修改被邀请模式
- 调用
-
- 通过
nim.createTeam(options)
创建群时,在options
中指定:joinMode
主动申请加入群组时的验证模式 ('needVerify'
默认需要验证,'noVerify'
不需要验证,'rejectAll'
不允许任何人加入)inviteMode
邀请模式 (谁可以邀请他人入群,'manager'
默认仅管理员/群主,'all'
所有人)beInviteMode
被邀请模式 ('needVerify'
默认需要同意,'noVerify'
不需要同意)
- 通过
nim.updateTeam(options)
更新群时,可以修改相应设置。
怎么置空群公告 群公告是String类型,如需置空,应通过相关接口传入空字符串。
- 通过
-
Server
-
Windows (C)
-
Android
-
iOS
-
Web
-
通过接口
https://api.netease.im/nimserver/team/update.action
编辑群资料,设置announcement
参数为空字符串。
[注意] IM Server API只能操作高级群,普通群请通过SDK接口操作。 -
通过接口
nim_team_update_team_info_async
编辑群组资料,传入的json_info
为群组信息Json Keys,其中kNIMTeamInfoKeyAnnouncement = "announcement"
表示群公告,设置为空字符串,例如:values[kNIMTeamInfoKeyAnnouncement] = ""
。 -
- 通过接口
NIMClient.getService(TeamService.class).updateTeam(teamId, TeamFieldEnum.Announcement, announcement)
编辑群组资料更新群公告:String announcement = ""
。 - 或者通过接口
NIMClient.getService(TeamService.class).updateTeamFields(teamId, fieldsMap)
批量更新群组资料,设置TeamFieldEnum.Announcement
为空字符串:fieldsMap.put(TeamFieldEnum.Announcement, "")
。
- 通过接口
-
通过接口
-updateTeamAnnouncement:teamId:completion:
更新群公告时,announcement
参数传入空字符串。 -
通过接口
nim.updateTeam(options)
更新群时,在options
中设置announcement
字段为空字符串:nim.updateTeam({..., announcement: '', ...})
。
怎么设置群组的扩展字段
[注意1] 对于群组的服务端扩展字段,只有高级群才有服务端扩展字段,而且只能通过服务端API设置,客户端只能读取。
[注意2] 群组的客户端扩展字段可以同步到其它端。
[注意3] 客户端设置的群组扩展字段,服务端无法修改。
以下为设置群组扩展字段的方法。获取群组扩展字段的方法,请点此查看。
-
Server
-
Windows (C)
-
Android
-
iOS
-
Web
-
调用以下接口时,传入
custom
字段设置高级群的服务端扩展字段。- 创建高级群:
https://api.netease.im/nimserver/team/create.action
- 编辑高级群资料:
https://api.netease.im/nimserver/team/update.action
- 创建高级群:
-
调用以下接口时,通过群组信息Json Keys中,
kNIMTeamInfoKeyCustom = "custom"
字段设置群组的客户端扩展字段。- 创建群组:
nim_team_create_team_async
- 编辑群组资料:
nim_team_update_team_info_async
- 创建群组:
-
调用以下接口时,通过
TeamFieldEnum
中,Extension
字段设置群组的客户端扩展字段。- 创建群组:
NIMClient.getService(TeamService.class).createTeam(Map<TeamFieldEnum, Serializable> fields, TeamTypeEnum type, String postscript, List<String> members);
- 更新群组客户端扩展:
NIMClient.getService(TeamService.class).updateTeam(teamId, TeamFieldEnum.Extension, extension)
- 批量更新群组资料:
NIMClient.getService(TeamService.class).updateTeamFields(teamId, fieldsMap)
- 创建群组:
-
- 调用
–createTeam:users:completion:
创建群组时,通过NIMCreateTeamOption
中clientCustomInfo
字段设置群组的客户端扩展字段。 - 调用
–updateTeamCustomInfo:teamId:completion:
更新群组的客户端扩展字段。
- 调用
-
调用nim.createTeam({..., custom: 'custom', ...})创建群,或者调用
nim.updateTeam({..., custom: 'custom', ...})
更新群时,通过custom
字段设置群组的客户端扩展字段。
怎么获取群组的扩展字段 以下为获取群组扩展字段的方法。设置群组扩展字段的方法,请点此查看。
-
Server
-
Windows (C)
-
Android
-
iOS
-
Web
-
调用高级群信息与成员列表查询接口
https://api.netease.im/nimserver/team/query.action
时,custom
字段表示高级群的服务端扩展字段,clientCustom
字段表示高级群的客户端扩展字段。 -
调用以下接口时,群组信息Json Keys中,
kNIMTeamInfoKeyServerCustom = "server_custom"
表示高级群的服务端扩展字段,kNIMTeamInfoKeyCustom = "custom"
表示群组的客户端扩展字段。- 本地获取群组信息:
nim_team_query_all_my_teams_info_async
- 从服务器上获取群组信息:
nim_team_query_team_info_online_async
- 本地获取群组信息:
-
调用以下接口时,
TeamFieldEnum
中,Ext_Server
表示高级群的服务端扩展字段,Extension
表示群组的客户端扩展字段。- 获取自己加入的所有群组(异步版本):
NIMClient.getService(TeamService.class).queryTeamList()
- 获取自己加入的所有群组(同步版本):
NIMClient.getService(TeamService.class).queryTeamListBlock()
- 根据类型获取自己加入的所有群组(异步版本):
NIMClient.getService(TeamService.class).queryTeamListByType(TeamTypeEnum type)
- 根据类型获取自己加入的所有群组(同步版本):
NIMClient.getService(TeamService.class).queryTeamListByTypeBlock(TeamTypeEnum type)
- 从本地数据库中查询群资料(异步版本):
NIMClient.getService(TeamService.class).queryTeam(teamId)
- 从本地数据库中查询群资料(同步版本):
NIMClient.getService(TeamService.class).queryTeamBlock(teamId)
- 从服务器上查询群资料:
NIMClient.getService(TeamService.class).searchTeam(teamId)
- 获取自己加入的所有群组(异步版本):
-
调用以下接口时,
NIMTeam
对象的serverCustomInfo
属性表示高级群服务端扩展字段,clientCustomInfo
属性表示群组的客户端扩展字段。- 本地获取所有群组:
–allMyTeams
- 本地根据群Id获取群组:
-teamById:
- 从服务器获取群组:
–fetchTeamInfo:completion:
- 本地获取所有群组:
-
调用以下接口时,回调函数中
Team
对象的serverCustom
属性表示高级群的服务器扩展字段,custom
属性表示群的客户端扩展字段。- 获取群资料:
nim.getTeam({teamId: aTeamId, done: getTeamDone})
- 获取群列表:
nim.getTeams({done: getTeamsDone})
[注意] getTeam接口,不论用户是否在群里,都可以从云端获取到最新的资料。
怎么设置和获取群成员的扩展字段
- 获取群资料:
-
Server
-
Windows (C)
-
Android
-
iOS
-
Web
-
- 设置群成员的扩展字段
通过https://api.netease.im/nimserver/team/updateTeamNick.action
修改群昵称时,custom
表示群成员的扩展字段。 - 获取群成员的扩展字段
通过https://api.netease.im/nimserver/team/queryDetail.action
查询返回的信息,携带custom
群成员扩展字段。
- 设置群成员的扩展字段
-
- 设置群成员的扩展字段
调用nim_team_update_my_property_async
更新自己的群属性,其中参数info
表示群组成员信息的json string,包含群组tid
和kNIMTeamUserKeyCustom = "custom"
群成员的扩展字段。 - 获取群成员的扩展字段
调用以下接口时,回调函数中result
包含群成员信息json string。nim_team_query_team_members_async
查询群成员(配置include_user_info
为true
时)nim_team_query_team_member_async
查询单个群成员信息
- 设置群成员的扩展字段
-
- 设置群成员的扩展字段
调用NIMClient.getService(TeamService.class).updateMyMemberExtension(String teamId, Map<String, Object> extension)
修改自己的群成员扩展字段。 - 获取群成员的扩展字段
调用以下接口时,通过TeamMember
的getExtension()
方法获取群成员的扩展字段。NIMClient.getService(TeamService.class).queryMemberList(teamId).setCallback(...)
获取群组所有成员NIMClient.getService(TeamService.class).queryTeamMember(teamId, account).setCallback(...)
异步查询查询群成员资料NIMClient.getService(TeamService.class).queryTeamMemberBlock(teamId, account)
同步查询群成员资料
- 设置群成员的扩展字段
-
- 设置群成员的扩展字段
调用-updateMyCustomInfo:inTeam:completion:
更新自己的群成员扩展字段。 - 获取群成员的扩展字段
调用–fetchTeamMembers:completion:
获取群成员时,通过回调的NIMTeamMember
对象的customInfo
属性获取群成员扩展字段。
- 设置群成员的扩展字段
-
-
设置群成员的扩展字段
通过nim.updateInfoInTeam({teamId: theTeamId, custom: '{json}', ...});
修改自己的群成员扩展字段。 -
获取群成员的扩展字段
通过nim.getTeamMembers({teamId: theTeamId, done: getTeamMembersDone})
获取群成员时,回调的TeamMember
对象的custom
属性获取群成员的扩展字段。IM服务端API怎么设置高级群的加入验证模式、邀请模式、被邀请模式 [注意1] IM客户端SDK也可以设置和修改,具体请点此查看。
[注意2]joinmode
只对「主动申请加入群组」有效,「邀请用户加入群组」不受此属性影响。
以下为IM Server API的设置和修改方法。
-
-
调用
https://api.netease.im/nimserver/team/create.action
创建高级群时:- 通过参数
joinmode
指定主动申请加入群组时的验证模式 (0不需要验证,1需要验证,2不允许任何人加入) - 通过参数
invitemode
指定邀请模式 (谁可以邀请他人入群,0默认为管理员,1所有人) - 通过参数
beinvitemode
指定被邀请模式 (0默认需要同意,1不需要同意)
- 通过参数
-
调用
https://api.netease.im/nimserver/team/update.action
编辑群资料时,可以修改相应设置。
关于IM服务端API 群组功能(高级群) 部分接口的说明
-
调用IM服务端API群组功能(高级群)相关接口返回
{"desc": "no support", "code":403}
可能原因:
- IM服务端API [群组功能(高级群)] 相关接口只适用于高级群,不适用于普通群/讨论组。如果需要操作普通群/讨论组,请通过客户端SDK接口进行。
- 该Appkey下是否有这个群组。
-
通过IM服务端API创建群并邀请了群成员,但是查询群成员列表只有群主自己
通过IM服务端API
https://api.netease.im/nimserver/team/create.action
创建群时,参数magree
表示是否需要邀请人同意。如果配置为1
表示需要被邀请人同意才可以加入群。因此,只有当被邀请人同意之后才会出现在群成员列表中。 -
关于IM服务端API [获取群组详细信息] 返回的部分参数的说明
IM服务端API
https://api.netease.im/nimserver/team/queryDetail.action
获取群组详细信息,返回的下列参数:createtime
:表示该成员加入该群的时间updatetime
:表示该成员相关属性最近一次发生变化的时间,例如:群成员昵称、群成员类型变化等。members
: 表示除创建者(owner
)和管理员(admins
)之外的其余群成员列表,是无序的(没有特定的排序规则)。
为什么主动退群、被踢、解散群之后无法删除相应群组会话? IM SDK在主动退群、被踢、解散群之后,会收到一条相应类型的群组通知,相关会话信息仍会保留,只是此后不再接收关于此群的消息。
如果在收到相应的群组通知之前将会话删除,则收到群组通知后,SDK会重建对应会话。因此,若需彻底删除群组会话,正确时机是收到相应类型的群组通知之后。
[注意] 删除会话,请参考:怎么删除最近会话。
[注意] 删除会话并不会自动删除会话对应的历史消息,如需删除历史消息,请参考:IM怎么删除消息、IM怎么清空消息。
下列内容为处理相关群组通知的介绍。 -
Windows (C)
-
Android
-
iOS
-
Web
-
通过
nim_team_reg_team_event_cb
注册全局回调函数nim_team_event_cb_func
来接收群组通知,回调的notification_id
(通知类型)由nim_msglog_def.h
中的NIMNotificationId
枚举定义。 -
Android群组通知是消息类型为
notification
的IMMessage
,带有一个消息附件,通知类型由NotificationType
枚举定义。- 通过
IMMessage
的getMsgType()
方法获取消息类型; - 通过
IMMessage
的getAttachment()
方法得到消息附件对象,将其强转为NotificationAttachment
,再通过其getType()
方法获取通知类型。 - 通过
IMMessage
的getFromAccount()
方法获取操作者; - 通过
IMMessage
的getSessionId()
方法获取群id。
另外,具体的通知类型和附件类型为:
- 主动退群的通知类型为:
LeaveTeam
- 被踢的通知类型为:
KickMember
,附件类型为:MemberChangeAttachment
(通过IMMessage
的getAttachment()
方法强转为MemberChangeAttachment
,再通过其getTargets()
方法得到被踢成员的List
。) - 解散群的通知类型为:
DismissTeam
- 通过
-
iOS群组通知类型可以通过
NIMTeamNotificationContent
的operationType
解析(通知类型由NIMTeamOperationType
枚举定义)。
群组通知的解析步骤,请查阅开发指南,文档路径:文档首页 > IM > SDK开发集成 > iOS开发集成 > 群组功能 > 群组通知。 -
群通知消息是消息类型的一种,群通知消息对应的消息对象的
attach
字段中,type
字段表示群通知消息的类型。
群通知消息的解析步骤,请查阅开发指南,文档路径:文档首页 > IM > SDK开发集成 > Web开发集成 > 消息收发 > 群通知消息。- 主动退群后,会收到一条类型为
'leaveTeam'
的群通知消息。其中from
字段表示退群者的帐号,to
字段表示群ID,attach
中team
表示对应的群对象。 - 被踢后,会收到一条类型为
'removeTeamMembers'
的群通知消息。其中from
字段表示踢人者的帐号,to
字段表示群ID,attach
中team
表示对应的群对象,accounts
表示被踢者的帐号列表。 - 解散群后,会收到一条类型为
'dismissTeam'
的群通知消息。其中from
字段表示解散者的帐号,to
字段表示群ID。
关于群组禁言 [注意1] 群组相关禁言分为:账号全局禁言、群整体禁言、单个群成员禁言。三种禁言方式相互独立。例如,某账号加入某高级群后,先后被全局禁言、群整体禁言、单个群成员禁言,那么需要分别解除三种禁言后才能恢复在该群发言。
[注意2] 即使群成员被禁言,仍然可以调用服务端API通过该成员账号发送群消息。 - 主动退群后,会收到一条类型为
-
Server
-
Windows
-
Android
-
iOS
-
Web
-
- 调用「账号全局禁言」接口
https://api.netease.im/nimserver/user/mute.action
设置或取消账号的全局禁言状态。
账号被设置为全局禁言后,不能发送任何消息(包含点对点、群、聊天室消息)。 - 调用「将群组整体禁言」接口
https://api.netease.im/nimserver/team/muteTlistAll.action
设置或解除群组禁言。
参数mute
和muteType
至少提供一个,都提供时以mute
为准。如果mute
设置为true
,只禁言普通成员。
[注意] 如果muteType
传入3
,表示禁言整个群(包括群主)。这种情况下如果SDK/客户端再尝试调用禁言接口,会返回802。 - 调用「禁言群成员」接口
https://api.netease.im/nimserver/team/muteTlist.action
禁言或解禁群成员。
需要传入高级群群主的accid,可以禁言管理员和普通成员。
- 调用「账号全局禁言」接口
-
- C: 调用
nim_team_mute_async
对群整体禁言/解禁,调用nim_team_mute_member_async
对群成员禁言/解禁。 - C++: 调用
nim::Team::MuteAsync
对群整体禁言/解禁,调用nim::Team::MuteMemberAsync
对群成员禁言/解禁。 - C#: 调用
NIM.Team.TeamAPI.MuteTeam
对群整体禁言/解禁,调用NIM.Team.TeamAPI.SetMemberMuted
对群成员禁言/解禁。
- C: 调用
-
- 调用
NIMClient.getService(TeamService.class).muteAllTeamMember(teamId, true/false))
对群整体禁言/解禁。群主和管理员有权操作。 - 调用
NIMClient.getService(TeamService.class).muteTeamMember(teamId, accid, true/false).setCallback(new RequestCallback<Void>() {...}
对群成员禁言。群主和管理员可以对普通成员禁言/解禁。
- 调用
-
- 调用
–updateMuteState:inTeam:completion:
禁言或解禁全体普通成员。仅高级群群主有权操作。 - 调用
–updateMuteState:userId:inTeam:completion:
禁言或解禁单个群成员。高级群群主和管理员有权操作,并且群主可以禁言管理员。
- 调用
-
- 调用
nim.muteTeamAll({teamId: 'teamId', type: 'type', done: muteTeamAllDone})
对群整体禁言/解禁。参数type
传入normal
表示对普通群成员禁言,传入none
表示解禁。仅群主有权操作。 - 调用
nim.updateMuteStateInTeam({teamId: 'teamId', account: 'accid', mute: true/false, done: updateMuteStateInTeamDone})
对单个群成员禁言(mute:true)/解禁(mute:false)。
- 调用
关于群消息提醒类型 群消息提醒类型分为:该群全部消息都提醒、该群全部消息不提醒、该群仅管理员消息提醒(普通群不支持设置仅管理员消息提醒)。
[注意] 即使设置为不提醒,仍然不影响消息接收以及未读数变化。
-
Windows
-
Android
-
iOS
-
Web
-
- 设置:关键参数为
nim_team_def.h
中定义的kNIMTeamUserKeyBits
和NIMTeamBitsConfigMask
。
kNIMTeamUserKeyBits
为0
表示全部提醒,为1
表示全部不提醒,为2
表示仅管理员消息提醒。
也可以通过NIMTeamBitsConfigMask
中的枚举kNIMTeamBitsConfigMaskMuteNotify
或kNIMTeamBitsConfigMaskOnlyAdmin
进行位操作得出上述值。- C:
nim_team_update_my_property_async
,参数info
中传入kNIMTeamUserKeyBits("bits", init)
字段表示群成员信息。 - C++:
nim::Team::UpdateMyPropertyAsync
,参数TeamMemberProperty & prop
表示群成员属性,通过其SetBits
方法设置群消息提醒类型。 - C#:
NIM.Team.TeamAPI.UpdateMyTeamProperty
,参数NIMTeamMemberInfo info
表示群成员信息。
[注意] C#仅支持全部提醒和全部不提醒两种类型。
- C:
- 查询:通过群组成员接口,「获取群成员列表」或者「查询单个群成员信息」,返回的群成员信息中,包含设置的群消息提醒类型。
- 设置:关键参数为
-
- 设置:
NIMClient.getService(TeamService.class).muteTeam(teamId, type).setCallback(...)
,参数type
表示群消息提醒类型(All
表示全部提醒,Mute
表示全部不提醒,Manager
表示仅管理员消息提醒)。 - 查询:
Team
对象的getMessageNotifyType()
方法。
- 设置:
-
- 设置:通过
NIMTeamManager
的–updateNotifyState:inTeam:completion:
方法设置群消息通知设置,参数(NIMTeamNotifyState)state
表示群消息提醒类型(NIMTeamNotifyStateAll
表示全部提醒,NIMTeamNotifyStateNone
表示全部不提醒,NIMTeamNotifyStateOnlyManager
表示仅管理员消息提醒)。 - 查询:
NIMTeamManager
的–notifyStateForNewMsg:
方法。
- 设置:通过
-
- 设置:通过
nim.updateInfoInTeam
接口修改自己的群属性时,传入参数muteNotiType
表示群消息提醒类型(0
表示全部提醒,1
表示全部不提醒,2表示仅管理员消息提醒)。 - 查询:通过
nim.getTeamMembers({teamId: XXX, done: XXX})
获取所有群成员,或者通过nim.getTeamMemberByTeamIdAndAccount({teamId: XXX, account: XXX, done: XXX})
获取特定群成员,群成员对象的muteNotiType
属性即为群消息提醒类型。
根据群ID和用户accid查询单个群成员信息
- 设置:通过
-
Windows
-
Android
-
iOS
-
Web
-
- C: nim_team.h中:
nim_team_query_team_member_async
- C++:
nim::Team::QueryTeamMemberAsync
- C#:
NIM.Team.TeamAPI.QuerySingleMemberInfo
- C: nim_team.h中:
-
异步版本(如果本地群成员资料已过期会去服务器获取最新的):
NIMClient.getService(TeamService.class).queryTeamMember(teamId, accid).setCallback(...)
同步版本(仅查询本地群资料):TeamMember member = NIMClient.getService(TeamService.class).queryTeamMemberBlock(teamId, accid)
-
NIMTeamManager
的–teamMember:inTeam:
方法。 -
nim.getTeamMemberByTeamIdAndAccount({teamId: 123, account: 'accid', done: getTeamMemberDone})
关于设置群组免打扰返回 403
现象:给所在的群组设置免打扰(muteTeam),一部分群组成功返回 200,一部分群组失败返回 403。
原因:使用了更新群成员信息第三方回调功能,业务服务器给云信服务器返回拒绝,云信服务器会返回 403 给 SDK。