详细操作步骤见开发者注册及管理后台。
如果不需要实现离线推送功能,请忽略这步。
第 1 步:打开苹果开发者网站。
第 2 步:从 Account 进入 Certificates, Identifiers & Profiles。
第 3 步:选择要制作的推送证书。
注意:环信暂时不支持Apple Push Notification Authentication Key (Sandbox & Production)
第 4 步:选择对应的 APP ID(环信示例使用 ChatDemoUI,所以此处选择 com.easemob.enterprise.demo.ui)。
第 5 步:根据 Certificate Assistant 的提示,创建 Certificate Request。
第 6 步:上传上一步中创建的 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。
环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架。包括以下几个部分:
用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用。
SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块:
注意:如果您是从 SDK2.x 升级到 3.0,可以参考环信 SDK 2.x到3.0升级文档。
以下是SDK集成参考视频,您可以通过视频学习如何集成环信SDK。
在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念,SDK支持iOS8及以上iOS版本
。
注: 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交,删除方式请参考下文中的“集成动态库上传AppStore”
不包含实时语音版本 SDK(HyphenateLite),引用时 #import <HyphenateLite/HyphenateLite.h>
pod 'HyphenateLite'
包含实时语音版本 SDK(Hyphenate),引用时 #import <Hyphenate/Hyphenate.h>
pod 'Hyphenate'
您可以到环信官网下载环信 SDK。
到此您已经下载好了 SDK,下面开始学习 SDK 的集成使用吧!
从官网上下载下来的包中分为如下五部分:
具体接口讲解请转到 Apple Docs。
EaseUI 中用到的第三方库:
Demo 中用到的第三方库:
将下载好的 SDK 文件夹(HyphenateSDK)拖入到项目中,并勾选上 Destination。
第 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/
方式一:
推荐使用Cocoapods集成环信SDK。Cocoapods提供了一个简单的依赖管理系统,避免手动导入产生的错误(首先需要确认已经安装了Cocoapods)。
sudo gem install cocoapods
pod setup
在Xcode项目的根目录下,新建一个空文件,命名为Podfile,向此文件添加以下行:
#Lite版本
pod 'HyphenateLite'
#Full版本
pod 'Hyphenate'
在Podfile目录下,执行以下指令:
pod install
方式二:
在环信官网下载SDK,点击下载
手动将SDK导入到自己的工程中(集成介绍)
以Cocoapods方式集成SDK,需要引入相关头文件
//Lite版本
#import <HyphenateLite/HyphenateLite.h>
//Full版本
#import <Hyphenate/Hyphenate.h>
在工程的 AppDelegate 中的以下方法中,调用 SDK 对应方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//AppKey:注册的AppKey,详细见下面注释。
//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
EMOptions *options = [EMOptions optionsWithAppkey:@"douser#istore"];
options.apnsCertName = @"istore_dev";
[[EMClient sharedClient] initializeSDKWithOptions:options];
return YES;
}
// APP进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[EMClient sharedClient] applicationDidEnterBackground:application];
}
// APP将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[EMClient sharedClient] applicationWillEnterForeground:application];
}
登录:调用 SDK 的登录接口进行的操作。
[[EMClient sharedClient] loginWithUsername:@"8001"
password:@"111111"
completion:^(NSString *aUsername, EMError *aError) {
if (!aError) {
NSLog(@"登录成功");
} else {
NSLog(@"登录失败");
}
}];
方式一:
下载Release版本SDK,在自己的项目中导入EaseUI整个目录
方式二: 通过cocoapods集成EaseUI
pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git'
//环信ID:@"8001"
//聊天类型:EMConversationTypeChat
EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"8001" conversationType:EMConversationTypeChat];
首先需要完成快速集成单聊上述步骤。
EMError *error = nil;
EMGroupOptions *setting = [[EMGroupOptions alloc] init];
setting.maxUsersCount = 500;
setting.style = EMGroupStylePublicOpenJoin;// 创建不同类型的群组,这里需要才传入不同的类型
EMGroup *group = [[EMClient sharedClient].groupManager createGroupWithSubject:@"群组名称" description:@"群组描述" invitees:@[@"6001",@"6002"] message:@"邀请您加入群组" setting:setting error:&error];
if(!error){
NSLog(@"创建成功 -- %@",group);
}
//群ID:@"groupId"
//聊天类型:EMConversationTypeGroupChat
EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"groupId" conversationType:EMConversationTypeGroupChat];
首先需要完成快速集成单聊上述步骤。
[[EMClient sharedClient].contactManager addContact:@"8001"
message:@"我想加您为好友"
completion:^(NSString *aUsername, EMError *aError) {
if (!aError) {
NSLog(@"邀请发送成功");
}
}];
//同意好友申请
[[EMClient sharedClient].contactManager approveFriendRequestFromUser:@"8001"
completion:^(NSString *aUsername, EMError *aError) {
if (!aError) {
NSLog(@"同意好友成功");
}
}];
//拒绝好友申请
[[EMClient sharedClient].contactManager declineFriendRequestFromUser:@"8001"
completion:^(NSString *aUsername, EMError *aError) {
if (!aError) {
NSLog(@"拒绝好友成功");
}
}];
// 删除好友
[[EMClient sharedClient].contactManager deleteContact:@"8001"
isDeleteConversation: YES
completion:^(NSString *aUsername, EMError *aError) {
if (!aError) {
NSLog(@"删除成功");
}
}];
//从服务器获取所有的好友
[[EMClient sharedClient].contactManager getContactsFromServerWithCompletion:^(NSArray *aList, EMError *aError) {
if (!aError) {
NSLog(@"获取成功");
}
}];
//从数据库获取所有的好友
NSArray *userlist = [[EMClient sharedClient].contactManager getContacts];