乐趣区

关于im:融云-Flutter-IM-SDK-解析

最近筹备应用融云的 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 就是之前说的常量字符串,用来保障唯一性。

而在 iOSAndroid 都提供了对应的定义。

并通过触发 iOS 和 Android 层对应的办法来进行解决。

原生层

Android:

整体外围的解决都在 RCIMFlutterWrapper.java 这个类解决了 dart 代码传递过去的数据,并与融云 IMLib 的 SDK 进行了解决。

iOS:

同样,iOS 的外围代码也都在 RCIMFlutterWrapper.m 这个类解决。具体内容大家能够本人看一下。

到此整个内容咱们也就大体明确了。

整体看来其实就是 flutter 中 rong_im_client.dart 和 原生的两个 Wrapper 类做交互,其余的都是助攻。

整体看来不难,搞起~

融云文档:传送门

退出移动版