差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
im:ios:sdk:quickstart_draft [2019/01/31 07:51]
jk [初始化聊天页面]
im:ios:sdk:quickstart_draft [2019/04/16 09:52]
jk 移除
行 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 allocinitWithConversationChatter:​@"​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>​