rongcloud_im_plugin 0.0.1 copy "rongcloud_im_plugin: ^0.0.1" to clipboard
rongcloud_im_plugin: ^0.0.1 copied to clipboard

discontinuedreplaced by: rongcloud_im_wrapper_plugin
outdated

RongCloud IMKit flutter plugin.

融云 IMKit flutter plugin #

本文档讲解如何二次开发 IMKit flutter plugin

flutter 官网

#整体架构

#目录结构

android/:Android wrapper

ios/:iOS wrapper

lib/:flutter wrapper

example/:demo

example/android/:Android project

example/ios/:iOS project

example/lib/:flutter app

#原理

flutter 通过 MethodChannel 实现与 native 的交互,可以详细参见官网介绍

调用任何接口,flutter 都会把 methodname 和 arguments 传递出去,native 需要根据 methodname 知道 flutter 的操作,然后根据具体的 arguments 处理,反之 native 调用 flutter 也是如此

想要了解如何调用的,可以自行在 native 平台 debug

flutter wrapper #

flutter wrapper 目前所有的接口封装在 rongcloud_im_plugin.dart 中,可以按需增加新的接口

首先 flutter 通过一个特定的 string 获取一个 methodchannel

static final MethodChannel _channel = const MethodChannel('rongcloud_im_plugin')

所有接口全部通过该 methodchannel 进行与 native 的交互

已有的接口

init:初始化 SDK,对应 native 的 initWithAppkey

config:配置接口,用来配置如用户信息持久化,语音消息最大时长等配置,flutter 层向 native 传递一个 json ,由 native 解析处理

connet:连接 im ,对应 native 的 connectWithToken,因为连接是需要等异步回调的,所以 flutter 层的写法是方法后面跟 async ,然后通过 await 来接收 native 层返回的结果

pushToConversationList:进入会话列表

pushToConversation:进入聊天页面

refreshUserInfo:刷新用户信息

setRCIMMethodCallHandler:响应 native 方法

以上各方法都可以参见 example/lib/main.dart 中的调用

iOS wrapper #

与 flutter 交互在 RongcloudImPlugin.m

iOS 通过一个特定的 string 获取一个 methodchannel,保证此处的 string 和 flutter 的 methodchannel 一致

FlutterMethodChannel* channel = [FlutterMethodChannel
      methodChannelWithName:@"rongcloud_im_plugin"
            binaryMessenger:[registrar messenger]];

所有 flutter 的接口都会通过下面接口的参数 call 获取到 methodname 和 arguments

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result

所有对 flutter 的响应都在 RCIMFlutterWrapper.m 中处理

iOS wrapper 如何依赖 IMkit #

iOS wrapper 所在目录会自动生成一个 podspec 文件

里面内容与标准的 podspec 一致,默认只会依赖 Flutter,只需要加上 s.dependency 'RongCloudIM/IMKit' 即可依赖 IMKit

Android wrapper #

与 flutter 交互在 RongcloudImPlugin.java

Android 通过一个特定的 string 获取一个 methodchannel,保证此处的 string 和 flutter/iOS 的 methodchannel 一致

final MethodChannel channel = new MethodChannel(registrar.messenger(), "rongcloud_im_plugin")

所有 flutter 的接口都会通过下面接口的参数 call 获取到 methodname 和 arguments

public void onMethodCall(MethodCall call, Result result) 

所有对 flutter 的响应都在 RCIMFlutterWrapper.java 中处理

Android wrapper 如何依赖 IMkit #

Android wrapper 所在目录会自动生成一个 build.gradle 文件

里面内容与标准的 build.gradle 一致,需要加上

rootProject.allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {url  "https://dl.bintray.com/rongcloud/maven"}
    }
}

dependencies {
    api 'cn.rongcloud.sdk:im_kit:2.9.17'
    //im_kit必须依赖im_lib,所以需要加入对应依赖
    api 'cn.rongcloud.sdk:im_lib:2.9.17'
    implementation 'com.android.support:appcompat-v7:26.0.0'
}

即可依赖 IMKit

问题 #

flutter wrapper 接口调用顺序是怎样的? #

1:调用 init

2:调用 config

3:调用 connect

4:其余接口按需调用

如何刷新用户? #

主动刷新:

flutter 层直接调用 refreshUserInfo 接口即可

被动刷新:

1.native 需要显示用户信息的时候会触发用户信息提供者的代理方法,native 通过 methodchannel 通知 flutter 层需要显示 {userId} 的用户信息

2.flutter 通过 setRCIMMethodCallHandler 可以获取到 methodname 和 arguments ,然后从 APP 服务器或者本地数据库获取对应的用户信息,再通过 refreshUserInfo 接口通知 native 层

3.native 通过 methodchannel 的 callback 获取到用户信息,然后调用 IMkit 的 refreshUserInfo 接口刷新用户信息

flutter 依赖 native SDK 各个版本是怎样的? #

iOS 依赖的是 pod 管理的 IMkit ,podspec 没有指定版本,默认是最新版本

Android 依赖的 maven 管理的 IMkit,build.gradle 中指明了具体版本

如何开启 IMKit 的各种开关,如开启消息撤回功能? #

flutter wrapper 通过 config 接口会往 native 层传入一个 json 的 map,native 自行解析然后对应设置即可,需要保证 flutter/iOS/Android 三个平台 map 的 key 一致

为什么 flutter 性能很好,几乎和 native 一样? #

flutter 本身由 dart 编写,在编译运行各平台 APP 时,会把 dart 编译成各平台原生的 SDK 如 Android 的 .so 和 iOS 的 .framework

如何依赖音视频服务? #

上面讲了 iOS wrapper 依赖 pod ,Android wrapper 依赖 maven,目前 pod 支持 CallKit ,但是 maven 还不支持,所以需要等 maven

17
likes
0
pub points
61%
popularity

Publisher

unverified uploader

RongCloud IMKit flutter plugin.

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on rongcloud_im_plugin