最近筹备应用融云的 Flutter SDK,所以顺便记录一下。
融云 Flutter IM SDK 地址:传送门
融云的 Flutter SDK 是基于 融云 IMLib 层做的封装,封装了 IMLib 的局部接口提供给 Flutter 开发者应用。此文章只介绍了 Flutter 层做的一些操作。
目录构造
整体 SDK 的构造规规矩矩,核心内容参考红色箭头即可。
SDK 层蕴含 三个目录:android:此目录蕴含了和原生 SDK 交互的所有 Java 文件
ios:此目录蕴含了和原生 SDK 交互的所有 oc 文件
lib: 此目录为应用 dart 编写的 Flutter SDK 文件
其余目录:doc:次要是融云开发者提供的一些文档相干
example:是融云开发者基于此 SDK 提供的一个简略示例,整体较为简陋,且有轻微 bug,仅供参考
FunctionList.md
是融云开发者提供的一个性能清单,大体如下:
RongCloud IM Flutter SDK 性能清单
连贯
初始化
连贯
断开连接
连贯状态兼容
配置
设置服务器地址(im 服务;文件服务)
会话
获取会话列表,反对全量获取,分页获取
获取单个会话
删除指定会话
音讯
以后仅反对 文本音讯,语音音讯,图片音讯,小视频音讯
收发音讯 (能够携带 pushContent)
自定义音讯
获取批量本地历史音讯
获取单条本地历史音讯
获取批量远端历史音讯
插入音讯
删除批量本地音讯
获取未读数
革除指定会话未读数
免打搅
设置会话免打搅
获取会话免打搅
会话置顶
设置会话置顶
备注:获取会话是能够获取到会话置顶状态
黑名单
退出黑名单
移除黑名单
获取黑名单列表
查看特定用户的黑名单状态
聊天室
退出聊天室
退出聊天室
获取聊天室信息
都是一些接口层的操作。
剩下的文件根本能够疏忽。
解析
咱们开始从 lib
目录开始剖析
这两个文件是外围文件,咱们所有的调用接口都在这里。
rong_im_client.dart
是最新版本的接口类,咱们只关怀这个即可。
rong_im_plugin.dart
是旧版本的接口类,曾经废除。
common_define.dart
是定义了 SDK 内应用的所有枚举和状态码。
method_key.dart
是定义了 Flutter SDK 和原生层进行交互时标识的惟一的常量字符串。
而后就是剩下的三个文件目录:
info
: 其实就是对象 model 类
message:
这个是 Flutter SDK 提供的所有内置的音讯类型,包含聊天室 KV 音讯、合并音讯、文件音讯、GIF 音讯、图片音讯、地位音讯、撤回音讯、援用音讯、图文音讯、视频音讯、文本音讯、语音音讯。
其中有一个比拟非凡的 dart 类就是 message_content.dart
, 这个类是所有音讯的基类。
每个音讯都须要继承此类,并复写外面的办法进行编解码。
util
: 这个目录就是一个工具目录。
message_factory.dart
次要是进行音讯封装,字典转模型,模型转字典,根本原因我猜就是 Flutter 和 原生仅有的交互类型限度。
type_util.dart
: 略
以上就是 SDK 在 Flutter 层做的所有的操作,内容整体不多,而且所有代码都是开源的,看看基本上都理解。
与原生层的交互
整体都是通过 invokeMethod
与原生进行通信的,前面的 key 就是之前说的常量字符串,用来保障唯一性。
而在 iOS
和 Android
都提供了对应的定义。
并通过触发 iOS 和 Android 层对应的办法来进行解决。
原生层
Android:
整体外围的解决都在 RCIMFlutterWrapper.java
这个类解决了 dart 代码传递过去的数据,并与融云 IMLib 的 SDK 进行了解决。
iOS:
同样,iOS 的外围代码也都在 RCIMFlutterWrapper.m
这个类解决。具体内容大家能够本人看一下。
到此整个内容咱们也就大体明确了。
整体看来其实就是 flutter 中 rong_im_client.dart
和 原生的两个 Wrapper
类做交互,其余的都是助攻。
整体看来不难,搞起~
融云文档:传送门