標籤:
部分轉載於環信官網
整合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 *)applicationdidFinishLaunchingWithOptions:(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 整合環信(三)