XMPP的简单了解及使用(3)

三、电子名片(vCard(个人信息)

   

 •简介

  • vCard(或称做Versitcard)最早是由Versit联盟于1995年提出的,当时联盟成员包括苹果公司,AT&T科技(后来的朗讯),IBM及西门子。在1996年十二月,格式的拥有权移至因特网邮件联盟(IMC),此联盟是由一些关注因特网电子邮件的公司所组成
  • vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC 2425RFC 2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf
  • 不同的程序对vCard标准实现亦不同。Mac OS X中的Address Book允许把所有联系人导出到一个vcf文件,而Microsoft Outlook只能每人一个文件
  • vCard是电子名片的文件格式标准,一般附加在电子邮件之后,但也可以用于其它场合(如在因特网上相互交换)

 •XMPP中电子名片的使用

  • 1. XEP-0054提供了一种机制,可以通过XMPP发送电子名片
  • 2. 要使用个人名片首先需要在XMPPFramework.h中启用电子名片的扩展头文件:
  • #import "XMPPvCardCoreDataStorage.h"
  • #import "XMPPvCardTempModule.h"
  • 3. 定义属性及成员变量
  • 4. XMPPSteam添加电子名片扩展
  • 5. 在需要时使用电子名片

  .电子名片模块它内部实现什么功能?

  >发送请求从服务器获取"电子名片(用户个人信息)"数据

  <iq type="get" to="lisi@liangliang.local"><vCard xmlns="vcard-temp"/></iq>

  >接到服务器返回的"电子名片"数据后,把数据缓存到本地数据库

打开XMPP的日志

 1>XMPP/Core/XMPPLogging.h 67

    XMPP_LOGGING_ENABLED设置为1

 2>需要配置XMPP日志启动

   didfinishlauching方法 [DDLog addLogger:[DDTTYLogger sharedInstance]];


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


1>为XMPPSteam添加电子名片扩展

    // 添加XMPP模块

    // 1.添加电子名片模块

    _vCardStorage = [XMPPvCardCoreDataStorage sharedInstance];//电子名片数据存储

    _vCard = [[XMPPvCardTempModule allocinitWithvCardStorage:_vCardStorage];//电子名片模块

    // 激活

    [_vCard activate:_xmppStream];

    

    // 电子名片模块还会配置 "头像模块一起使用

    // 2.添加 头像模块

    _avatar = [[XMPPvCardAvatarModule allocinitWithvCardTempModule:_vCard];

    [_avatar activate:_xmppStream];

      

 2>为XMPP中名片详细使用

   // 1.它内部会去数据查找

    // 为什么电子名片的模型是temp,因为解析电子名片的xml没有完善,有此节点并未解析,所以称为临时

    XMPPvCardTemp *myvCard =  [WCXMPPTool sharedWCXMPPTool].vCard.myvCardTemp;

    

    // 获取头像

    if (myvCard.photo) {

        self.avatarImgView.image = [UIImage imageWithData:myvCard.photo];

    }

    

    // 微信号 (显示用户名)

    self.wechatNumLabel.text =[WCAccount shareAccount].loginUser;

    

    self.nicknameLabel.text = myvCard.nickname;

    

    //公司

    self.orgNameLabel.text = myvCard.orgName;

    

    //部门

    if (myvCard.orgUnits.count > 0) {

        self.departmentLabel.text = myvCard.orgUnits[0];

    }

    

    //职位

    self.titleLabel.text = myvCard.title;

    

    //电话

    //self.telLabel.text = myvCard.telecomsAddresses[0];

    //使用note充当电话

    self.telLabel.text = myvCard.note;

    

    //邮箱

    // 使用mailer充当

    self.emailLabel.text = myvCard.mailer;



 3>为XMPP中花名册的使用

  • 1. 要使用花名册首先需要在XMPPFramework.h中启用电子名片的扩展头文件:
  • #import "XMPPRoster.h"
  • #import "XMPPRosterCoreDataStorage.h"
  • 2. 定义属性及成员变量
  • 3. XMPPSteam添加花名册扩展
  • 4. 设置花名册代理
  • 5. 在需要时使用花名册

// 实例化花名册模块

_xmppRosterStorage = [[XMPPRosterCoreDataStorage allocinit];

_xmppRoster = [[XMPPRoster allocinitWithRosterStorage:_xmppRosterStorage];

// * 设置花名册属性

[_xmppRoster setAutoFetchRoster:YES];

[_xmppRoster setAutoAcceptKnownPresenceSubscriptionRequests:YES];


// 激活花名册模块

[_xmppRoster activate:_xmppStream];


 四、电子名片 好友列表的显示

 花名册的使用

  • 导入CoreData框架
  • 使用NSFetchedResultsController(抓取结果控制器)可以有效地管理从Core Data抓取返回的数据结果,并为UITableView对象提供数据

-(void)loadUsers{

    //显示好友数据 (保存XMPPRoster.sqlite文件)

    

    //1.上下文 关联XMPPRoster.sqlite文件

    NSManagedObjectContext *rosterContext = [WCXMPPToolsharedWCXMPPTool].rosterStorage.mainThreadManagedObjectContext;

    

    //2.Request 请求查询哪张表

    NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];

    

    //设置排序

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"displayName"ascending:YES];

    request.sortDescriptors = @[sort];

    

    //3.执行请求

    //3.1创建结果控制器

    // 数据库查询,如果数据很多,会放在子线程查询

    // 移动客户端的数据库里数据不会很多,所以很多数据库的查询操作都主线程

    _resultsContr = [[NSFetchedResultsController allocinitWithFetchRequest:request managedObjectContext:rosterContext sectionNameKeyPath:nil cacheName:nil];

    _resultsContr.delegate = self;

    NSError *err = nil;

    //3.2执行

    [_resultsContr performFetch:&err];

    

}


#pragma mark -结果控制器的代理

#pragma mark -数据库内容改变

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{

    

    //WCLog(@"%@",[NSThread currentThread]);

    //刷新表格

    [self.tableView reloadData];


}

#pragma mark -显示的cell方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *ID = @"ContactCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    

    //获取对应的好友

    //XMPPUserCoreDataStorageObject *user = self.users[indexPath.row];

    XMPPUserCoreDataStorageObject *user = _resultsContr.fetchedObjects[indexPath.row];

    //标识用户是否在线

    // 0:在线 1:离开 2:离线

    WCLog(@"%@:在线状态%@",user.displayName,user.sectionNum);

    cell.textLabel.text = user.displayName;

    

    

    // 通过KVO来监听用户状态的改变

//    [user addObserver:self forKeyPath:@"sectionNum" options:NSKeyValueObservingOptionNew context:nil];

    

    switch ([user.sectionNum integerValue]) {

        case 0:

            cell.detailTextLabel.text = @"在线";

            break;

        case 1:

            cell.detailTextLabel.text = @"离开";

            break;

        case 2:

            cell.detailTextLabel.text = @"离线";

            break;

        default:

            break;

    }

    

    return cell;

    

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值