iOS进阶学习-即时通讯(2)

  本篇是续接即时通讯(1)

  一、好友列表

  管理好友列表是通过XMPP中的花名册(XMPPRoster)。代码示例:

#pragma mark - 管理好友
        // 获取管理好友的单例对象
        XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance];
        // 给roster属性进行初始化
        self.xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:rosterStorage dispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)];
        // 将好友列表在通道中激活
        [self.xmppRoster activate:self.xmppStream];
        // 设置花名册代理
        [self.xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];

  XMPPRosterDelegate代理方法:

  

  添加好友:

  

  删除好友:

  

  部分代码示例:

#pragma mark - XMPPRosterDelegate代理方法
// 开始获取好友
- (void)xmppRosterDidBeginPopulating:(XMPPRoster *)sender
{
    NSLog(@"开始获取好友");
}
// 结束获取好友
- (void)xmppRosterDidEndPopulating:(XMPPRoster *)sender
{
    NSLog(@"结束获取好友");
}
// 接收好友的信息
- (void)xmppRoster:(XMPPRoster *)sender didReceiveRosterItem:(DDXMLElement *)item
{
    // 好友状态的显示信息
    NSLog(@"好友信息 ==== %@", item);
}
// 监听方法
- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence
{
    NSLog(@"获取好友请求");
}

  二、获取聊天信息

  1、聊天的规则:

  • 从服务器获取聊天记录,根据数据属性判断消息类型。
  • 发送消息。
  • 接收消息。
  • 代码示例:
//初始化消息归档对象
XMPPMessageArchivingCoreDataStorage*messageStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
self.messageArchiving = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:messageStorage dispatchQueue:dispatch_get_main_queue()];
//激活
[self.messageArchiving activate:self.xmppStream];

  2、获取聊天记录:

  • 获取聊天记录使用CoreData的方式。
  • 创建请求。
  • 创建实体描述,实体名:XMPPMessageArchiving_Message_CoreDataObject。
  • 创建谓词查询条件,条件:streamBareJidStr == 本人Jid AND bareJidStr == 好友Jid。
  • 创建排序对象,排序条件:timestamp。
  • 执行请求。
  • 代码示例:
    XMPPMessage *message = [XMPPMessage messageWithType:@"chat" to:[XMPPJID jidWithString:self.chatToSB resource:kResource] ];
    [message addBody:@“hello!!!”];
   //使用 sendElement: 发送数据到服务器
    [[XMPPManager defaultManager].xmppStream sendElement:message];

  三、发送接收消息

  接收/发送消息的回调:

// 发送消息成功
-(void)xmppStream:(XMPPStream *)sender didSendMessage:(XMPPMessage *)message
{

}
// 接收消息成功
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{

}
// 发送消息失败
- (void)xmppStream:(XMPPStream *)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error
{

}

  四、会话气泡实现

  

  五、语音图片原理

  传输原理:

  1、将图片/语音上传到服务器。

  2、根据和服务器的约定,拼好文件在服务器的地址(即图片或语音的URL)。

  3、调用xmpp发送信息方法,将地址发送出去。

  4、在接收端接收到的为一条文本信息,里面仅仅只是一个指向资源文件的url地址。

  5、在拿到url后进行需要的操作(即请求图片或者语音显示到页面上)。

  六、示例

  根据这两天学的完善了昨天的代码实现了简易的即时通讯系统。代码我上传到了github,下载地址。在这里给大家看下完成效果(因为是简易的,所以只是实现了功能,界面很low~~~大家可以在基础之上根据自己的喜好进行美化^_^):

时间: 2024-10-11 07:40:50

iOS进阶学习-即时通讯(2)的相关文章

iOS进阶学习-即时通讯(1)

一.即时通讯 1.简介 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能. 2.实现方式 即时通讯有多种实现方式,例如:XMPP.环信.融云等.下面我们对XMPP的使用进行介绍. 3.什么是XMPP XMPP(XML,Messages,Presence,Protocol)是基于可扩展标记语言(XML)的协议,可用于即时通信(IM).——可扩展消息处理现场协议. 4.XMPP优点

iOS进阶学习-地图

一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如: 导航:去任意陌生的地方. 周边:找餐馆.找酒店.找银行.找电影院. 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等. 在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这两大功能,必须基于两个框架进行开发: Map Kit :用于地图展示. Core Location :用于地理定位. 二.地图定位(CoreLocation框架,地理编码与反地理编码) 1.CoreLocation框架的使用 导入头文件

iOS进阶学习-多线程

一.多线程概述 1.程序,进程,线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源. 线程:程序中独立运行的代码段.(例如:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 2.单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程. 主线程在程序启动时被创建,用于执行main函数.

iOS进阶学习笔记

熟练掌握C/C++/Objective-C/Swift语言: 熟悉Cocoa Touch(Foundation,UIKit).Objective-C中block,gcd,NSOperation等: 熟悉Object消息传递等机制,Objective-C Runtime,阅读源码: 熟练使用大部分iOS平台常用库,开源库(AFNetworking,SDWebImage,fmdb),开源控件(EGOTableViewPullRefresh,MRProgress); 关注github上iOS平台开源项

iOS进阶学习-CocoaPods的安装与使用

一.CocoaPods的安装 1.简介: CocoaPods是一个用来帮助我们管理第三方依赖库的工具. 在开发iOS应用时,会经常使用第三方类库,比如SDWebImage.AFNetworking等等,手动的下载与添加类库非常麻烦,通过CocoaPods可以便捷的下载与管理第三方类库. 使用CocoaPods的目的是让我们能自动化的.集中的.直观的管理第三方开源库. 官方链接:https://cocoapods.org 2.安装步骤 第一步:打开终端,查看自己电脑的ruby环境:gem sour

iOS进阶学习-网络之数据请求

注:文中出现的网站只做用例子,所以有些已经失效的网站,具体URL大家可以自己上网搜索相关资源. 一.HTTP和HTTPS协议 1.URL: URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式=协议://主机地址/路径 http://www.cnblogs.com/soley 协议:不同的协议,代表着不同的资源查找方式,资源传输方式 主机地址

iOS进阶学习-数据处理之文件读写

一.沙盒机制 1.什么是沙盒? 每一个iOS应用程序都会为自己创建一个文件系统目录(文件夹),这个独立.封闭.安全的空间,叫做沙盒. 2.沙盒机制(SandBox) 沙盒是一种安全体系. 它规定了应用程序只能在为该应用程序创建的文件夹(沙盒)内访问文件,不可以访问其它沙盒内的内容(iOS8之后已经部分开放访问). 所有的非代码文件都保存在这个地方,比如图片.声音.属性列表(plist).sqlite数据库和文本文件等. 3.沙盒机制的特点: 每个应用程序的活动范围都限定在自己的沙盒里. 不能随意

iOS进阶学习-数据库

一.数据库管理系统 1.SQL语言概述:SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 2.常见的数据库: MySQL:MySQL是一个精巧的SQL数据库管理系统,而且是开源的数据管理系统.MySQL主要目标是快速.健壮和易用.它拥有强大的功能.灵活性.丰富的应用编程接口(API)以及精巧的系统结构. Oracle:Oracle Database,又名Oracle RDBMS,或简称Oracl

iOS进阶学习-初识AFNetworking

一.AFNetworking简介 AFNetworking是一个 在iOS开发中 使用非常多网络开源库 适用于iOS以及Mac OS X.它构建于在(Apple iOS开发文档) NSURLConnection ,  NSOperation , 以及其他熟悉的Foundation技术之上. 它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松. 官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/. AFNetworking