更新时间: 2021-03-08
# 导入 SDK
在项目的 pubspec.yaml
中写如下依赖
dependencies: flutter: sdk: flutter rongcloud_im_plugin: ^4.0.2+1
已复制
1
2
3
4
5
2
3
4
5
然后在项目路径执行 flutter packages get
来下载 Flutter Plugin
可以在 Flutter 仓库 (opens new window) 或者 Flutter 仓库国内镜像服务 (opens new window) 查看历史版本
# 初始化
- 使用 SDK 功能前,需要
import
下面的头文件
import 'package:rongcloud_im_plugin/rongcloud_im_plugin.dart';
- 请使用开发功能之前从融云开发者后台 (opens new window)注册得到的
Appkey
,通过RCIMClient
的单例,传入initWithAppKey:
方法,初始化 SDK。 - 开发者在使用融云 SDK 所有功能之前,开发者必须先调用此方法初始化 SDK。 在 App 的整个生命周期中,开发者只需要将 SDK 初始化一次。
RongIMClient.init(RongAppKey);
已复制
1
# 连接融云
Token
即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。在您连接融云服务器之前,您需要请求您的 App Server,您的 App Server 通过融云 Server API 获取 Token 并返回给您的客户端,客户端获取到这个 Token 即可连接融云服务器。code
连接状态码,0 代表连接成功。userId
连接成功的用户 id;
注:如果 code == 31004
即过 Token
无效,是因为您在开发者后台设置了 Token
过期时间或者 Token
和初始化的 AppKey
不同环境,您需要请求您的服务器重新获取 Token
并再次用新的 Token
建立连接。
RongIMClient.connect(RongIMToken, (int code, String userId) { print('connect result ' + code.toString()); if (code == 0) { print("connect success userId" + userId); // 连接成功后打开数据库 // _initUserInfoCache(); } else if(code == 31004) { // token 非法,需要重新从 APP 服务获取新 token 并连接 } }
已复制
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 获取会话列表
获取到所有单聊会话,如果需要获取更多会话类型的会话,可以增加数组中的会话类型对象。
onGetConversationList() async { List conversationList = await RongIMClient.getConversationList([RCConversationType.Private,RCConversationType.Group,RCConversationType.System]); for(Conversation con in cons) { print("conversation latestMessageId " + con.latestMessageId.toString()); } }
已复制
1
2
3
4
5
6
7
2
3
4
5
6
7
可以参考此处 conversation_list_page.dart (opens new window)
# 发送消息
onSendMessage() async{ TextMessage txtMessage = new TextMessage(); txtMessage.content = "这条消息来自 Flutter"; Message msg = await RongIMClient.sendMessage(RCConversationType.Private, privateUserId, txtMessage); print("send message start senderUserId = "+msg.senderUserId); }
已复制
1
2
3
4
5
6
2
3
4
5
6
# 接收消息
//消息发送结果回调 RongIMClient.onMessageSend = (int messageId,int status,int code) { print("send message messsageId:"+messageId.toString()+" status:"+status.toString()+" code:"+code.toString()); };
已复制
1
2
3
4
2
3
4
# 获取历史消息
- 从本地数据库中获取历史消息。
messageId
传 -1 即从最新的一条消息开始获取。count
即获取消息的数量。RongIMClient
类中还有其他获取历史消息的接口,可根据自己的需求调用。- 如需从融云的服务器拉取历史消息,需要开通 IM 商用版 - 单群聊云存储 (opens new window) 功能。
onGetHistoryMessages() async { List msgs = await RongIMClient.getHistoryMessage(RCConversationType.Private, privateUserId, 0, 10); print("get history message"); for(Message m in msgs) { print("sentTime = "+m.sentTime.toString()); } }
已复制
1
2
3
4
5
6
7
2
3
4
5
6
7
# 断开连接
- 断开融云连接后不会再收到消息。
- 在下次连接融云成功后,会收取上次离线后的消息,离线消息最多可以保存 7 天。
//needPush 断开连接之后是否需要远程推送 RongIMClient.disconnect(bool needPush)
已复制
1
2
2