这是本文档旧的修订版!


iOS SDK 快速集成


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

Appkey:一个 APP 的唯一标识 在创建好的应用内注册两个IM用户(也可以称为环信id),例如: 账号:user1,密码:123 ; 账号:user2,密码:123,用来通过SDK登录环信服务器,收发消息测试。

IM用户:一个appkey下的唯一标识用户,用来登录环信服务器进行收发消息的用户。

在环信Console后台,点击创建好的应用 → IM用户 → 创建IM用户

建议创建两个IM用户,用于后面集成SDK之后聊天使用。例如登录user1,在初始化聊天页面时传入user2,user1给user2发消息测试。

环信 SDK 支持手动导入,pod 方式导入,两种方式任选其一即可,下面分别介绍两种导入方式。

手动导入SDK

下载环信demo

SDK 目录讲解

从官网上下载下来的demo中分为如下八部分:

  • ChatDemo-UI3.0 工程源码
  • ChatDemo-UI3.0.ipa 打包的 ipa
  • doc SDK相关API文档
  • EaseUI 基础UI源码
  • HyphenateAVRecorderPlugin 实时通话录制和截屏功能
  • HyphenateFullSDK 开发使用(包含实时通话功能的SDK)
  • HyphenateIDFAPlugin IDFA的库
  • HyphenateSDK 开发使用(不包含实时通话功能的SDK)

开发者最开始集成,如果选择手动导入文件集成的方式,只需要向工程中添HyphenateFullSDK或者HyphenateSDK以及EaseUI两个文件就可以,下面会介绍具体的集成方式。

demo中有两个SDK文件夹:

  • HyphenateSDK 开发使用(不包含实时语音视频通话功能)
  • HyphenateFullSDK 开发使用(包含实时语音视频通话功能)

两个SDK除了是否带有实时语音视频通话功能,其他功能都是相同的。

两者中选择一个SDK文件夹拖入到工程中,以导入HyphenateSDK为例,并勾选截图中标注的三项。

设置工程属性

向General → Embedded Binaries 中添加依赖库。

Pod导入SDK

推荐使用Cocoapods集成环信SDK。Cocoapods提供了一个简单的依赖管理系统,避免手动导入产生的错误(首先需要确认已经安装了Cocoapods)。

sudo gem install cocoapods
pod setup

在Xcode项目的根目录下,新建一个空文件,命名为Podfile,向此文件添加以下行(Lite版与Full,根据自己是否需要实时音视频功能二选一添加即可):

#Lite版本(不带实时音视频通话功能)
pod 'HyphenateLite'
#Full版本(带实时音视频通话功能)
pod 'Hyphenate'

在Podfile目录下,执行以下指令:

pod install

EaseUI是环信的基础UI文件,里面包括聊天页面(EaseMessageViewController),会话列表页面(EaseConversationListViewController),联系人列表页面(EaseUsersListViewController)基础UI页面,导入完环信SDK之后,再将该文件导入到工程中,初始化页面就可以使用。

将下载完环信demo中的EaseUI文件导入到工程中即可。

EaseUI 中用到的第三方库,三方库所在目录EaseUI → EMUIKit → 3rdparty:

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

如果以上的三方库,自己工程中也有使用的话,可以将EaseUI中的三方库删除掉,避免由于三方库重复导致报错。

用于EaseUI中发送图片,语音,视频,位置消息使用,如您的工程中已经添加过请忽略:

  • Privacy - Photo Library Usage Description 需要访问您的相册
  • Privacy - Microphone Usage Description 需要访问您的麦克风
  • Privacy - Camera Usage Description 需要访问您的摄像机
  • Privacy - Location Always Usage Description 需要使用您的位置信息
  • Privacy - Location When In Use Usage Description 需要使用您的位置信息

建议在PCH文件中引入SDK以及EaseUI的头文件。如果工程中没有pch文件,需要新建一个,并在Build Settings中设置Prefix Header为该pch文件,例如:iOS/PrefixHeader.pch。

在pch文件文件中添加如下代码:

#ifdef __OBJC__
// 包含实时音视频功能SDK的头文件
#import <Hyphenate/Hyphenate.h>
#import "EaseUI.h"
#endif

或者

#ifdef __OBJC__
//不包含实时音视频功能SDK的头文件
#import <HyphenateLite/HyphenateLite.h>
#import "EaseUI.h.h"
#endif

如果自己工程中的pch文件还引入了其他的头文件,那么所有的头文件都需要放到。

#ifdef __OBJC__

// 存放pch文件中所有的头文件

#endif 的内部

初始化SDK

在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // appkey替换成自己在环信管理后台注册应用中的appkey
EMOptions *options = [EMOptions optionsWithAppkey:@"appkey"];
// apnsCertName是证书名称,可以先传nil,等后期配置apns推送时在传入证书名称
    options.apnsCertName = nil;
    [[EMClient sharedClient] initializeSDKWithOptions:options];
    return YES;
}

登录环信服务器

// 传入在应用(appkey)下注册的IM用户user1,密码123,用于登录环信服务器
EMError *error = [[EMClient sharedClient] loginWithUsername:@"user1" password:@"123"];
if (!error) {
    NSLog(@"登录成功");
}
  • 如果在集成调试阶段,可以在初始化环信SDK完成之后,就调用登录方法。
  • 如果项目上线,建议开发者在登录自己服务器成功之后,在调用环信SDK登录方法使用用户绑定的环信id登录环信服务器(开发者给自己用户在自己服务器创建账号的同时,调用环信的rest接口在给用户授权注册一个环信id,一起返回给app端,app端拿到用户的账号密码以及环信id密码分别登录自己的服务器以及环信服务器)。
// 接收消息方的环信ID:@"user2"
// 聊天类型:EMConversationTypeChat    单聊类型
EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"user2" conversationType:EMConversationTypeChat];

有导航的话,可以用push方式跳转到聊天页面发消息测试,也就是用登录的user1给user2发消息,没有导航的话,可以用present方式跳转到聊天页面。