目录

环信即时通讯 IM iOS 快速开始

更新时间:2022-02-28

本文介绍如何快速集成环信即时通讯 IM iOS SDK 实现单聊。

实现原理

下图展示在客户端发送和接收一对一文本消息的工作流程。

img

前提条件

1. 准备开发环境

创建 Xcode 项目

参考以下步骤在 Xcode 中创建一个 iOS 平台下的 Single View App,项目设置如下:

2. 集成 SDK

SDK 支持 CocoaPods 导入和手动导入两种方式。

方法一:使用 CocoaPods 集成 SDK。

  1. 在 Terminal 里进入项目根目录,并运行 pod init 命令。项目文件夹下会生成一个 Podfile 文本文件。
  2. 打开 Podfile 文件,修改文件为如下内容:
# platform :ios, '10.0' 

 target 'EMChatQuickstart' do
     pod 'HyphenateChat'
 end
  1. 运行 pod update 命令更新本地库版本。
  2. 运行 pod install 命令安装 HyphenateChat SDK。成功安装后,Terminal 中会显示 Pod installation complete!,此时项目文件夹下会生成一个 workspace 文件。

国内开发者如果遇到网络问题导致 pod 命令无法执行,可使用国内镜像源,例如 Gitee 镜像源 或 TUNA 镜像源。

方法二:手动导入 SDK v3.8.9.1 及以上版本

  1. 下载最新版的 HyphenateChat iOS SDK 并解压。
  2. 复制 SDK 包中的 HyphenateChat.framework 至项目路径下。
  3. 打开 Xcode,进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content菜单。
  4. 点击 + > Add Other… > Add Files 添加对应动态库,并确保添加的动态库 Embed 属性设置为 Embed & Sign。

添加完成后,项目会自动链接所需系统库。

3.初始化 SDK

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

{
// appkey 替换成你在环信即时通讯 IM 管理后台注册应用中的 App Key 
EMOptions *options = [EMOptions optionsWithAppkey:@“appkey”]; 
// apnsCertName是证书名称,可以先传 nil,等后期配置 APNs 推送时在传入证书名称 
options.apnsCertName = nil; 
[[EMClient sharedClient] initializeSDKWithOptions:options]; 
return YES; 
}

4.初始化聊天页面

向工程中导入 Chat 文件。

// ConversationId 接收消息方的环信ID:@"user2"
// type 聊天类型:EMConversationTypeChat    单聊类型
// createIfNotExist 如果会话不存在是否创建会话:YES
 EMChatViewController *chatViewController = [[EMChatViewController alloc] initWithConversationId:@"user2" conversationType:EMConversationTypeChat];
    [self.navigationController pushViewController:chatViewController animated:YES];

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

5.创建账号

异步方法 
[[EMClient sharedClient] registerWithUsername:@"username"
                                         password:@"your password"
                                       completion:^(NSString *aUsername, EMError *aError) {                             
                                   }];

6. 登录账号

[[EMClient sharedClient] loginWithUsername:@"username"
                                     password:@"your password"
                                   completion:^(NSString *aUsername, EMError *aError) {
                                                                 
}];

7.发送消息

// create a message 创建消息
  EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:@"user2"
                                                              from:@"user1"
                                                                to:@"user2"
                                                              body:TextMessageBody
                                                               ext:@{}];
// send message
  [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:^(EMChatMessage *message, EMError *error) {
    }];