5

融云 Flutter SDK,跨平台开发的真香之选

 2 years ago
source link: https://blog.51cto.com/u_14206262/5683392
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Flutter 可能是最受欢迎的跨平台框架。关注【融云全球互联网通信云】了解更多

作为 Google 2018 年正式推出的构建 UI 工具包,Flutter 支持一套代码库高效构建多平台应用;使用 Dart 为开发语言,利用 Skia 绘图引擎,直接通过 CPU、GPU 进行绘制,不需要依赖任何原生的控件。

谷歌在 2022 开发大会上正式推出 Flutter 3.0,并宣布目前已有超过 50 万个应用程序是用 Flutter 建立的。从我们熟悉的微信,到出海巨头 SHEIN 以及大量行业和公共机构应用,越来越多开发者采用它构建应用程序。

融云 Flutter SDK,跨平台开发的真香之选_flutter

为了助力开发者更加简单快速地集成 IM 和 RTC 相关功能,融云提供 Flutter SDK,为开发者带来更友好、更简便的即时通讯和实时音视频能力。


Flutter 为何如此受青睐?

多平台的解决方案

在 Flutter 3.0 发布后,Flutter 已经支持 iOS、Android、Web、Windows、Mac 以及 Linux 六个平台,开发者可以使用一套代码库在所有的平台进行运行,使得 Flutter 在跨平台的解决方案上有了更强的竞争力。

高性能的渲染方案

相比其他跨平台方案,Flutter 基于 Skia 2D 硬件加速图形引擎封装的渲染方案,依赖系统的图形绘制,最大程度保证了多平台的一致性,且渲染效率相比原生性能相差无几。

丰富社区生态

截至目前,Flutter GitHub 上已经有 144K个Star,官方仓库 pub.dev 已经上传了大约 3W 个插件,包含了常用的各种功能。

融云的主要功能都提供了相关的 Flutter 插件并上传到了官方仓库。

另外,在融云出品的程序员综艺《猿桌派》中,来自知乎的张彦瑞还从开发者的角度分享了使用 Flutter 的另一重吸引力:

“Flutter 是开源的,让我们有机会对 UI 系统的构建、内存管理、编译等进行深挖。即使我们以后不用 Flutter 了,也可以通过它去了解一套语言是怎么构建的,程序是怎么加载的,整个树是怎么构建的,渲染引擎是怎么做的。这些都是可以让我们举一反三的底层宝藏。”


融云相关插件及优势  

[rongcloud_im_wrapper_plugin]

rongcloud_im_wrapper_plugin 是基于融云原生 IM SDK 封装的 Flutter 插件,目前已经支持原生 IM 的所有功能,包括单聊、群聊、聊天室、超级群,并提供了全新的自定义消息模式。开发者集成后仅需几步即可快速实现 IM 通信功能。

[rongcloud_rtc_wrapper_plugin]

rongcloud_rtc_wrapper_plugin 是基于融云原生 RTC SDK 封装的 Flutter 插件,提供了原生 RTC SDK 的主要功能,支持会议模式、直播模式。开发者基于此插件可以快速集成音视频能力。

[rongcloud_call_wrapper_plugin]

rongcloud_call_wrapper_plugin 是基于融云 CallLib 封装的 Flutter 插件,可支持开发者快速集成 1V1 呼叫功能。

完整的生命周期

Flutter SDK 提供完整的生命周期管理,保证开发者在使用 SDK 时,资源都能被正常释放,减少异常情况的发生。

开发者在使用时都需要创建相关的引擎对象,利用引擎对象完成各种功能接口的调用,在使用结束时需对引擎对象进行销毁。

// 创建引擎对象

RCIMIWEngineOptions options = RCIMIWEngineOptions.create();

RCIMIWEngine engine = await RCIMIWEngine.create(appkey, options);


// 调用 IM 功能

engine.connect(

token,

timeout,

);

...


engine.disconnect(receivePush);


// 销毁引擎对象

engine.destroy();

增强接口的识别度和易用性

相比原生的 SDK,Flutter SDK 在封装接口的同时,还对接口进行了重新设计组合,在减少接口数量的同时也保证了功能的完整性。

以原生 IM SDK 获取消息为例,原生 SDK 提供:

获取本地消息的接口:getHistoryMessages

获取远端消息的接口:getRemoteHistoryMessages

Flutter SDK 将上面接口整合为一个接口 loadMessages, 同时提供了一个获取的策略,根据开发者传入的参数来确认是获取本地或者是远端的消息。

原生 SDK 获取本地消息:

channelEngine.getHistoryMessages(type, targetId, channelId, sentTime, count, order, new IRongCoreCallback.ResultCallback<List<Message>>() {

@Override

public void onSuccess(List<Message> messages) {}


@Override

public void onError(IRongCoreEnum.CoreErrorCode e) {}

});

原生 SDK 获取远端消息:

channelEngine.getRemoteHistoryMessages(type, targetId, channelId, option, new IRongCoreCallback.ResultCallback<List<Message>>() {

@Override

public void onSuccess(List<Message> messages) {

}


@Override

public void onError(IRongCoreEnum.CoreErrorCode e) {

}

});

Flutter SDK 支持开发者通过 policy 传入对应的获取策略,包括只获取本地、只获取远端、获取本地和远端:

engine?.onMessagesLoaded = (

int? code,

RCIMIWConversationType? type,

String? targetId,

String? channelId,

int? sentTime,

RCIMIWTimeOrder? order,

List<RCIMIWMessage>? messages,

) {}

int? code = await engine?.loadMessages(

type,

targetId,

channelId,

sentTime,

order,

policy,

count,

);

统一接口调用方式

Flutter SDK 不再使用传统的功能对象调用相关功能、各个功能模块相互分割的封装接口模式。

这种模式接口分散,开发者无法准确判断出 SDK 的某个接口应该在哪个功能模块下,造成了一定的学习成本。

Flutter SDK 在接口设计上,不再延续这种模式,而是将所有的接口进行精简,然后统一到一个接口类中,我们称这个为平铺接口

在使用平铺接口时,开发者可以在这个接口类调用到 SDK 的任何功能,从而减少开发者对 SDK 的学习成本,将更多的精力聚焦于业务本身。


快速集成融云 Flutter SDK

以 IM 能力为例,展示快速集成融云 Flutter SDK 的相关步骤。

初始化 SDK

RCIMIWEngineOptions options = RCIMIWEngineOptions.create();

RCIMIWEngine engine = await RCIMIWEngine.create(appkey, options);

链接融云并设置监听

RCIMIWEngineOptions options = RCIMIWEngineOptions.create();

RCIMIWEngine engine = await RCIMIWEngine.create(appkey, options);
engine.onMessageReceived = (

RCIMIWMessage? message,

int? left,

bool? offline,

bool? hasPackage,

) {

// 收到消息

};


RCIMIWTextMessage? textMessage = await engine.createTextMessage(

conversationType,

targetId,

channelId,

text,

);

engine.sendMessage(message);

退出登录并销毁

engine.disconnect(receivePush);

engine.destroy();

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK