环信 之 iOS 客户端集成三:基础功能

  SDK中,大部分与网络有关的操作,都有三种方法:

  • 同步方法
  • 通过delegate回调的异步方法。要想能收到回调,必须要注册为:[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
  • block异步方法

1. 初始化SDK

  现在只使用#import”EaseMob.h” 。#import”EMSDKFull.h”在新版本中已经没有了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
	//registerSDKWithAppKey:注册的appKey,详细见下面注释。
	//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
    [[EaseMob sharedInstance] registerSDKWithAppKey:@"douser#istore" apnsCertName:@"istore_dev"];
    [[EaseMob sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    return YES;
}
 
// App进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationDidEnterBackground:application];
}
 
// App将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationWillEnterForeground:application];
}
 
// 申请处理时间
- (void)applicationWillTerminate:(UIApplication *)application
{
    [[EaseMob sharedInstance] applicationWillTerminate:application];
}

 

  推送证书可以为nil。

2. 注册

  不推荐客户端注册,所以也不详细说明了。应该由服务器调用rest api注册。

3. 登陆

  采用block异步调用

[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"8001" password:@"111111" completion:^(NSDictionary *loginInfo, EMError *error) {
    if (!error && loginInfo) {
        NSLog(@"登陆成功");
    }
} onQueue:nil];

  

  登陆后的回调:

- (void)didLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error;

 

 4. 自动登陆

  首次登陆后,以后再登陆APP,不需要再调用登陆方法。为什么要这么个功能,还专门拿出来当事说?其实是有比较重要的作用的。首先,它避免了一个网络连接,这样,登陆时,也加快了程序的启动;另外,在没有网络的时候,也可以获取回话列表等信息。

[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"8001" password:@"111111" completion:^(NSDictionary *loginInfo, EMError *error) {
        if (!error) {
            // 设置自动登录
            [[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES];
        }
    } onQueue:nil];

  自动登陆会在以下几种情况下取消,所以,有时候会获取不到列表,这些情况也无能为力,只是知道有这种情况就好了。

  • 用户调用了SDK的登出动作;
  • 用户在别的设备上更改了密码, 导致此设备上自动登陆失败;
  • 用户的账号被从服务器端删除;
  • 用户从另一个设备登录,把当前设备上登陆的用户踢出.

  

  当切换用户时,就需要重新登陆,要不然登陆用户和聊天用户是不对应的。

  完整的登陆应该是这样:

BOOL isAutoLogin = [[EaseMob sharedInstance].chatManager isAutoLoginEnabled];
if (!isAutoLogin) {
	[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@"8001" password:@"111111" completion:^(NSDictionary *loginInfo, EMError *error) {
	if (!error) {
            // 设置自动登录
            [[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES];
        }
	} onQueue:nil];
}

   先判断是否已经自动登陆,如果没有自动登陆,则登陆,然后再设置为以后可以自动登陆。

  自动登陆后的回调:

/*!
 @method
 @brief 用户将要进行自动登录操作的回调
 @discussion
 @param loginInfo 登录的用户信息
 @param error     错误信息
 @result
 */
- (void)willAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error;
 
/*!
 @method
 @brief 用户自动登录完成后的回调
 @discussion
 @param loginInfo 登录的用户信息
 @param error     错误信息
 @result
 */
- (void)didAutoLoginWithInfo:(NSDictionary *)loginInfo error:(EMError *)error;

 

 5. 重连

  当掉线时,IOS SDK会自动重连,只需要监听重连相关的回调,无需进行任何操作。

/*!
 @method
 @brief 将要发起自动重连操作时发送该回调
 @discussion
 @result
 */
- (void)willAutoReconnect;
 
/*!
 @method
 @brief 自动重连操作完成后的回调(成功的话,error为nil,失败的话,查看error的错误信息)
 @discussion
 @result
 */
- (void)didAutoReconnectFinishedWithError:(NSError *)error;

 

 6. 退出

  退出登录分两种类型:主动退出登录和被动退出登录。

  • 主动退出登录:调用SDK的退出接口;
  • 被动退出登录: 1、 正在登陆的账号在另一台设备上登陆; 2、 正在登陆的账号被从服务器端删除。

  logoffWithUnbindDeviceToken:是否解除device token的绑定,在被动退出时传NO,在主动退出时传YES.

[[EaseMob sharedInstance].chatManager asyncLogoffWithUnbindDeviceToken:YES/NO completion:^(NSDictionary *info, EMError *error) {
    if (!error && info) {
        NSLog(@"退出成功");
    }
} onQueue:nil];

 

/*!
 @method
 @brief 用户注销后的回调
 @discussion
 @param error        错误信息
 @result
 */
- (void)didLogoffWithError:(EMError *)error;

 

/*!
 @method
 @brief 当前登录账号在其它设备登录时的通知回调
 @discussion
 @result
 */
- (void)didLoginFromOtherDevice;

 

posted on 2015-12-30 10:26  大木哥  阅读(274)  评论(0编辑  收藏  举报

导航