差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
im:ios:sdk:quickstart_draft [2019/01/31 07:51] jk [初始化聊天页面] |
im:ios:sdk:quickstart_draft [2019/04/16 09:47] jk [iOS SDK 快速集成] |
||
---|---|---|---|
行 1: | 行 1: | ||
====== iOS SDK 快速集成 ====== | ====== iOS SDK 快速集成 ====== | ||
+ | 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念,''SDK支持iOS8及以上iOS版本''。 | ||
+ | **注:**如果您是环信 iOS SDK 的新用户,请参考本文档集成最新版本。此文档对之前的文档进行了优化,结构更清晰,帮助您更快的集成环信 iOS SDK,且对UI进行了改版优化。如果您已集成环信 iOS SDK ,并希望再次了解其集成方式,可参考之前的旧文档。 | ||
---- | ---- | ||
行 22: | 行 24: | ||
{{:im:ios:sdk:用户.png?direct|}} | {{:im:ios:sdk:用户.png?direct|}} | ||
- | ===== 集成SDK ===== | + | ===== iOS SDK 介绍 ===== |
- | 环信SDK支持手动导入,pod方式导入,两种方式任选其一即可,下面分别介绍两种导入方式。 | + | 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架。包括以下几个部分: |
- | ==== 手动导入SDK ==== | + | {{ :im:ios:sdk:image006.png?nolink |开发框架}} |
- | [[https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/iOS_IM_SDK_V3.5.3.zip|下载环信demo]] | + | * SDK_Core: 为核心的消息同步协议实现,完成与服务器之间的信息交换。 |
+ | |||
+ | * SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能。 | ||
+ | |||
+ | * EaseUI: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成环信 SDK。 | ||
- | SDK 目录讲解 | + | 用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用。 |
- | 从官网上下载下来的demo中分为如下八部分: | + | SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块: |
- | * ChatDemo-UI3.0 工程源码 | + | {{ :im:ios:sdk:image005.png?nolink |模块化设计}} |
- | * ChatDemo-UI3.0.ipa 打包的 ipa | + | * EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的入口。 |
+ | |||
+ | * EMChatManager: 管理消息的收发,完成会话管理等功能。 | ||
+ | |||
+ | * EMContactManager: 负责好友的添加删除,黑名单的管理。 | ||
+ | |||
+ | * EMGroupManager: 负责群组的管理,创建、删除群组,管理群组成员等功能。 | ||
+ | |||
+ | * EMChatroomManager: 负责聊天室的管理。 | ||
- | * doc SDK相关API文档 | + | 注意:如果您是从 SDK2.x 升级到 3.0,可以参考[[im:ios:sdk:upgradeguide|环信 SDK 2.x到3.0升级文档]]。 |
- | * EaseUI 基础UI源码 | ||
- | * HyphenateAVRecorderPlugin 实时通话录制和截屏功能 | ||
- | * HyphenateFullSDK 开发使用(包含实时通话功能的SDK) | + | ===== 集成SDK ===== |
- | * HyphenateIDFAPlugin IDFA的库 | + | 环信 SDK 支持**手动导入**,**pod 方式导入**,两种方式任选其一即可,下面分别介绍两种导入方式。 |
+ | |||
+ | ==== 手动导入SDK ==== | ||
+ | |||
+ | [[https://download-sdk.oss-cn-beijing.aliyuncs.com/downloads/iOS_IM_SDK_V3.5.3.zip|下载环信demo]] | ||
+ | |||
+ | |||
+ | * HyphenateFullSDK 开发使用(包含实时通话功能的SDK) | ||
* HyphenateSDK 开发使用(不包含实时通话功能的SDK) | * HyphenateSDK 开发使用(不包含实时通话功能的SDK) | ||
行 94: | 行 113: | ||
</code> | </code> | ||
- | ===== 集成EaseUI ===== | + | ===== 集成 UI ===== |
- | EaseUI是环信的基础UI文件,里面包括聊天页面(EaseMessageViewController),会话列表页面(EaseConversationListViewController),联系人列表页面(EaseUsersListViewController)基础UI页面,导入完环信SDK之后,再将该文件导入到工程中,初始化页面就可以使用。 | + | 环信的 UI 模块在 demo 中的该路径下 EMiOSDemo---Class |
- | 将下载完环信demo中的EaseUI文件导入到工程中即可。 | + | demo 中有几大 UI 功能模块,在集成时将对应的模块添加到工程中即可。 |
+ | * Helper------自定义库和页面,第三方库,全局通用模块 | ||
+ | |||
+ | * Chat------聊天模块 | ||
+ | |||
+ | * Conversation------会话列表模块 | ||
+ | |||
+ | * Call------实时音视频模块 | ||
+ | |||
+ | * Contact------好友列表模块 | ||
+ | |||
+ | * Group------群组模块 | ||
+ | |||
+ | * Chatroom------聊天室模块 | ||
- | EaseUI 中用到的第三方库,三方库所在目录EaseUI → EMUIKit → 3rdparty: | + | 在集成时,必须要先向自己的工程中导入 Helper 模块,然后在根据自己的需求导入其他模块。 |
- | * MWPhotoBrowser: 图片处理库,浏览显示 | + | 环信的UI模块依赖于以下三方库: |
- | + | * Masonry | |
- | * MJRefresh: 用于页面刷新 | + | |
- | + | * MJRefresh | |
- | * MBProgressHUD: 用于提示加载刷新 | + | |
- | + | * MBProgressHUD | |
- | * libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换 | + | |
- | + | * SDWebImage | |
- | 如果以上的三方库,自己工程中也有使用的话,可以将EaseUI中的三方库删除掉,避免由于三方库重复导致报错。 | + | |
+ | * SDWebImage/GIF | ||
+ | |||
+ | * FLAnimatedImage | ||
+ | 保证这些三方库在自己的工程中存在。 | ||
+ | **注意:**三方推荐使用 pod 方式导入,手动导入需要修改 info.plist 重复等报错。 | ||
===== 在工程info.plist文件中增加隐私权限 ===== | ===== 在工程info.plist文件中增加隐私权限 ===== | ||
- | 用于EaseUI中发送图片,语音,视频,位置消息使用,如您的工程中已经添加过请忽略: | + | 用于 Chat 聊天模块中发送图片,语音,视频,位置消息使用,如您的工程中已经添加过请忽略: |
* Privacy - Photo Library Usage Description 需要访问您的相册 | * Privacy - Photo Library Usage Description 需要访问您的相册 | ||
行 123: | 行 160: | ||
* Privacy - Camera Usage Description 需要访问您的摄像机 | * Privacy - Camera Usage Description 需要访问您的摄像机 | ||
- | * Privacy - Location Always Usage Description 需要使用您的位置信息 | + | * Privacy - Location Always Usage Description 需要您的同意,才能在使用期间访问位置 |
- | * Privacy - Location When In Use Usage Description 需要使用您的位置信息 | + | * Privacy - Location When In Use Usage Description 需要您的同意,才能始终访问位置 |
- | ===== 添加环信SDK以及EaseUI头文件 ===== | ||
- | 建议在PCH文件中引入SDK以及EaseUI的头文件。如果工程中没有pch文件,需要新建一个,并在Build Settings中设置Prefix Header为该pch文件,例如:iOS/PrefixHeader.pch。 | + | ===== 添加环信 SDK 以及 UI 头文件 ===== |
- | 在pch文件文件中添加如下代码: | + | 建议在 PCH 文件中引入 SDK 以及 UI 的头文件。如果工程中没有 pch 文件,需要新建一个,并在 Build Settings 中设置 Prefix Header 为该 pch 文件,例如:iOS/PrefixHeader.pch。 |
+ | |||
+ | 在 pch 文件文件中添加如下代码: | ||
<code> | <code> | ||
#ifdef __OBJC__ | #ifdef __OBJC__ | ||
- | // 包含实时音视频功能SDK的头文件 | + | // 包含实时音视频功能 SDK 的头文件 |
#import <Hyphenate/Hyphenate.h> | #import <Hyphenate/Hyphenate.h> | ||
- | #import "EaseUI.h" | + | // UI 头文件 |
+ | #import "EMHeaders.h" | ||
#endif | #endif | ||
</code> | </code> | ||
行 145: | 行 184: | ||
<code> | <code> | ||
#ifdef __OBJC__ | #ifdef __OBJC__ | ||
- | //不包含实时音视频功能SDK的头文件 | + | //不包含实时音视频功能 SDK 的头文件 |
#import <HyphenateLite/HyphenateLite.h> | #import <HyphenateLite/HyphenateLite.h> | ||
- | #import "EaseUI.h.h" | + | // UI 头文件 |
+ | #import "EMHeaders.h" | ||
#endif | #endif | ||
</code> | </code> | ||
- | 如果自己工程中的pch文件还引入了其他的头文件,那么所有的头文件都需要放到。 | + | 如果自己工程中的 pch 文件还引入了其他的头文件,那么所有的头文件都需要放到。 |
<code> | <code> | ||
#ifdef __OBJC__ | #ifdef __OBJC__ | ||
- | // 存放pch文件中所有的头文件 | + | // 存放 pch 文件中所有的头文件 |
#endif 的内部 | #endif 的内部 | ||
行 194: | 行 234: | ||
* 如果在集成调试阶段,可以在初始化环信SDK完成之后,就调用登录方法。 | * 如果在集成调试阶段,可以在初始化环信SDK完成之后,就调用登录方法。 | ||
- | * 如果项目上线,建议开发者在登录自己服务器成功之后,在调用环信SDK登录方法使用用户绑定的环信id登录环信服务器(开发者给自己用户在自己服务器创建账号的同时,调用环信的rest接口在给用户授权注册一个环信id,一起返回给app端,app端拿到用户的账号密码以及环信id密码分别登录自己的服务器以及环信服务器)。 | + | * 如果项目上线,建议开发者在登录自己服务器成功之后,再调用环信 SDK 登录方法使用用户绑定的环信id登录环信服务器(开发者给自己用户在自己服务器创建账号的同时,调用环信的 rest 接口在给用户授权注册一个环信 id,一起返回给 app 端,app 端拿到用户的账号密码以及环信 id 密码分别登录自己的服务器以及环信服务器)。 |
===== 初始化聊天页面 ===== | ===== 初始化聊天页面 ===== | ||
+ | 向工程中导入 Chat 文件 | ||
+ | <code> | ||
+ | // ConversationId接收消息方的环信ID:@"user2" | ||
+ | // type聊天类型:EMConversationTypeChat 单聊类型 | ||
+ | // createIfNotExist 如果会话不存在是否创建会话:YES | ||
+ | EMChatViewController *chatController = [[EMChatViewController alloc] initWithConversationId:@"user2" type:EMConversationTypeChat createIfNotExist:YES]; | ||
+ | [self.navigationController pushViewController:chatController animated:YES]; | ||
+ | </code> | ||
+ | |||
+ | 有导航的话,可以用 push 方式跳转到聊天页面发消息测试,也就是用登录的 user1 给 user2 发消息,没有导航的话,可以用 present 方式跳转到聊天页面。 | ||
+ | |||
+ | ===== 集成实时音视频通话功能 ===== | ||
+ | 向工程中导入 Call 文件 | ||
+ | 在初始化 SDK 完成之后,引入头文件: | ||
<code> | <code> | ||
- | // 接收消息方的环信ID:@"user2" | + | #import "DemoCallManager.h" |
- | // 聊天类型:EMConversationTypeChat 单聊类型 | + | #import "DemoConfManager.h" |
- | EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"user2" conversationType:EMConversationTypeChat]; | + | 添加: |
+ | [DemoCallManager sharedManager]; | ||
+ | [DemoConfManager sharedManager]; | ||
</code> | </code> | ||
+ | 在聊天页面中下方,点击语音,视频通话图标按钮即可使用。 | ||
- | 有导航的话,可以用push方式跳转到聊天页面发消息测试,也就是用登录的user1给user2发消息,没有导航的话,可以用present方式跳转到聊天页面。 | + | ===== 集成其他模块 ===== |
+ | |||
+ | ==== 会话列表模块 ==== | ||
+ | 向工程中导入 Conversation 文件 | ||
+ | |||
+ | 头文件:#import "EMConversationsViewController.h" | ||
+ | |||
+ | 初始化页面跳转(导航跳转示例): | ||
+ | <code> | ||
+ | EMConversationsViewController *conversationVC = [[EMConversationsViewController alloc] init]; | ||
+ | [self.navigationController pushViewController:conversationVC animated:YES]; | ||
+ | </code> | ||
+ | |||
+ | ==== 好友列表模块 ==== | ||
+ | 向工程中导入 Contact 文件 | ||
+ | |||
+ | 头文件:#import "EMContactsViewController.h" | ||
+ | |||
+ | 初始化页面跳转(导航跳转示例): | ||
+ | <code> | ||
+ | EMContactsViewController *contactVC= [[EMContactsViewController alloc] init]; | ||
+ | [self.navigationController pushViewController:contactVC animated:YES]; | ||
+ | </code> | ||
+ | |||
+ | ==== 群组模块 ==== | ||
+ | 向工程中导入 Group 文件 | ||
+ | |||
+ | 头文件:#import "EMGroupsViewController.h" | ||
+ | |||
+ | 初始化页面跳转(导航跳转示例): | ||
+ | <code> | ||
+ | EMGroupsViewController *groupVC= [[EMContactsViewController alloc] init]; | ||
+ | [self.navigationController pushViewController:groupVC animated:YES]; | ||
+ | </code> | ||
+ | |||
+ | ==== 聊天室模块 ==== | ||
+ | 向工程中导入 Chatroom 文件 | ||
+ | |||
+ | 头文件:#import "EMChatroomsViewController.h" | ||
+ | |||
+ | 初始化页面跳转(导航跳转示例): | ||
+ | <code> | ||
+ | EMChatroomsViewController *chatRoomVC= [[EMChatroomsViewController alloc] init]; | ||
+ | [self.navigationController pushViewController:chatRoomVC animated:YES]; | ||
+ | </code> | ||
+ | |||
+ | ===== 快速集成演示视频 ===== | ||
+ | |||
+ | 以下是SDK集成参考视频,您可以通过视频学习如何集成环信SDK。 | ||
+ | |||
+ | * [[https://ke.qq.com/webcourse/index.html#cid=320169&term_id=100380031&taid=2357924160922281&vid=z1428vxxdj0|OC_SDK集成]] | ||
+ | * [[https://ke.qq.com/webcourse/index.html#cid=320169&term_id=100380031&taid=2357937045824169&vid=v1428x4yz0n|Swift_SDK集成]] | ||
+ | * [[https://ke.qq.com/webcourse/index.html#cid=320169&term_id=100380031&taid=2357928455889577&vid=w14285asu4n|SDK集成参考视频]] | ||
+ | |||
+ | ===== 集成动态库上传AppStore ===== | ||
+ | |||
+ | 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交审核\\ | ||
+ | |||
+ | 在SDK当前路径下执行以下命令删除i386 x86_64两个平台\\ | ||
+ | bak文件是备份目录,上传appstore之后需要替换回bak目录下的SDK\\ | ||
+ | 实时音视频版本Hyphenate.framework | ||
+ | <code> | ||
+ | mkdir ./bak | ||
+ | cp -r Hyphenate.framework ./bak | ||
+ | lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7 | ||
+ | lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64 | ||
+ | lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate | ||
+ | mv Hyphenate Hyphenate.framework/ | ||
+ | </code> | ||
+ | |||
+ | 不包含实时音视频版本HyphenateLite.framework | ||
+ | <code> | ||
+ | mkdir ./bak | ||
+ | cp -r HyphenateLite.framework ./bak | ||
+ | lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7 | ||
+ | lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64 | ||
+ | lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite | ||
+ | mv HyphenateLite HyphenateLite.framework/ | ||
+ | </code> |