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;

环信 之 iOS 客户端集成三:基础功能的更多相关文章

  1. 环信 之 iOS 客户端集成四:集成UI

    在Podfile文件里加入 pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-cocoapods.git' 然后在终端中的 ...

  2. 环信 之 iOS 客户端集成四:集成UI 之 会话列表

    1. 初始化 EaseConversationListViewController *chatListVC = [[EaseConversationListViewController alloc] ...

  3. 环信 之 iOS 客户端集成二:配置库

    1. 添加依赖库 Build Phases → Link Binary With Libraries MobileCoreServices.framework CFNetwork.framework ...

  4. 环信 之 iOS 客户端集成一:导入库

    1. 导入 我采用cocoapod的方式,在project同级目录下创建Podfile,Podfile内容如下: platform :ios, '7.0' pod 'EaseMobSDKFull', ...

  5. 李洪强iOS开发之-环信03_集成 SDK 基础功能

    李洪强iOS开发之-环信03_集成 SDK 基础功能 集成 SDK 基础功能 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. SDK 同步/异步方法区分 ...

  6. 改进iOS客户端的升级提醒功能

    改进iOS客户端的升级提醒功能 功能设计 先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...

  7. 环信集成 2---基于环信Demo3.0,实现单聊功能

    这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西 注意: 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a). 环信库是直接拖拽EaseMobSDK文件夹 ...

  8. 如何在ios中集成微信登录功能

    在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...

  9. XMPP iOS客户端实现三:登录、注册

    1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...

随机推荐

  1. android 线程池

    http://blog.csdn.net/wangwenhui11/article/details/6760474 http://blog.csdn.net/cutesource/article/de ...

  2. PHP 命名空间以及自动加载(自动调用的函数,来include文件)

    这篇文章的目的是记录 1. php中的自动加载函数 __autoload(), 和 spl_autoload_register()函数, 2 .php中命名空间的使用. 一.当不使用命名空间的时候 a ...

  3. 新手常见的python报错及解决方案

    此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题.希望帮助到刚入门的朋友们.后续会不断补充. 目录 1.NameErr ...

  4. springMVC记录系统日志的几种方式

    在项目开发中往往需要记录一些用户操作的系统日志到数据库,而不仅仅是记录在文件中或者log4j上.     第一种是最简单最原始也是最繁琐最笨的办法:即每个需要记录的操作入口方法中去调用新增日志的接口. ...

  5. zencart侧边导航点击一级目录展开二级目录

    [小 大] 2013-09-17 00:20 来源: 未知 作者:wtozz_admin 我要投稿 zencart侧边导航点击一级目录展开二级目录 zen cart Categories默认的是只显示 ...

  6. JSTL select和checkbox的用法

    select的 用法 <select id="roleIds" name="roleIds" multiple="true" back ...

  7. 第四弹:overfeat

    overfeat是在AlexNet出现后,推出来的模型,其不仅用于物体分类,来用于定位,检测等,可以说是一个涉及很多应用场景的通用模型,值得看看. 本文将从两个方面来讲解,第一部分从论文角度来说一说, ...

  8. CSS——京东首页实战总结

    第一天成果 1.浮动的盒子不要给宽,内容撑起盒子的宽 在前端设计中,一般不给浮动的盒子设置宽,让其用内容撑起一个高度. 2.小三角的表示 ◇用一个盒子(盒子宽为字的宽,高度为字高度的一半)去截取这个菱 ...

  9. window.location获取URL中各部分

    博客分类: JAVASCRIPT JavaScriptASP.netSchemeASP网络协议  URL即:统一资源定位符 (Uniform Resource Locator, URL) 完整的URL ...

  10. utf8_unicode_ci与utf8_general_ci

    下面摘录一下Mysql 5.1中文手册中关于utf8_unicode_ci与utf8_general_ci的说明: 当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法.一 ...