这是本文档旧的修订版!


集成 iOS SDK 前的准备工作


详细操作步骤见开发者注册及管理后台

如果不需要实现离线推送功能,请忽略这步。

制作推送证书

第 1 步:打开苹果开发者网站

苹果开发者网站

第 2 步:从 Account 进入 Certificates, Identifiers & Profiles。

Member Center

第 3 步:选择要制作的推送证书。

选择推送证书

  • 对于开发环境(sandbox)的推送证书,请选择 Apple Push Notification service SSL (Sandbox)
  • 对于生产环境(production)的推送证书,请选择 Apple Push Notification service SSL (Sandbox & Production)

注意:环信暂时不支持Apple Push Notification Authentication Key (Sandbox & Production)

第 4 步:选择对应的 APP ID(环信示例使用 ChatDemoUI,所以此处选择 com.easemob.enterprise.demo.ui)。

选择APP ID

第 5 步:根据 Certificate Assistant 的提示,创建 Certificate Request。

创建Certificate Request

第 6 步:上传上一步中创建的 Certificate Request 文件。

上传Certificate Request

第 7 步:上传完毕后,推送证书就被正确生成了,之后我们下载下来这个证书,并双击导入系统。

下载推送证书

上传推送证书

第 1 步:打开 Application –> Utilities –> Keychain Access → Certificates 应用,我们会看到有刚刚我们制作好的推送证书。

导出推送证书

导出并保存为 P12 格式并设置密码。(本步导出证书使用的电脑务必与“第 5 步:创建 Certificate Request”时使用的是一台电脑。)

第 2 步:登录环信管理后台

第 3 步:输入了正确的账号后,选择对应的 APP(环信示例为 easemob,点击 easemob)。

第 4 步:填写证书名称。

这个名称是个有意义的名字,对推送直接相关,稍后会在源码的修改里继续用到这个名字。上传之前导出的 P12 文件,密码则为此 P12 文件的密码,证书类型请根据具体情况选择。

(创建的是 Apple Push Notification service SSL Sandbox 请选择开发环境;Apple Push Notification service SSL Production 请选择生产环境。)

第 5 步:上传证书。

注意:请正确选择是生产环境还是测试环境的证书,应用包名指的是Bundle Id。

iOS SDK 介绍及导入


环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架。包括以下几个部分:

开发框架

  • SDK_Core: 为核心的消息同步协议实现,完成与服务器之间的信息交换。
  • SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能。
  • EaseUI: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成环信 SDK。

用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用。

SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块:

模块化设计

  • EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的入口。
  • EMChatManager: 管理消息的收发,完成会话管理等功能。
  • EMContactManager: 负责好友的添加删除,黑名单的管理。
  • EMGroupManager: 负责群组的管理,创建、删除群组,管理群组成员等功能。
  • EMChatroomManager: 负责聊天室的管理。

注意:如果您是从 SDK2.x 升级到 3.0,可以参考环信 SDK 2.x到3.0升级文档

以下是SDK集成参考视频,您可以通过视频学习如何集成环信SDK。

在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念,SDK支持iOS8及以上iOS版本

下载SDK (sdk 3.2.3之后只提供动态库版本)

注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交,删除方式请参考下文中的“集成动态库上传AppStore”

通过 Cocoapods 下载地址:

不包含实时语音版本 SDK(HyphenateLite),引用时 #import <HyphenateLite/HyphenateLite.h>

pod 'HyphenateLite'

包含实时语音版本 SDK(Hyphenate),引用时 #import <Hyphenate/Hyphenate.h>

pod 'Hyphenate'

手动导入 SDK

您可以到环信官网下载环信 SDK。

到此您已经下载好了 SDK,下面开始学习 SDK 的集成使用吧!

从官网上下载下来的包中分为如下五部分:

  • 环信 iOS HyphenateSDK 开发使用(不包含实时通话功能)
  • 环信 iOS HyphenateFullSDK 开发使用(包含实时通话功能)
  • 环信 iOS doc SDK 相关API文档
  • 环信 iOS ChatUIDemo3.0 工程源码
  • 环信 iOS EaseUI 工程源码
  • 环信 iOS chatdemo-ui-3.x.x.ipa 打包的 ipa

具体接口讲解请转到 Apple Docs

EaseUI 中用到的第三方库:

  • MWPhotoBrowser: 图片处理库,浏览显示
  • MJRefresh: 用于页面刷新
  • MBProgressHUD: 用于提示加载刷新
  • libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

Demo 中用到的第三方库:

  • Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中
  • libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目

导入 SDK(动态库)

将下载好的 SDK 文件夹(HyphenateSDK)拖入到项目中,并勾选上 Destination。

导入SDK

设置工程属性

第 1 步:向General → Embedded Binaries 中添加依赖库。 添加依赖库 (Embedded Binaries 中添加后,截图中的 Linked Frameworks and Libraries 中也会自动添加)

以上步骤进行完后,编译工程。如果没有报错,恭喜你,集成 SDK 成功,可以进行下一步了。

由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交审核

在SDK当前路径下执行以下命令删除i386 x86_64两个平台
bak文件是备份目录,上传appstore之后需要替换回bak目录下的SDK
实时音视频版本Hyphenate.framework

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/

不包含实时音视频版本HyphenateLite.framework

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/