iOSsocket、XMPP及即时通讯iOS进阶

iOS XMPP——电子名片 与 头像模块

2015-11-12  本文已影响673人  iOS_成才录

一、简介

二、实现分析

 // 电子名片
 #import "XMPPvCardCoreDataStorage.h"
 #import"XMPPvCardTempModule.h"

 // 头像模块
 #import "XMPPvCardAvatarModule.h"

三、实现具体步骤

// 全局电子名片模块
@property (nonatomic, strong,readonly) XMPPvCardTempModule *vCardModule;

   -  在AppDelegate.m文件中,添加如下,电子名片数据存储模块成员变量

  ```objc
 @interface JPAppDelegate()<XMPPStreamDelegate>{
       
  // 自动连接模块
   XMPPReconnect *_reconnect;

 // 电子名片数据存储
  XMPPvCardCoreDataStorage *_vCardStorage;

  // 头像模块
  XMPPvCardAvatarModule *_vCardAvatar;
    
    XMPPResultBlock _resultBlock;
}
#pragma mark 初始化xmppStrem对象
-(void)setupXmppStream{
    
    NSAssert(_xmppStream == nil, @"xmppStream对象初始化多次");
    
    // 1. 创建xmppStrem对象
    _xmppStream = [[XMPPStream alloc] init];
    // 2. 添加代表
    [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    
    // 3. 添加自动连接模块
    _reconnect = [[XMPPReconnect alloc] init];
    //激活
    [_reconnect activate:_xmppStream];
  
    //电子名片数据存储
    _vCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
    
    // 4. 添加电子名片模块
    _vCardModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_vCardStorage];
    //激活
    [_vCardModule activate:_xmppStream];

 // 5. 添加头像模块
    _vCardAvatar = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_vCardModule];
    [_vCardAvatar activate:_xmppStream];
}
#pragma mark 释放资源
-(void)teardownXmppstream{
    // 移动代理
    [_xmppStream removeDelegate:self];
    
    // 停止模块
    // 停止自动连接模块
    [_reconnect deactivate];
    
    // 停止电子名片模块
    [_vCardModule deactivate];

   // 停止头像模块
    [_vCardAvatar deactivate];    
    
   // 断开连接
    [_xmppStream disconnect];
    
    // 清空资源为nil
    _xmppStream = nil;
    _reconnect = nil;
    _vCardModule = nil;
    _vCardStorage = nil;
   _vCardAvatar = nil;
}

四、展示电子名片

#import "JPAppDelegate.h"
#import "XMPPvCardTemp.h"
@interface JPVCardViewController ()
- (IBAction)logout:(id)sender;
@property (weak, nonatomic) IBOutlet UIImageView *avatar;
@property (weak, nonatomic) IBOutlet UILabel *nickNameLabel;//昵称
@property (weak, nonatomic) IBOutlet UILabel *jidLabel;//jid(用户id)

@property (weak, nonatomic) IBOutlet UILabel *orgNameLabel;//公司名称
@property (weak, nonatomic) IBOutlet UILabel *orgUnitLabel;//公司部门
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;//公司职位
@property (weak, nonatomic) IBOutlet UILabel *telLabel;//电话
@property (weak, nonatomic) IBOutlet UILabel *emailLabel;//邮箱

@end
-(void)viewDidLoad{
    [super viewDidLoad];
   
    [self dataBind];
}


// 电子名片数据绑定
-(void)dataBind{
    
    //初始化登录用户的电子名片信息
    XMPPvCardTemp *myCard = xmppDelegate.vCardModule.myvCardTemp;
    
    if (myCard.photo) {
        NSLog(@"有头像");
        //设置头像
        self.avatar.image = [UIImage imageWithData:myCard.photo];
    }
    
    //设置昵称
    self.nickNameLabel.text = myCard.nickname;
    
    //设置jid
    self.jidLabel.text = xmppDelegate.xmppStream.myJID.bare;
    
    //设置公司
    self.orgNameLabel.text = myCard.orgName;
    
    //设置部门
    if (myCard.orgUnits.count > 0) {
        self.orgUnitLabel.text = myCard.orgUnits[0];
    }
    
    //设置职位
    self.titleLabel.text = myCard.title;
    
    //设置电话 (随便用一个字段充当电话号码)
    self.telLabel.text = myCard.note;
    
    //设置邮件 (随便用一个字段充当邮件)
    self.emailLabel.text = myCard.mailer;
    
    //myCard.jid没有正确返回当用户的jid
    //NSLog(@"jid:%@",myCard.jid.bare);
    
//    NSLog(@"%@ %@ %@ %@ %@ %@ %@", myCard.nickname, myCard.formattedName, myCard.familyName, myCard.givenName, myCard.middleName, myCard.prefix, myCard.suffix);
//    // jid 为空
//    NSLog(@"%@ %@ %@ %@ %@ %@ %@ %@", myCard.addresses, myCard.labels, myCard.telecomsAddresses, myCard.emailAddresses, myCard.jid, myCard.mailer, myCard.timeZone, myCard.location);
//    // 职务,[], 公司,部门数组
//    NSLog(@"%@ %@ %@ %@ %@ %@ %@ %@ %@", myCard.title, myCard.role, myCard.orgName, myCard.orgUnits[0], myCard.categories, myCard.note, myCard.prodid, myCard.sortString, myCard.phoneticSound);
//    NSLog(@"%@ %@ %@ %@ %@", myCard.uid, myCard.url, myCard.version, myCard.description, myCard.keyType);
}

五、修改电子名片

-(void)editVCardViewControllerFinish{
    // 把新的电子名片数据上传到服务
    // 1. 获取以前的电子名片数据
    XMPPvCardTemp *myCard = xmppDelegate.vCardModule.myvCardTemp;
    
    // 设置头像
    
    NSData *avatarData = UIImageJPEGRepresentation(self.avatar.image, 0.7);
    if (avatarData) {
        myCard.photo = avatarData;
    }

    // 昵称
    myCard.nickname = self.nickNameLabel.text;
    
    // 公司
    myCard.orgName = self.orgNameLabel.text;
    
    // 部门是一个数组
    NSString *orgUnit = self.orgUnitLabel.text;
    if (orgUnit.length > 0) {
        myCard.orgUnits = @[orgUnit];
    }
    
    // 职位
    myCard.title = self.titleLabel.text;
    
    // 电话
    myCard.note = self.telLabel.text;
    
    // 邮件
    myCard.mailer = self.emailLabel.text;
    
    // 保存数据
    // 先存储到本地,接着上传到服务器
    [xmppDelegate.vCardModule updateMyvCardTemp:myCard];
}
上一篇 下一篇

猜你喜欢

热点阅读