iOS 集成环信(三)

部分转载于环信官网

集成SDK基础功能


这节文章主要介绍了环信初始化、注册和登陆等功能。因为环信demo确实做得比较好,但是功能太多,想从里面提取部分功能比较困难,所以写这篇文章记录下集成环信的过程。

EaseUI使用指南


EaseUI封装了IM功能常用的控件(如聊天会话,会话列表,联系人列表),旨在帮助开发者快速集成环信SDK。EaseUI里面的代码都是开源的,我们如果有兴趣可以研究下EaseUI的代码,看下他们是怎么封装代码的。

快速集成


在我们从官方下载下载好的SDK中,有一个文件夹叫EaseUI,我们可以直接把这个文件夹拖到我们的项目中,如图所示:

iOS 集成环信(三)_第1张图片

把这个EaseUI拖到我们的项目中,注意勾选 Copy items if needed 这个选项。

iOS 集成环信(三)_第2张图片

将EaseUI的资源文件 EaseUIResource.bundle 拖到我们的项目中,EaseUIResource.bundle里面放着界面所需要的图片文件。如图所示:

iOS 集成环信(三)_第3张图片

至此,集成完了EaseUI和EaseUIResource.bundle后,我们的快速集成这一环节也就完成了,我们可以试着编译下,command + B ,编译下项目,如果按照上面的步骤走的话,我们是可以编译成功的。

初始化环信SDK


如我们使用其他公司的SDK一样,在我们打开应用的时候,都得初始化我们集成的SDK,环信SDK也不意外。

添加头文件到pch中

首先,我们需要在自己的项目中创建一个pch文件,然后将SDK中经常使用的头文件放到pch文件里。我们暂时需要把 EaseUI.h 和 SDK中 EMSDKFull.h 导入到pch文件中。代码如下所示:

#import 

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif

#ifdef __OBJC__


#import 
#import 


#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];
}

你可能感兴趣的:(iOS开发)