差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
im:ios:sdk:prepare [2022/02/25 11:18]
jennifer.zeng [iOS SDK 快速集成]
im:ios:sdk:prepare [2022/08/03 07:27]
jennifer.zeng [iOS SDK 快速集成]
行 1: 行 1:
 ====== iOS SDK 快速集成 ====== ====== iOS SDK 快速集成 ======
-在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念,最新版本的 SDK 只支持 **iOS 9** 及以上 iOS 系统版本。+在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念,最新版本的 SDK 只支持 **iOS 10** 及以上 iOS 系统版本。
  
  
行 12: 行 12:
 [[https://​github.com/​easemob/​chat-ios.git |EaseIM 源码地址]] [[https://​github.com/​easemob/​chat-ios.git |EaseIM 源码地址]]
  
-**注:**更多Demo体验,请前往[[http://​www.easemob.com/​download/​im|下载页]]+**注:**更多 Demo 体验,请前往[[http://​www.easemob.com/​download/​im|下载页]]
  
 ===== 注册并创建应用 ===== ===== 注册并创建应用 =====
行 22: 行 22:
 Appkey:一个 APP 的唯一标识 Appkey:一个 APP 的唯一标识
  
-IM 用户:一个 ​appkey ​下的唯一标识用户,用来登录环信服务器进行收发消息的用户。 +IM 用户:一个 ​Appkey ​下的唯一标识用户,用来登录环信服务器进行收发消息的用户。 
-可以在创建好的应用内注册两个 IM 用户(也可以称为环信 ​id),例如: 账号:user1,密码:123 ; 账号:user2,密码:123,用来通过 SDK 登录环信服务器,收发消息测试。+可以在创建好的应用内注册两个 IM 用户(也可以称为环信 ​ID),例如: 账号:user1,密码:123 ; 账号:user2,密码:123,用来通过 SDK 登录环信服务器,收发消息测试。
  
  
行 65: 行 65:
   * EMChatroomManager:​ 负责聊天室的管理。   * EMChatroomManager:​ 负责聊天室的管理。
  
-注意:如果您是从 SDK2.x 升级到 3.0,可以参考[[im:​ios:​sdk:​upgradeguide|环信 SDK 2.x到3.0升级文档]]。+注意:如果您是从 SDK2.x 升级到 3.0,可以参考[[im:​ios:​sdk:​upgradeguide|环信 SDK 2.x 到 3.0 升级文档]]。
  
  
行 73: 行 73:
 ===== 集成 SDK ===== ===== 集成 SDK =====
  
-环信 SDK 支持**pod 方式导入**,**手动导入**两种方式任选其一即可,下面分别介绍两种导入方式。+环信 SDK 支持 **pod 方式导入**,**手动导入**两种方式任选其一即可,下面分别介绍两种导入方式。
  
-''​从3.6.0版本开始,sdk只支持ios9.0及以上版本。''​ +''​从 3.6.0 版本开始,SDK 只支持 ​iOS 9.0 及以上版本。''​ 
-==== Pod 导入SDK ====+==== Pod 导入 SDK ====
  
-推荐使用 ''​Cocoapods''​ 集成环信 SDK。 Cocoapods 提供了一个简单的依赖管理系统,避免手动导入产生的错误(首先需要确认已经安装了 Cocoapods,如果没有安装过Cocoapods,参考安装使用指南:https://​www.cnblogs.com/​wangluochong/​p/​5567082.html)。+推荐使用 ''​Cocoapods''​ 集成环信 SDK。 Cocoapods 提供了一个简单的依赖管理系统,避免手动导入产生的错误(首先需要确认已经安装了 Cocoapods,如果没有安装过 Cocoapods,参考安装使用指南:https://​www.cnblogs.com/​wangluochong/​p/​5567082.html)。
  
 <​code>​ <​code>​
行 92: 行 92:
  
 在 ''​Podfile''​ 目录下,执行以下指令: 在 ''​Podfile''​ 目录下,执行以下指令:
 +
 <​code>​ <​code>​
 pod install --repo-update ​ pod install --repo-update ​
行 98: 行 99:
  
  
-执行完pod install,打开工程目录,找到.xcworkspace文件运行即可。+执行完 pod install,打开工程目录,找到 .xcworkspace 文件运行即可。
 ---- ----
  
行 106: 行 107:
  
  
-  * HyphenateChat ​  ​开发使用SDK+  * HyphenateChat ​  ​开发使用 SDK
  
-开发者最开始集成,如果选择手动导入文件集成的方式,只需要向工程中添''​HyphenateChat''​就可以,下面会介绍具体的集成方式。+开发者最开始集成,如果选择手动导入文件集成的方式,只需要向工程中添 ''​HyphenateChat''​ 就可以,下面会介绍具体的集成方式。
  
-demo 中的SDK文件夹为Hyphenate SDK,将SDK 文件夹拖入到工程中,并勾选截图中标注的三项。+demo 中的 SDK 文件夹为 Hyphenate SDK,将 SDK 文件夹拖入到工程中,并勾选截图中标注的三项。
  
 {{:​im:​ios:​sdk:​选项.png?​direct|}} {{:​im:​ios:​sdk:​选项.png?​direct|}}
行 116: 行 117:
 === 设置工程属性 === === 设置工程属性 ===
  
-Xcode中,向 General → Embedded Binaries 中添加依赖库。+Xcode 中,向 General → Embedded Binaries 中添加依赖库。
  
-**注意要将'​Do Not Embed'​改成'​Embed & Sign'​**+**注意要将 'Do Not Embed' 改成 'Embed & Sign'​**
 {{:​im:​ios:​sdk:​04380a97-8a50-4e50-bcb0-5c9d6d4d9818.png?​600|}} {{:​im:​ios:​sdk:​04380a97-8a50-4e50-bcb0-5c9d6d4d9818.png?​600|}}
 ---- ----
行 130: 行 131:
   * Account:主要是 demo 的注册,登录   * Account:主要是 demo 的注册,登录
   ​   ​
-  * AppDelegate:主要是 demo 中初始化环信SDK,注册推送等+  * AppDelegate:主要是 demo 中初始化环信 SDK,注册推送等
   ​   ​
-  * Communicate:demo 的语音视频通话功能页面(包含 ​ 1v1 实时通话以及多人实时通话的功能) ​+  * Communicate:demo 的语音视频通话功能页面(包含 1v1 实时通话以及多人实时通话的功能) ​
   ​   ​
   * Chat:demo 的聊天功能页面   * Chat:demo 的聊天功能页面
行 207: 行 208:
   * 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 需要您的同意,​才能始终访问位置 +
  
 ---- ----
  
-===== 添加SDK以及UI头文件 =====+===== 添加 SDK 以及 UI 头文件 =====
  
 建议在 ''​PCH''​ 文件中引入 SDK 以及 UI 的头文件。如果工程中没有 ''​pch''​ 文件,需要新建一个,并在 ''​Build Settings''​ 中设置 ''​Prefix Header''​ 为该 pch 文件,例如:''​iOS/​PrefixHeader.pch''​。 建议在 ''​PCH''​ 文件中引入 SDK 以及 UI 的头文件。如果工程中没有 ''​pch''​ 文件,需要新建一个,并在 ''​Build Settings''​ 中设置 ''​Prefix Header''​ 为该 pch 文件,例如:''​iOS/​PrefixHeader.pch''​。
行 253: 行 251:
 - (BOOL)application:​(UIApplication *)application didFinishLaunchingWithOptions:​(NSDictionary *)launchOptions - (BOOL)application:​(UIApplication *)application didFinishLaunchingWithOptions:​(NSDictionary *)launchOptions
 { {
-    // appkey替换成自己在环信管理后台注册应用中的appkey+    // Appkey ​替换成自己在环信管理后台注册应用中的 ​Appkey
 EMOptions *options = [EMOptions optionsWithAppkey:​@"​appkey"​];​ EMOptions *options = [EMOptions optionsWithAppkey:​@"​appkey"​];​
 // apnsCertName是证书名称,可以先传nil,等后期配置apns推送时在传入证书名称 // apnsCertName是证书名称,可以先传nil,等后期配置apns推送时在传入证书名称
行 263: 行 261:
  
 ==== 登录环信服务器 ==== ==== 登录环信服务器 ====
-建议使用异步登录方法,防止网络不好的情况下,出现卡UI主线程的情况出现。+ 
 +建议使用异步登录方法,防止网络不好的情况下,出现卡 UI 主线程的情况出现。 
 <​code>​ <​code>​
 // 传入在应用(appkey)下注册的IM用户user1,密码123,用于登录环信服务器 // 传入在应用(appkey)下注册的IM用户user1,密码123,用于登录环信服务器
行 278: 行 278:
   * 如果在集成调试阶段,可以在初始化环信 SDK 完成之后,就调用登录方法。   * 如果在集成调试阶段,可以在初始化环信 SDK 完成之后,就调用登录方法。
  
-  * 如果项目上线,建议开发者在登录自己服务器成功之后,再调用环信 SDK 登录方法使用用户绑定的环信id登录环信服务器(开发者给自己用户在自己服务器创建账号的同时,调用环信的 ​rest 接口在给用户授权注册一个环信 ​id,一起返回给 ​app 端,app 端拿到用户的账号密码以及环信 ​id 密码分别登录自己的服务器以及环信服务器)。+  * 如果项目上线,建议开发者在登录自己服务器成功之后,再调用环信 SDK 登录方法使用用户绑定的环信 ​ID 登录环信服务器(开发者给自己用户在自己服务器创建账号的同时,调用环信的 ​REST 接口在给用户授权注册一个环信 ​ID,一起返回给 ​App 端,App 端拿到用户的账号密码以及环信 ​ID 密码分别登录自己的服务器以及环信服务器)。
  
 ---- ----
行 284: 行 284:
  
 ===== 初始化聊天页面 ===== ===== 初始化聊天页面 =====
 +
 向工程中导入 ''​Chat''​ 文件 向工程中导入 ''​Chat''​ 文件
 +
 <​code>​ <​code>​
-// ConversationId接收消息方的环信ID:​@"​user2"​ +// ConversationId 接收消息方的环信 ID:​@"​user2"​ 
-// type聊天类型:​EMConversationTypeChat ​   单聊类型+// type 聊天类型:​EMConversationTypeChat ​   单聊类型
 // createIfNotExist 如果会话不存在是否创建会话:YES // createIfNotExist 如果会话不存在是否创建会话:YES
 EMChatViewController *chatController = [[EMChatViewController alloc] initWithConversationId:​@"​user2"​ conversationType:​EMConversationTypeChat createIfNotExist:​YES];​ EMChatViewController *chatController = [[EMChatViewController alloc] initWithConversationId:​@"​user2"​ conversationType:​EMConversationTypeChat createIfNotExist:​YES];​
行 299: 行 301:
  
 ===== 集成实时音视频通话 ===== ===== 集成实时音视频通话 =====
 +
 向工程中导入 ''​Communicate''​ 文件 向工程中导入 ''​Communicate''​ 文件
  
 在初始化 SDK 完成之后,在初始化SDK所在的类引入头文件: 在初始化 SDK 完成之后,在初始化SDK所在的类引入头文件:
 +
 <​code>​ <​code>​
-#import "​SingleCallController.h" ​ // 1v1实时通话功能的头文件+#import "​SingleCallController.h" ​ // 1v1 实时通话功能的头文件
 #import "​ConferenceController.h" ​ // 多人实时通话功能的头文件 #import "​ConferenceController.h" ​ // 多人实时通话功能的头文件
  ​添加:  ​添加:
-[SingleCallController sharedManager]; ​ // 初始化1v1实时通话功能的单例+[SingleCallController sharedManager]; ​ // 初始化 1v1 实时通话功能的单例
 [ConferenceController sharedManager]; ​ // 初始化多人实时通话功能的单例 [ConferenceController sharedManager]; ​ // 初始化多人实时通话功能的单例
 </​code>​ </​code>​
 +
 在聊天页面中下方,点击视频通话图标按钮即可使用。 在聊天页面中下方,点击视频通话图标按钮即可使用。
  
行 315: 行 320:
 ===== 集成其他模块 ===== ===== 集成其他模块 =====
  
-集成这些模块,涉及到一些回调方法的监听与页面的跳转,需要在初始化环信SDK之后,添加 [EMDemoHelper shareHelper];​+集成这些模块,涉及到一些回调方法的监听与页面的跳转,需要在初始化环信 SDK 之后,添加 [EMDemoHelper shareHelper];​ 
 ==== 会话列表 ==== ==== 会话列表 ====
 向工程中导入 ''​Conversation''​ 文件 向工程中导入 ''​Conversation''​ 文件
行 322: 行 328:
  
 初始化页面跳转(导航跳转示例): 初始化页面跳转(导航跳转示例):
 +
 <​code>​ <​code>​
 EMConversationsViewController *conversationVC = [[EMConversationsViewController alloc] init]; EMConversationsViewController *conversationVC = [[EMConversationsViewController alloc] init];
行 328: 行 335:
  
 ==== 好友列表 ==== ==== 好友列表 ====
 +
 向工程中导入 ''​Contact''​ 文件 向工程中导入 ''​Contact''​ 文件
  
行 333: 行 341:
  
 初始化页面跳转(导航跳转示例): 初始化页面跳转(导航跳转示例):
 +
 <​code>​ <​code>​
 EMContactsViewController *contactVC= [[EMContactsViewController alloc] init]; EMContactsViewController *contactVC= [[EMContactsViewController alloc] init];
行 339: 行 348:
  
 ==== 群组 ==== ==== 群组 ====
 +
 向工程中导入 ''​Group''​ 文件 向工程中导入 ''​Group''​ 文件
  
行 344: 行 354:
  
 初始化页面跳转(导航跳转示例): 初始化页面跳转(导航跳转示例):
 +
 <​code>​ <​code>​
 EMGroupsViewController *groupVC= [[EMContactsViewController alloc] init]; EMGroupsViewController *groupVC= [[EMContactsViewController alloc] init];
行 350: 行 361:
  
 ==== 聊天室 ==== ==== 聊天室 ====
 +
 向工程中导入 ''​Chatroom''​ 文件 向工程中导入 ''​Chatroom''​ 文件
  
行 355: 行 367:
  
 初始化页面跳转(导航跳转示例): 初始化页面跳转(导航跳转示例):
 +
 <​code>​ <​code>​
 EMChatroomsViewController *chatRoomVC= [[EMChatroomsViewController alloc] init]; EMChatroomsViewController *chatRoomVC= [[EMChatroomsViewController alloc] init];
行 363: 行 376:
  
  
-===== 集成动态库上传AppStore =====+===== 集成动态库上传 AppStore =====
  
-从3.7.4版本SDK开始支持bitcode打包,并且不再支持armv7,​i386指令集,打包时需去除armv7指令。\\ +从 3.7.4 版本 SDK 开始支持 bitcode 打包,并且不再支持 armv7,i386 指令集,打包时需去除 armv7 指令。\\ 
-Xcode11需在Build Settings - Valid Architectures 设置项去除armv7指令;\\ +Xcode11 需在 Build Settings - Valid Architectures 设置项去除 armv7 指令;\\ 
-Xcode12需在Build Settings - Excluded Architectures 设置项添加armv7指令,若是iOS11以上无需此操作;+Xcode12 需在 Build Settings - Excluded Architectures 设置项添加 armv7 指令,若是 iOS11 以上无需此操作;
  
-由于 iOS 编译的特殊性,为了方便开发者使用,我们将''​x86_64'',''​arm64''​ 两个平台都合并到了一起,所以使用动态库上传 ​appstore ​时需要将''​x86_64''​ 平台删除后,才能正常提交审核。\\+由于 iOS 编译的特殊性,为了方便开发者使用,我们将 ''​x86_64'',''​arm64''​ 两个平台都合并到了一起,所以使用动态库上传 ​AppStore ​时需要将 ''​x86_64''​ 平台删除后,才能正常提交审核。\\
  
-首先将SDK进行备份。因为剔除过SDK的项目只能真机运行,要想继续模拟器运行,要换回未剔除的SDK。+首先将 SDK 进行备份。因为剔除过 SDK 的项目只能真机运行,要想继续模拟器运行,要换回未剔除的 SDK。
  
-然后进入到Launchpad中,找到其他---打开终端,然后cd到SDK的所在目录。\\ +然后进入到 Launchpad 中,找到其他---打开终端,然后 cd 到 SDK 的所在目录。\\ 
-简单的方式就是找到项目中的环信SDK,然后终端先输入cd,然后按空格键,将环信SDK拖拽到终端内,会自动生成SDK的路径,然后环信SDK名称.framework删除掉,不要cd到环信SDK,只cd到SDK所在的目录下即可。\\+简单的方式就是找到项目中的环信 SDK,然后终端先输入 cd,然后按空格键,将环信 SDK 拖拽到终端内,会自动生成SDK的路径,然后环信 SDK 名称 .framework 删除掉,不要 cd 到环信 SDK,只 cd 到 SDK 所在的目录下即可。\\
 示例:\\ 示例:\\
-比如环信SDK的路径是\\+比如环信 SDK 的路径是\\
 /​Users/​easemob-dn0164/​Desktop/​iOS_IM_SDK_V3.6.0/​HyphenateFullSDK/​Hyphenate.framework\\ /​Users/​easemob-dn0164/​Desktop/​iOS_IM_SDK_V3.6.0/​HyphenateFullSDK/​Hyphenate.framework\\
-那么只需要cd到\\+那么只需要 cd 到\\
 /​Users/​easemob-dn0164/​Desktop/​iOS_IM_SDK_V3.6.0/​HyphenateFullSDK/​\\ ​ /​Users/​easemob-dn0164/​Desktop/​iOS_IM_SDK_V3.6.0/​HyphenateFullSDK/​\\ ​
 就可以了。 就可以了。
  
-后续在 SDK 当前路径下执行以下命令删除x86_64平台\\+后续在 SDK 当前路径下执行以下命令删除 x86_64 平台\\
 实时音视频版本''​Hyphenate.framework''​ 实时音视频版本''​Hyphenate.framework''​
 +
 <​code>​ <​code>​
 【首先进入Hyphenate.framework所在目录】 【首先进入Hyphenate.framework所在目录】
-// 移除支持x86_64的二进制文件+// 移除支持 x86_64 的二进制文件
 lipo Hyphenate.framework/​Hyphenate -remove x86_64 -output Hyphenate lipo Hyphenate.framework/​Hyphenate -remove x86_64 -output Hyphenate
 //​替换framwork内部二进制文件 //​替换framwork内部二进制文件
 mv Hyphenate Hyphenate.framework/​Hyphenate mv Hyphenate Hyphenate.framework/​Hyphenate
-//​查看剥离后的二进制文件支持的CPU架构,如果显示arm64,就完成剥离,可上传AppStore+//​查看剥离后的二进制文件支持的CPU架构,如果显示 arm64,就完成剥离,可上传AppStore
 lipo -info Hyphenate.framework/​Hyphenate lipo -info Hyphenate.framework/​Hyphenate
 </​code>​ </​code>​
  
 不包含实时音视频版本 ''​HyphenateLite.framework''​ 不包含实时音视频版本 ''​HyphenateLite.framework''​
 +
 <​code>​ <​code>​
 【首先进入HyphenateLite.framework所在目录】 【首先进入HyphenateLite.framework所在目录】
-// 移除支持x86_64的二进制文件+// 移除支持 x86_64 的二进制文件
 lipo HyphenateLite.framework/​HyphenateLite -remove x86_64 -output HyphenateLite lipo HyphenateLite.framework/​HyphenateLite -remove x86_64 -output HyphenateLite
-//​替换framwork内部二进制文件[记得备份]+//替换 framwork 内部二进制文件[记得备份]
 mv HyphenateLite HyphenateLite.framework/​HyphenateLite mv HyphenateLite HyphenateLite.framework/​HyphenateLite
-//​查看剥离后的二进制文件支持的CPU架构,如果显示arm64,就完成剥离,可上传AppStore+//​查看剥离后的二进制文件支持的CPU架构,如果显示 arm64,就完成剥离,可上传 AppStore
 lipo -info HyphenateLite.framework/​HyphenateLite lipo -info HyphenateLite.framework/​HyphenateLite
 </​code>​ </​code>​