# im_flutter_sdk **Repository Path**: shikailun/im_flutter_sdk ## Basic Information - **Project Name**: im_flutter_sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-12-04 - **Last Updated**: 2021-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # im_flutter_sdk ## 集成SDK ## 远程方式: 在flutter项目中的 pubspec.yaml 里面的 dependencies: 下添加 im_flutter_sdk: git: url: https://github.com/easemob/im_flutter_sdk.git ref: dev 然后 Package get 一下 注意点: 在调试iOS时,将ios->podfile文件中的 #platform :ios, '9.0' 改成 platform :ios, '9.0' ## 本地方式: 可以先将SDK clone 或者 download 到本地项目中 在flutter项目中的 pubspec.yaml 里面的 dependencies: 下添加 im_flutter_sdk: path : /本地路径/im_flutter_sdk 然后 Package get 一下 ## 使用SDK方法时导入SDK头文件即可: import 'package:im_flutter_sdk/im_flutter_sdk.dart'; SDK的方法说明文档见:[Easemob IM Flutter SDK API文档](https://easemob.github.io/im_flutter_sdk): ## Android使用音视频功能(单人,多人) 1、先下载一份im_flutter_sdk源码:https://github.com/easemob/im_flutter_sdk 2、导入Android Studio,将im_flutter_sdk/example/android项目里的call、conference、model、receiver、utils、widget目录、BaseActivity、以及res下的所有资源都去复制导入到你的android项目里,检索项目里的com.easemob.im_flutter_sdk_example去替换为自己的包名。 3、在AndroidManifest.xml里去配置权限及注册activity 4、有几个类是使用的kotlin需要配置下 在project下的build.gradle里配置 buildscript { ext.kotlin_version = '1.3.10' dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } 在app的build.gradle里配置 apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } 5、在MainActivity里去重写configureFlutterEngine方法,注册音视频plugin @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); flutterEngine.getPlugins().add(new EMCallPlugin()); flutterEngine.getPlugins().add(new EMConferencePlugin()); } 6、flutter项目中,在调用初始化环信SDK方法之后,添加这个方法: EMClient.getInstance().callManager().registerCallReceiver(); ## iOS使用音视频功能(单人,多人) 先下载一份im_flutter_sdk源码:https://github.com/easemob/im_flutter_sdk 然后到 /自己本地路径/im_flutter_sdk/example/ios/Runner/ ,拿到Calls文件(环信原生iOS音视频相关UI文件),加到自己iOS项目中,这样可以自己在修改Calls中的原生iOS音视频相关UI文件,不会因为更新im_flutter_sdk,导致自己修改的UI部分也被更新。 注意点:如果是OC项目,flutter默认帮生成的iOS项目是swift的,所以是appdelegate.swift,需要将appdelegate.swift删除,自己创建个appdelegate类,然后添加下 main.m 文件,不然会报错 然后在appdelegate.m中,添加 #import "EMCallPlugin.h" 头文件,在 didFinishLaunchingWithOptions 中添加 [EMCallPlugin registerWithRegistrar:[self registrarForPlugin:@"EMCallPlugin"]]; 注册plugin即可 如果是swift项目,按照OC的方式向 appdelegate.swift 添加头文件和注册plugin的方法即可 需要向自己iOS项目的 .plist 文件中添加权限: Privacy - Camera Usage Description 相机 Privacy - Photo Library Usage Description 相册 Privacy - Microphone Usage Description 麦克风 flutter项目中,在调用初始化环信SDK方法之后,添加下面两个方法: 如果使用1V1音视频通话请添加:EMClient.getInstance().callManager().registerCallSharedManager(); 如果使用多人音视频通话请添加:EMClient.getInstance().conferenceManager().registerConferenceSharedManager(); ## Getting Started ## 生成文档 SDK API文档由以下命令生成,线上文档请参看[Easemob IM Flutter SDK API文档](https://easemob.github.io/im_flutter_sdk): ```shell dartdoc --exclude dart:io,dart:async,dart:ui,dart:math,dart:collection,dart:convert,dart:core,dart:developer,dart:isolate,dart:typed_data --output doc ``` ## SDK主要方法介绍 ## 初始化SDK: EMOptions options = new EMOptions(appKey: "appkey"); EMClient.getInstance().init(options); ## 登录: /// 账号密码登录[id]/[password]. /// 如果登录成功,请调用[onSuccess],如果出现错误,请调用[onError]。 void login(String userName, String password,{onSuccess(String username), onError(int errorCode, String desc)}) EMClient.getInstance().login('id', 'password', onSuccess:(username) { print('登录成功 --- '); },onError: (code, desc) { print('登录错误 --- $desc'); }); ## 退出登录: /// [unbindToken] true 解除推送绑定 : false 不解除绑定 /// 如果退出登录成功,请调用[onSuccess],如果出现错误,请调用[onError]。 void logout(bool unbindToken, {onSuccess(), onError(int code, String desc)}) EMClient.getInstance().logout(true ,onSuccess:() { print('退出登录成功 --- '); }, onError:(int code, String desc){ print('退出登录失败 --- $desc'); }); ## 发起1v1音视频通话: /// @nodoc [type] 通话类型,[remoteName] 被呼叫的用户(不能与自己通话),[isRecord] 是否开启服务端录制,[isMerge] 录制时是否合并数据流, [ext] 通话扩展信息,会传给被呼叫方 /// @nodoc 如果发起实时会话成功,请调用[onSuccess],如果出现错误,请调用[onError]。 void startCall(EMCallType callType,String remoteName,bool isRecord,bool isMerge,String ext,{onSuccess(),onError(int code, String desc)}) EMClient.getInstance().callManager().startCall(EMCallType.Video, 'remoteName', false, false, "ext",onSuccess:() { print('拨打通话成功'); } , onError:(code, desc){ print('拨打通话失败 --- $desc'); }); ## 发起多人会议(多人音视频通话): /// @nodoc [aType] 会议类型,[password ] 会议密码,[isRecord ] 是否开启服务端录制,[isMerge ] 录制时是否合并数据流 /// @nodoc 如果创建并加入会议成成功,请调用[onSuccess],如果出现错误,请调用[onError]。 void createAndJoinConference(EMConferenceType conferenceType,String password,bool isRecord,bool isMerge{onSuccess(EMConference conf),onError(int code, String desc)}) EMClient.getInstance().conferenceManager().createAndJoinConference(EMConferenceType.EMConferenceTypeCommunication, '123',false, false, onSuccess:(EMConference conf){ print('发起会议成功'); }, onError:(code,desc){ print('发起会议失败 --- $desc'); } ); ## 加入多人会议(加入多人音视频通话): /// @nodoc [ConfId] 会议ID,[password ] 会议密码 /// @nodoc 如果加入已有会议成功,请调用[onSuccess],如果出现错误,请调用[onError]。 void joinConference(String confId,String password,{onSuccess(EMConference conf),onError(int code, String desc)}) EMClient.getInstance().conferenceManager().joinConference('ConfId', 'password', onSuccess:(EMConference conf){ print('加入会议成功'); } ,onError:(code,desc){ print('加入会议失败 --- $desc'); }); 其他方法请参考文档:[Easemob IM Flutter SDK API文档](https://easemob.github.io/im_flutter_sdk):