====== 环信即时通讯 IM iOS 快速开始 ====== 更新时间:2022-02-28 本文介绍如何快速集成环信即时通讯 IM iOS SDK 实现单聊。 ===== 实现原理 ===== 下图展示在客户端发送和接收一对一文本消息的工作流程。 [[https://docs-im.easemob.com/_detail/ccim/web/sendandreceivemsg.png?id=ccim%3Aandroid%3Amessage2|{{https://docs-im.easemob.com/_media/ccim/web/sendandreceivemsg.png?w=800&tok=54ca33|img}}]] ===== 前提条件 ===== * Xcode (推荐最新版本)。 * 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple 设备。 * CocoaPods [[https://cocoapods.org/|1.10.1 或更高版本]]。 * 有效的环信即时通讯 IM 开发者账号和 App Key,见 [[https://console.easemob.com/user/login|环信即时通讯云管理后台]]。 * 如果你的网络环境部署了防火墙,请联系环信技术支持设置白名单。 ===== 1. 准备开发环境 ===== ==== 创建 Xcode 项目 ==== 参考以下步骤在 Xcode 中创建一个 iOS 平台下的 Single View App,项目设置如下: * **Product Name** 设为 ''%%HyphenateChatQuickstart%%''。 * **Organization Identifier** 设为 ''%%hyphenatechat%%''。 * **User Interface** 选择 **Storyboard**。 * **Language** 选择 **Objective-C**。 ===== 2. 集成 SDK ===== SDK 支持 **CocoaPods 导入**和**手动导入**两种方式。 ==== 方法一:使用 CocoaPods 集成 SDK。 ==== - 在 **Terminal** 里进入项目根目录,并运行 ''%%pod init%%'' 命令。项目文件夹下会生成一个 **Podfile** 文本文件。 - 打开 **Podfile** 文件,修改文件为如下内容: # platform :ios, '10.0' target 'EMChatQuickstart' do pod 'HyphenateChat' end - 运行 ''%%pod update%%'' 命令更新本地库版本。 - 运行 ''%%pod install%%'' 命令安装 HyphenateChat SDK。成功安装后,**Terminal** 中会显示 ''%%Pod installation complete!%%'',此时项目文件夹下会生成一个 **workspace** 文件。 国内开发者如果遇到网络问题导致 pod 命令无法执行,可使用国内镜像源,例如 [[https://gitee.com/mirrors/CocoaPods-Specs|Gitee 镜像源]] 或 [[https://mirrors.tuna.tsinghua.edu.cn/help/CocoaPods/|TUNA 镜像源]]。 ==== 方法二:手动导入 SDK v3.8.9.1 及以上版本 ==== - 下载最新版的 [[https://downloadsdk.easemob.com/downloads/iOS_IM_SDK_V3.8.9.1.zip|HyphenateChat iOS SDK]] 并解压。 - 复制 SDK 包中的 ''%%HyphenateChat.framework%%'' 至项目路径下。 - 打开 Xcode,进入 **TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content**菜单。 - 点击 **+ > 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) { }];