部分转载于环信官网
集成SDK基础功能
这节文章主要介绍了环信初始化、注册和登陆等功能。因为环信demo确实做得比较好,但是功能太多,想从里面提取部分功能比较困难,所以写这篇文章记录下集成环信的过程。
EaseUI使用指南
EaseUI封装了IM功能常用的控件(如聊天会话,会话列表,联系人列表),旨在帮助开发者快速集成环信SDK。EaseUI里面的代码都是开源的,我们如果有兴趣可以研究下EaseUI的代码,看下他们是怎么封装代码的。
快速集成
在我们从官方下载下载好的SDK中,有一个文件夹叫EaseUI,我们可以直接把这个文件夹拖到我们的项目中,如图所示:
把这个EaseUI拖到我们的项目中,注意勾选 Copy items if needed
这个选项。
将EaseUI的资源文件 EaseUIResource.bundle
拖到我们的项目中,EaseUIResource.bundle里面放着界面所需要的图片文件。如图所示:
至此,集成完了EaseUI和EaseUIResource.bundle后,我们的快速集成这一环节也就完成了,我们可以试着编译下,command + B
,编译下项目,如果按照上面的步骤走的话,我们是可以编译成功的。
初始化环信SDK
如我们使用其他公司的SDK一样,在我们打开应用的时候,都得初始化我们集成的SDK,环信SDK也不意外。
添加头文件到pch中
首先,我们需要在自己的项目中创建一个pch文件,然后将SDK中经常使用的头文件放到pch文件里。我们暂时需要把 EaseUI.h
和 SDK中 EMSDKFull.h
导入到pch文件中。代码如下所示:
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "EMSDKFull.h"
#import "EaseUI.h"
#define DEMO_CALL 1
#endif
初始化SDK
在环信 chatDemo-UI3.0
中,他们是把初始化和推送等操作放在了 AppDelegate + EaseMob
这个文件中,这样做的好处是简化了AppDelegate的代码,因为我们在做项目的时候,经常是要在 AppDelegate里做很多初始化的操作,比如百度地图SDK初始化,激光推送SDK初始化等,如果都在这里面做的话,会造成代码异常臃肿且难读。所以,我们也新建AppDelegate的类别文件,将初始化和推送的代码写在这个类别中。部分代码如下:
#import "AppDelegate+EaseMob.h"
#import "AppDelegate+EaseMobDebug.h"
/**
* 本类中做了EaseMob初始化和推送等操作
*/
@implementation AppDelegate (EaseMob)
- (void)easemobApplication:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
appkey:(NSString *)appkey
apnsCertName:(NSString *)apnsCertName
otherConfig:(NSDictionary *)otherConfig
{
//注册登录状态监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(loginStateChange:)
name:KNOTIFICATION_LOGINCHANGE
object:nil];
[[EaseSDKHelper shareHelper] easemobApplication:application
didFinishLaunchingWithOptions:launchOptions
appkey:appkey
apnsCertName:apnsCertName
otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES],@"easeSandBox":[NSNumber numberWithBool:[self isSpecifyServer]]}];
// [ChatDemoHelper shareHelper];
BOOL isAutoLogin = [EMClient sharedClient].isAutoLogin;
if (isAutoLogin){
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@YES];
}
else
{
[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@NO];
}
}
#pragma mark - App Delegate
// 将得到的deviceToken传给SDK
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[EMClient sharedClient] bindDeviceToken:deviceToken];
});
}
// 注册deviceToken失败,此处失败,与环信SDK无关,一般是您的环境配置或者证书配置有误
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"apns.failToRegisterApns", Fail to register apns)
message:error.description
delegate:nil
cancelButtonTitle:NSLocalizedString(@"ok", @"OK")
otherButtonTitles:nil];
[alert show];
}