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

更新时间:2022-02-28

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

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

img

  • Xcode (推荐最新版本)。
  • 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple 设备。
  • 有效的环信即时通讯 IM 开发者账号和 App Key,见 环信即时通讯云管理后台
  • 如果你的网络环境部署了防火墙,请联系环信技术支持设置白名单。

创建 Xcode 项目

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

  • Product Name 设为 HyphenateChatQuickstart
  • Organization Identifier 设为 hyphenatechat
  • User Interface 选择 Storyboard
  • Language 选择 Objective-C

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

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

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

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

向工程中导入 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 方式跳转到聊天页面。

异步方法 
[[EMClient sharedClient] registerWithUsername:@"username"
                                         password:@"your password"
                                       completion:^(NSString *aUsername, EMError *aError) {                             
                                   }];
[[EMClient sharedClient] loginWithUsername:@"username"
                                     password:@"your password"
                                   completion:^(NSString *aUsername, EMError *aError) {
                                                                 
}];
// 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) {
    }];