关于flutter:融云-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 类做交互,其余的都是助攻。

整体看来不难,搞起~

融云文档:传送门

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理