Last updated:
0 purchases
mmoo easemob im
flutter packages pub publish --server=https://pub.dartlang.org
环信im flutter sdk #
文章主要讲解环信im flutter sdk如何使用。
环信官网
环信iOS集成文档
环信Android集成文档
源码地址: Github
任何问题可以通过 Github Issues 提问
Demo中使用的音视频是针对声网音视频封装的EaseCallKit,如果问题,可以通过 EaseCallKit Issues 提问
常见问题
QQ群: 535134817
前期准备 #
如果您还没有Appkey,可以前往环信官网注册即时通讯云。
进入console -> 添加应用 -> Appkey 获取Appkey。
通过git集成
修改 pubspec.yaml;
dependencies:
im_flutter_sdk:
git:
url: https://github.com/easemob/im_flutter_sdk.git
ref: stable
copied to clipboard
执行flutter pub get;
导入头文件:
import 'package:mmoo_easemob_im/im_flutter_sdk.dart'
copied to clipboard
本地集成
先将SDK clone 或者 download 到本地项目中;
修改 pubspec.yaml;
dependencies:
im_flutter_sdk:
path : /本地路径/im_flutter_sdk
copied to clipboard
执行flutter pub get;
导入头文件:
import 'package:mmoo_easemob_im/im_flutter_sdk.dart'
copied to clipboard
SDK讲解 #
EMClient 用于管理sdk各个模块和一些账号相关的操作,如注册,登录,退出;
EMChatManager用于管理聊天相关操作,如发送消息,接收消息,发送已读回执,获取会话列表等;
EMContactManager 用于管理通讯录相关操作,如获取通讯录列表,添加好友,删除好友等;
EMGroupManager用于群组相关操作,如获取群组列表,加入群组,离开群组等;
EMChatRoomManager用于管理聊天室,如获取聊天室列表;
EMPushManager用于管理推送配置,如设置推送昵称,推送免打扰时间段等;
EMUserInfoManager用于更新自己的用户属性,设置用户属性,获取其他用户的用户属性等;
SDK依赖环信Lite SDK,不支持音视频。
EMClient #
初始化
EMOptions options = EMOptions(appKey: 'easemob-demo#chatdemoui');
EMPushConfig config = EMPushConfig();
// 配置推送信息
config
..enableAPNs("chatdemoui_dev")
..enableHWPush()
..enableFCM('')
..enableMeiZuPush('', '')
..enableMiPush('', '');
options.pushConfig = config;
await EMClient.getInstance.init(options);
copied to clipboard
环信的推送只针对离线设备,如果您的app只是后台且没有被系统挂起,此时客户端的长连接仍然还在,这时消息仍然会直接走收消息的方法,并不会触发推送,这就要求您在收消息时判断App的状态,并实现本地推送。
推送证书申请上传,安卓端请参考文档第三方推送集成,iOS请参考文档APNs推送。
注册
try {
await EMClient.getInstance.createAccount(username, password);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
客户端注册需要将注册方式设置为开放注册,具体说明请参考文档用户管理。
登录
try {
await EMClient.getInstance.login(username, password);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取当前登录环信id
EMClient.getInstance.currentUsername;
copied to clipboard
退出
try {
// true: 是否解除deviceToken绑定。
await EMClient.getInstance.logout(true);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
退出也有失败的情况,需要确定是否失败。
注册环信id详细说明请参考文档用户体系集成。
监听服务器连接状态
class _MyAppState extends State<MyApp> implements EMConnectionListener{
@override
void initState() {
super.initState();
// 添加连接监听
EMClient.getInstance.addConnectionListener(this);
}
...
@override
void onConnected() {
// 网络已连接
}
@override
void onDisconnected(int errorCode) {
// 连接失败,原因是[errorCode]
}
...
@override
void dispose() {
// 移除连接监听
EMClient.getInstance.removeConnectionListener(this);
super.dispose();
}
}
copied to clipboard
获取当前连接状态
EMClient.getInstance.connected;
copied to clipboard
获取flutter sdk版本号
EMClient.getInstance.flutterSDKVersion;
copied to clipboard
EMChatManager #
获取会话列表
try {
List<EMConversation> conList = await EMClient.getInstance.chatManager.loadAllConversations();
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
会话列表是存在本地的一种消息管理对象,如果您会话中没有消息,则表示会话不存在。
创建会话
try {
// emId: 会话对应环信id, 如果是群组或者聊天室,则为群组id或者聊天室id
EMConversation conv = await EMClient.getInstance.chatManager.getConversation(emId);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取会话中的消息
try {
List<EMMessage> msgs = con.loadMessages();
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取会话中未读消息数
con.unreadCount;
copied to clipboard
设置单条消息为已读
try {
con.markMessageAsRead(msg.msgId);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置所有消息为已读
try {
con.markAllMessagesAsRead();
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
发送消息已读状态
try {
await EMClient.getInstance.chatManager.sendMessageReadAck(msg);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
删除会话中的消息
try{
// 删除会话中所有消息
await conv.deleteAllMessages();
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
插入消息
try{
// 向会话中插入一条消息
await conv.insertMessage(msg);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
SDK在您发送和接收消息(cmd类型消息除外)后会自动将消息插入数据库中,并不需要您自己将消息插入数据库,但如果您需要自己插入一条消息时可以调用该api。
更新消息
try{
await conv.updateMessage(msg);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
try{
// 删除会话中某一条消息
await conv.deleteMessage(msg.msgId);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
删除会话
try {
await EMClient.getInstance.chatManager.deleteConversation(conversation.id);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
构建要发送的消息
// 文本消息
EMMessage msg = EMMessage.createTxtSendMessage(username: '接收方id', content: '消息内容');
// 图片消息
EMMessage msg = EMMessage.createImageSendMessage(username: '接收方id', filePath: '图片路径');
// 视频消息
EMMessage msg = EMMessage.createVideoSendMessage(username: '接收方id', filePath: '视频路径');
// 音频消息
EMMessage msg = EMMessage.createVoiceSendMessage(username: '接收方id', filePath: '语音路径');
// 位置消息
EMMessage msg = EMMessage.createLocationSendMessage(username: '接收方id', latitude: '纬度', longitude: '经度', address: '地址名称');
// cmd消息
EMMessage msg = EMMessage.createCmdSendMessage(username: '接收方id', action: '自定义事件');
// 自定义消息
EMMessage msg = EMMessage.createCustomSendMessage(username: '接收方id', event: '自定义事件');
copied to clipboard
如果您是要构建群组或者聊天室消息,需要修改消息的chatType属性, 如:
msg.chatType = EMMessageChatType.GroupChat;
发送消息
try{
await EMClient.getInstance.chatManager.sendMessage(msg);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
监听消息发送状态
class ChatItemState extends State<ChatItem> implements EMMessageStatusListener {
EMMessage msg;
...
void initState() {
super.initState();
// 添加监听
msg.setMessageListener(this);
}
...
// 消息进度
@override
void onProgress(int progress) {
}
// 消息发送失败
@override
void onError(EMError error) {
}
// 消息发送成功
@override
void onSuccess() {
}
// 消息已读
@override
void onReadAck() {
}
// 消息已送达
@override
void onDeliveryAck() {
}
// 消息状态发生改变
@override
void onStatusChanged() {
}
dispose(){
msg.setMessageListener(null);
super.dispose();
}
}
copied to clipboard
重发消息
try{
await EMClient.getInstance.chatManager.resendMessage(message);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
撤回消息
try{
await EMClient.getInstance.chatManager.recallMessage(msg.msgId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
消息撤回为增值服务,您只能撤回2分钟内的消息,如需开通,请咨询商务。
收消息监听
class _ChatPageState extends State<ChatPage> implements EMChatManagerListener {
@override
void initState() {
super.initState();
// 添加收消息监听
EMClient.getInstance.chatManager.addListener(this);
}
// 收到cmd消息回调
@override
onCmdMessagesReceived(List<EMMessage> messages) {
}
// 会话列表数量变更
@override
onConversationsUpdate() {
}
// 消息已送达回调
@override
onMessagesDelivered(List<EMMessage> messages) {
}
// 消息已读回调
@override
onMessagesRead(List<EMMessage> messages) {
}
// 消息被撤回回调
@override
onMessagesRecalled(List<EMMessage> messages) {
}
// 收消息回调
@override
onMessagesReceived(List<EMMessage> messages) {
}
@override
void dispose() {
// 移除收消息监听
EMClient.getInstance.chatManager.removeListener(this);
super.dispose();
}
}
copied to clipboard
EMContactManager #
从服务器获取通讯录中的用户列表
try{
List<EMContact> contactsList = await EMClient.getInstance.contactManager.getAllContactsFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
环信收发消息并不需要对方是您通讯录中的成员,只要知道对方的环信id就可以发送消息。
发送添加申请
try{
await EMClient.getInstance.contactManager.addContact(friendEmId, '您好,我想添加您为好友');
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
添加申请不会发推送,如果用户不在线,等上线后会收到。
删除通讯录中的成员
try{
await EMClient.getInstance.contactManager.deleteContact(friendEmId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
从服务器获取黑名单
try{
List<EMContact> blockList = await EMClient.getInstance.contactManager.getBlockListFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
添加用户到黑名单中
try{
await EMClient.getInstance.contactManager.addUserToBlockList(emId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
黑名单和通讯录是独立的,被添加人不需要在您的通讯录中,如果是通讯录中成员被加入到黑名单后,他仍然会出现在您的通讯录名单中,同时他也会出现在您的黑名单中。被添加到黑名单后,您双方均无法收发对方的消息。
将用户从黑名单中删除
try{
await EMClient.getInstance.contactManager.removeUserFromBlockList(emId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
通讯录监听
class _ContactPageState extends State<ContactPage> implements EMContactEventListener {
@override
void initState() {
super.initState();
// 添加通讯录监听
EMClient.getInstance.contactManager.addContactListener(this);
}
// [userName]添加您为好友
@override
onContactAdded(String userName) {
}
// [userName]将您从好友中删除
@override
onContactDeleted(String userName) {
}
// 收到[userName]的好友申请,原因是[reason]
@override
onContactInvited(String userName, String reason) {
}
// 发出的好友申请被[userName]同意
@override
onFriendRequestAccepted(String userName) {
}
// 发出的好友申请被[userName]拒绝
@override
onFriendRequestDeclined(String userName) {
}
@override
void dispose() {
// 移除通讯录监听
EMClient.getInstance.contactManager.removeContactListener(this);
super.dispose();
}
}
copied to clipboard
同意添加申请
try{
await EMClient.getInstance.contactManager.acceptInvitation(emId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
拒绝添加申请
try{
await EMClient.getInstance.contactManager.declineInvitation(emId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
EMGroupManager #
从服务器获取已加入群组列表
try{
List<EMGroup> groupsList = await EMClient.getInstance.groupManager.getJoinedGroupsFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
从缓存中获取已加入群组列表
try{
List<EMGroup> groupsList = await EMClient.getInstance.groupManager.getJoinedGroups();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
从服务器获取公开群组列表
try{
List<EMGroup> groupsList = await EMClient.getInstance.groupManager.getPublicGroupsFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建群组
try{
EMGroup group = await EMClient.getInstance.groupManager.createGroup('群组名称', settings: EMGroupOptions());
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
EMGroupOptions可以对群类型EMGroupStyle等参数进行设置,群组有四种,分别是:
PrivateOnlyOwnerInvite私有群,只有群主和管理员能邀请他人进群,被邀请人会收到邀请信息,同意后可入群;
PrivateMemberCanInvite私有群,所有人都可以邀请他人进群,被邀请人会收到邀请信息,同意后可入群;
PublicJoinNeedApproval公开群,可以通过获取公开群列表api取的,申请加入时需要群主或管理员同意;
PublicOpenJoin公开群,可以通过获取公开群列表api取,可以直接进入;
获取群组详情
try{
EMGroup group = await EMClient.getInstance.groupManager.getGroupSpecificationFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取群成员列表
try{
EMCursorResult result = await EMClient.getInstance.groupManager.getGroupMemberListFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
加入公开群组
try{
await EMClient.getInstance.groupManager.joinPublicGroup(groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
需要群组类型是PublicOpenJoin ,调用后直接加入群组。
申请加入公开群
try{
await EMClient.getInstance.groupManager.requestToJoinPublicGroup(groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
需要群组类型是PublicJoinNeedApproval,申请后,群主和管理员会收到加群邀请,同意后入群。
邀请用户入群
try{
await EMClient.getInstance.groupManager.addMembers(groupId, inviteMembers);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
需要群组类型是PrivateOnlyOwnerInvite或PrivateMemberCanInvite,
PrivateOnlyOwnerInvite时,群主和管理员可以调用;
PrivateMemberCanInvite 是,群中任何人都可以调用;
被邀请方会收到邀请通知,同意后进群。邀请通知并不会以推送的形式发出,如果用户不在线,等上线后会收到,用户同意后入群。
从群组中移除用户
try{
await EMClient.getInstance.groupManager.removeMembers(groupId, members);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主和管理员可以调用。
添加管理员
try{
await EMClient.getInstance.groupManager.addAdmin(groupId, memberId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主可以调用。被操作人会收到被添加为管理员回调,该回调无推送,如用户不在线,上线后会收到。
移除管理员
try{
await EMClient.getInstance.groupManager.removeAdmin(groupId, memberId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主可以调用。被操作人会收到被移除管理员回调,该回调无推送,如用户不在线,上线后会收到。
退出群组
try{
await EMClient.getInstance.groupManager.leaveGroup(groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
解散群组
try{
await EMClient.getInstance.groupManager.destroyGroup(groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
只有群主可以调用。
转移群组
try{
await EMClient.getInstance.groupManager.changeGroupOwner(groupId, newOwner);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
只有群主可以调用。
获取群组黑名单列表
try{
List blockList = await EMClient.getInstance.groupManager.getGroupBlocklistFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
将群成员添加到群黑名单
try{
await EMClient.getInstance.groupManager.blockMembers(group.groupId, blockList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,被操作用户当前必须是群成员,当用户被加入到群黑名单后,该用户将从群成员中移除并加入到当前群的黑名单中。同时该用户将无法再进入该群。
将用户从黑名单移除
try{
await EMClient.getInstance.groupManager.unblockMembers(group.groupId, unBlockList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,当账号从黑名单中移除后可以再允许申请加群。
获取群禁言列表
try{
List mutesList = await EMClient.getInstance.groupManager.getGroupMuteListFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
对成员禁言
try{
await EMClient.getInstance.groupManager.muteMembers(group.groupId, mutesList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,被禁言的用户仍然可以收到群中的消息,但是无法发出消息, 白名单中的用户即使被加入到禁言列表中也不受影响。
对成员解除禁言
try{
await EMClient.getInstance.groupManager.unMuteMembers(group.groupId, unMutesList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用。
对所有成员禁言
try{
await EMClient.getInstance.groupManager.muteAllMembers(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,对群主,管理员,白名单中的成员无效,且针对所有人的禁言操作与muteMembers、unMuteMembers接口不冲突,该接口的操作并不会导致getGroupMuteListFromServer接口的返回的数据变化。
对所有成员解除禁言
try{
await EMClient.getInstance.groupManager.unMuteAllMembers(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,且针对所有人的解除禁言操作与muteMembers、unMuteMembers接口不冲突,该接口的操作并不会导致getGroupMuteListFromServer接口的返回的数据变化。当调用该方法后,之前在禁言列表中的用户仍在禁言列表中,且仍处于禁言状态。
获取白名单列表
try{
List whiteList = await EMClient.getInstance.groupManager.getGroupWhiteListFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
将用户添加到白名单中
try{
await EMClient.getInstance.groupManager.addWhiteList(group.groupId, whiteList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用,当用户被加入到白名单后,当群组全部禁言或者被添加到禁言列表后仍可以发言。
将用户从白名单中移除
try{
await EMClient.getInstance.groupManager.removeWhiteList(group.groupId, whiteList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
该方法只有群主和管理员可以调用。
判断自己是否在白名单中
try{
bool inWhiteList = await EMClient.getInstance.groupManager.isMemberInWhiteListFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
不接收群消息
try{
await EMClient.getInstance.groupManager.blockGroup(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置后群组中的所有消息都无法收到,用户不在线时也不会有推送告知。
恢复接收群消息
try{
await EMClient.getInstance.groupManager.unblockGroup(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
消息免打扰
try{
await EMClient.getInstance.groupManager.ignoreGroupPush(group.groupId, true);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置后用户在线时可以正常接收群消息,当用户不在线时,该群组有新消息时不会有推送告知。
更新群名称
try{
await EMClient.getInstance.groupManager.changeGroupName(group.groupId, newName);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主或管理员可以调用。
更新群描述
try{
await EMClient.getInstance.groupManager.changeGroupDescription(group.groupId, newDescription);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主或管理员可以调用。
获取群组公告
try{
String announcement = await EMClient.getInstance.groupManager.getGroupAnnouncementFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
更新群公告
try{
await EMClient.getInstance.groupManager.updateGroupAnnouncement(group.groupId, announcement);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主或管理员可以调用。
获取群共享文件列表
try{
List<EMGroupSharedFile> filesList = await EMClient.getInstance.groupManager.getGroupFileListFromServer(group.groupId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
上传群共享文件
try{
await EMClient.getInstance.groupManager.uploadGroupSharedFile(group.groupId, filePath);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
下载群共享文件
try{
await EMClient.getInstance.groupManager.uploadGroupSharedFile(group.groupId, groupSharedFile.fileId, savePath: path);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
删除群共享文件
try{
await EMClient.getInstance.groupManager.removeGroupSharedFile(group.groupId, groupSharedFile.fileId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主,管理员,文件上传者可以调用。
群回调监听
class _GroupPageState extends State<GroupPage> implements EMGroupChangeListener {
@override
void initState() {
super.initState();
// 添加群组监听
EMClient.getInstance.groupManager.addGroupChangeListener(this);
}
...
// id是[groupId], 名称是[groupName]的群邀请被[inviter]拒绝,理由是[reason]
void onInvitationReceived(String groupId, String groupName, String inviter, String reason) {
}
// 收到用户[applicant]申请加入id是[groupId], 名称是[groupName]的群,原因是[reason]
void onRequestToJoinReceived(String groupId, String groupName, String applicant, String reason) {
}
// 入群申请被同意
void onRequestToJoinAccepted(String groupId, String groupName, String accepter) {
}
// 入群申请被拒绝
void onRequestToJoinDeclined(String groupId, String groupName, String decliner, String reason) {
}
// 入群邀请被同意
void onInvitationAccepted(String groupId, String invitee, String reason) {
}
// 入群邀请被拒绝
void onInvitationDeclined(String groupId, String invitee, String reason) {
}
// 被移出群组
void onUserRemoved(String groupId, String groupName) {
}
// 群组解散
void onGroupDestroyed(String groupId, String groupName) {
}
// 自动同意加群
void onAutoAcceptInvitationFromGroup(String groupId, String inviter, String inviteMessage) {
}
// 群禁言列表增加
void onMuteListAdded(String groupId, List mutes, int muteExpire) {
}
// 群禁言列表减少
void onMuteListRemoved(String groupId, List mutes) {
}
// 群管理增加
void onAdminAdded(String groupId, String administrator) {
}
// 群管理被移除
void onAdminRemoved(String groupId, String administrator) {
}
// 群所有者变更
void onOwnerChanged(String groupId, String newOwner, String oldOwner) {
}
// 有用户加入群
void onMemberJoined(String groupId, String member) {
}
// 有用户离开群
void onMemberExited(String groupId, String member) {
}
// 群公告变更
void onAnnouncementChanged(String groupId, String announcement) {
}
// 群共享文件增加
void onSharedFileAdded(String groupId, EMGroupSharedFile sharedFile) {
}
// 群共享文件被删除
void onSharedFileDeleted(String groupId, String fileId) {
}
...
@override
void dispose() {
// 移除群组监听
EMClient.getInstance.groupManager.removeGroupChangeListener(this);
super.dispose();
}
}
copied to clipboard
同意加群申请
try{
await EMClient.getInstance.groupManager.acceptJoinApplication(group.groupId, username);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主和管理员可以调用。
拒绝加群申请
try{
await EMClient.getInstance.groupManager.declineJoinApplication(group.groupId, username);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
群主和管理员可以调用。
同意加群邀请
try{
await EMClient.getInstance.groupManager.declineJoinApplication(group.groupId, inviter);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
拒绝加群邀请
try{
await EMClient.getInstance.groupManager.declineInvitationFromGroup(group.groupId, inviter);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
EMChatRoomManager #
从服务器获取聊天室列表
try{
EMPageResult result = await EMClient.getInstance.roomManager.fetchPublicChatRoomsFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取本地缓存聊天室列表
try{
List<EMChatRoom> list = await EMClient.getInstance.roomManager.getAllChatRooms();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建聊天室
try{
EMChatRoom room = await EMClient.getInstance.roomManager.createChatRoom('聊天室名称');
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
聊天室创建需要单独拥有权限,具体可以参考文档聊天室管理。
加入聊天室
try{
await EMClient.getInstance.roomManager.joinChatRoom(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
离开聊天室
try{
await EMClient.getInstance.roomManager.leaveChatRoom(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
销毁聊天室
try{
await EMClient.getInstance.roomManager.destroyChatRoom(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
聊天室销毁需要单独拥有权限,具体可以参考文档聊天室管理。
转移聊天室
try{
await EMClient.getInstance.roomManager.changeOwner(roomId, newOwner);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
聊天室转移需要单独拥有权限,具体可以参考文档聊天室管理。
获取聊天室详情
try{
await EMClient.getInstance.roomManager.fetchChatRoomInfoFromServer(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取聊天室成员
try{
EMCursorResult result = await EMClient.getInstance.roomManager.fetchChatRoomMembers(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
移除聊天室成员
try{
await EMClient.getInstance.roomManager.removeChatRoomMembers(roomId, membersList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用。
添加管理员
try{
await EMClient.getInstance.roomManager.addChatRoomAdmin(roomId, memberId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者调用,被操作者会收到回调。
移除管理员
try{
await EMClient.getInstance.roomManager.removeChatRoomAdmin(roomId, adminId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者调用,被操作者会收到回调。
获取禁言列表
try{
List<String> mutesList = await EMClient.getInstance.roomManager.fetchChatRoomMuteList(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置禁言
try{
await EMClient.getInstance.roomManager.muteChatRoomMembers(roomId, membersList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或者管理员调用。
解除禁言
try{
await EMClient.getInstance.roomManager.unMuteChatRoomMembers(roomId, membersList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或者管理员调用。
获取黑名单列表
try{
List<String> blockList = await EMClient.getInstance.roomManager.fetchChatRoomBlockList(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
添加黑名单
try{
List<String> blockList = await EMClient.getInstance.roomManager.blockChatRoomMembers(roomId, membersList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用。
移除黑名单
try{
List<String> blockList = await EMClient.getInstance.roomManager.unBlockChatRoomMembers(roomId, membersList);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用。
修改聊天室标题
try{
await EMClient.getInstance.roomManager.changeChatRoomSubject(roomId, subject);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用。
修改聊天室描述
try{
await EMClient.getInstance.roomManager.changeChatRoomDescription(roomId, desc);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用。
获取聊天室公告
try{
String announcement = await EMClient.getInstance.roomManager.fetchChatRoomAnnouncement(roomId);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
修改聊天室公告
try{
await EMClient.getInstance.roomManager.updateChatRoomAnnouncement(roomId, announcement);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
创建者或管理员调用
添加聊天室监听
class _RoomPageState extends State<RoomPage> implements EMChatRoomEventListener {
@override
void initState() {
super.initState();
// 添加聊天室监听
EMClient.getInstance.roomManager.addChatRoomChangeListener(this);
}
/// id是[roomId],名称是[roomName]的聊天室被销毁
void onChatRoomDestroyed(String roomId, String roomName) {
}
/// 有用户[participant]加入id是[roomId]的聊天室
void onMemberJoined(String roomId, String participant) {
}
/// 有用户[participant]离开id是[roomId],名字是[roomName]的聊天室
void onMemberExited(String roomId, String roomName, String participant) {
}
/// 用用户[participant]被id是[roomId],名称[roomName]的聊天室删除,删除原因是[reason]
void onRemovedFromChatRoom(int reason, String roomId, String roomName, String participant) {
}
/// id是[roomId]的聊天室禁言列表[mutes]有增加
void onMuteListAdded(String roomId, List mutes, String expireTime) {
}
/// id是[roomId]的聊天室禁言列表[mutes]有减少
void onMuteListRemoved(String roomId, List mutes) {
}
/// id是[roomId]的聊天室增加id是[admin]管理员
void onAdminAdded(String roomId, String admin) {
}
/// id是[roomId]的聊天室移除id是[admin]管理员
void onAdminRemoved(String roomId, String admin) {
}
/// id是[roomId]的聊天室所有者由[oldOwner]变更为[newOwner]
void onOwnerChanged(String roomId, String newOwner, String oldOwner) {
}
/// id是[roomId]的聊天室公告变为[announcement]
void onAnnouncementChanged(String roomId, String announcement) {
}
@override
void dispose() {
// 移除聊天室监听
EMClient.getInstance.roomManager.removeChatRoomListener(this);
super.dispose();
}
}
copied to clipboard
推送 #
设置推送昵称
try{
String announcement = await EMClient.getInstance.pushManager.updatePushNickname(pushName);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
推送昵称是指当前账号给其他用户发消息,对方不在线,收到推送时显示在推送中的名字,如果没设置,将显示环信id。
从服务器获取推送配置
try{
EMImPushConfig pushManager = await EMClient.getInstance.pushManager.getImPushConfigFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
从本地缓存获取推送配置
try{
EMImPushConfig pushConfig = await EMClient.getInstance.pushManager.getImPushConfig();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置推送显示样式
try{
await pushConfig.setPushStyle(EMImPushStyle.Simple);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
EMImPushStyle是收推送时样式,目前有两种样式:
Simple显示“您有一条新消息”;
Summary显示推送详情;
设置消息免打扰
try{
await pushConfig.setNoDisturb(true, 10, 22);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
10点到22点之间不接收消息推送。如果是全天不想接收推送,可以设置时间为0到24。
关闭消息免打扰
try{
await pushConfig.setNoDisturb(false);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
设置群组免打扰
try{
await pushConfig.setGroupToDisturb(groupId, true);
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取免打扰群组列表
try{
List groupIdsList = await pushConfig.noDisturbGroupsFromServer();
} on EMError catch(e) {
print('操作失败,原因是: $e');
}
copied to clipboard
EMUserInfoManager #
更新自己的用户属性
try {
Map aMap = {'nickName': 'gagaga', 'mail': '[email protected]'};
EMUserInfo updateUserInfo =
await EMClient.getInstance.userInfoManager.updateOwnUserInfo(aMap);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
更新自己的某一个用户属性
try {
EMUserInfoType infoType = EMUserInfoType.EMUserInfoTypeBirth;
String updateValue = '2021.01.01';
EMUserInfo updateUserInfo = await EMClient.getInstance.userInfoManager
.updateOwnUserInfoWithType(infoType, updateValue);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取多用户的用户属性
try {
String userId = EMClient.getInstance.currentUsername;
List<String> userIds =[];
userIds.add(userId);
userIds.add('xxx');
int expireTime = DateTime.fromMillisecondsSinceEpoch(
DateTime.now().millisecondsSinceEpoch - 10000000)
.millisecondsSinceEpoch;
Map userInfoMap = await EMClient.getInstance.userInfoManager
.fetchUserInfoByIdWithExpireTime(userIds, expireTime: expireTime);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
获取多用户指定的用户属性
try {
String userId = EMClient.getInstance.currentUsername;
List<String> userIds =[];
userIds.add(userId);
userIds.add('xxx');
List<EMUserInfoType> types =[];
types.add(EMUserInfoType.EMUserInfoTypeNickName);
types.add(EMUserInfoType.EMUserInfoTypeBirth);
int expireTime = DateTime.fromMillisecondsSinceEpoch(
DateTime.now().millisecondsSinceEpoch - 10000000)
.millisecondsSinceEpoch;
Map userInfoMap = await EMClient.getInstance.userInfoManager
.fetchUserInfoByIdWithType(userIds, types, expireTime: expireTime);
} on EMError catch (e) {
print('操作失败,原因是: $e');
}
copied to clipboard
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.