iOS XMPP——電子名片 與 頭像模塊

一、簡介

  • vCard(或稱做Versitcard),vCard的常用文件擴(kuò)展名是.vcf
  • vCard是電子名片的文件格式標(biāo)準(zhǔn)胰坟,一般附加在電子郵件之后,但也可以用于其它場合(如在因特網(wǎng)上相互交換)

二泞辐、實(shí)現(xiàn)分析

  • 1.XEP-0054提供了一種機(jī)制腕铸,可以通過XMPP發(fā)送電子名片
  • 2.要使用個(gè)人名片首先需要在XMPPFramework.h中啟用電子名片與頭像模塊的擴(kuò)展頭文件:
 // 電子名片
 #import "XMPPvCardCoreDataStorage.h"
 #import"XMPPvCardTempModule.h"

 // 頭像模塊
 #import "XMPPvCardAvatarModule.h"
  • 3.定義屬性及成員變量
  • 4.為XMPPSteam添加電子名片擴(kuò)展
  • 5.在需要時(shí)使用電子名片

三惜犀、實(shí)現(xiàn)具體步驟

  • 1、在XMPPFramework框架的XMPPFramework.h頭文件中狠裹,啟動(dòng)電子名片擴(kuò)展頭文件虽界,加入下列代碼:

    // 電子名片模塊
    #import "XMPPvCardTempModule.h"
    #import "XMPPvCardCoreDataStorage.h"
    
  • 2、定義電子名片屬性及成員變量

    • 在AppDelegate.h文件中涛菠,加入 全局電子名片模塊屬性:下列代碼莉御,

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

   -  在AppDelegate.m文件中,添加如下俗冻,電子名片數(shù)據(jù)存儲(chǔ)模塊成員變量

  ```objc
 @interface JPAppDelegate()<XMPPStreamDelegate>{
       
  // 自動(dòng)連接模塊
   XMPPReconnect *_reconnect;

 // 電子名片數(shù)據(jù)存儲(chǔ)
  XMPPvCardCoreDataStorage *_vCardStorage;

  // 頭像模塊
  XMPPvCardAvatarModule *_vCardAvatar;
    
    XMPPResultBlock _resultBlock;
}
  • 3礁叔、為XMPPSteam添加電子名片擴(kuò)展和頭像擴(kuò)展
    • 修改setupXmppStream方法:如下:
#pragma mark 初始化xmppStrem對(duì)象
-(void)setupXmppStream{
    
    NSAssert(_xmppStream == nil, @"xmppStream對(duì)象初始化多次");
    
    // 1. 創(chuàng)建xmppStrem對(duì)象
    _xmppStream = [[XMPPStream alloc] init];
    // 2. 添加代表
    [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    
    // 3. 添加自動(dòng)連接模塊
    _reconnect = [[XMPPReconnect alloc] init];
    //激活
    [_reconnect activate:_xmppStream];
  
    //電子名片數(shù)據(jù)存儲(chǔ)
    _vCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
    
    // 4. 添加電子名片模塊
    _vCardModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_vCardStorage];
    //激活
    [_vCardModule activate:_xmppStream];

 // 5. 添加頭像模塊
    _vCardAvatar = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_vCardModule];
    [_vCardAvatar activate:_xmppStream];
}
  • 4、需要我們手動(dòng)釋放資源
#pragma mark 釋放資源
-(void)teardownXmppstream{
    // 移動(dòng)代理
    [_xmppStream removeDelegate:self];
    
    // 停止模塊
    // 停止自動(dòng)連接模塊
    [_reconnect deactivate];
    
    // 停止電子名片模塊
    [_vCardModule deactivate];

   // 停止頭像模塊
    [_vCardAvatar deactivate];    
    
   // 斷開連接
    [_xmppStream disconnect];
    
    // 清空資源為nil
    _xmppStream = nil;
    _reconnect = nil;
    _vCardModule = nil;
    _vCardStorage = nil;
   _vCardAvatar = nil;
}
  • 注意:初次運(yùn)行會(huì)自動(dòng)生成一個(gè)SQLite數(shù)據(jù)庫文件:XMPPvCard.sqlite

四迄薄、展示電子名片

  • 1琅关、創(chuàng)建JPVCardViewController控制器,并導(dǎo)入頭文件
#import "JPAppDelegate.h"
#import "XMPPvCardTemp.h"
  • 2讥蔽、加載電子名片數(shù)據(jù)到視圖中
@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];
}


// 電子名片數(shù)據(jù)綁定
-(void)dataBind{
    
    //初始化登錄用戶的電子名片信息
    XMPPvCardTemp *myCard = xmppDelegate.vCardModule.myvCardTemp;
    
    if (myCard.photo) {
        NSLog(@"有頭像");
        //設(shè)置頭像
        self.avatar.image = [UIImage imageWithData:myCard.photo];
    }
    
    //設(shè)置昵稱
    self.nickNameLabel.text = myCard.nickname;
    
    //設(shè)置jid
    self.jidLabel.text = xmppDelegate.xmppStream.myJID.bare;
    
    //設(shè)置公司
    self.orgNameLabel.text = myCard.orgName;
    
    //設(shè)置部門
    if (myCard.orgUnits.count > 0) {
        self.orgUnitLabel.text = myCard.orgUnits[0];
    }
    
    //設(shè)置職位
    self.titleLabel.text = myCard.title;
    
    //設(shè)置電話 (隨便用一個(gè)字段充當(dāng)電話號(hào)碼)
    self.telLabel.text = myCard.note;
    
    //設(shè)置郵件 (隨便用一個(gè)字段充當(dāng)郵件)
    self.emailLabel.text = myCard.mailer;
    
    //myCard.jid沒有正確返回當(dāng)用戶的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);
//    // 職務(wù)涣易,[], 公司,部門數(shù)組
//    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);
}

五冶伞、修改電子名片

  • 獲取到之前的電子名片模型新症,進(jìn)行修改,修改之后响禽,要記得更新到服務(wù)器上徒爹。
-(void)editVCardViewControllerFinish{
    // 把新的電子名片數(shù)據(jù)上傳到服務(wù)
    // 1. 獲取以前的電子名片數(shù)據(jù)
    XMPPvCardTemp *myCard = xmppDelegate.vCardModule.myvCardTemp;
    
    // 設(shè)置頭像
    
    NSData *avatarData = UIImageJPEGRepresentation(self.avatar.image, 0.7);
    if (avatarData) {
        myCard.photo = avatarData;
    }

    // 昵稱
    myCard.nickname = self.nickNameLabel.text;
    
    // 公司
    myCard.orgName = self.orgNameLabel.text;
    
    // 部門是一個(gè)數(shù)組
    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;
    
    // 保存數(shù)據(jù)
    // 先存儲(chǔ)到本地,接著上傳到服務(wù)器
    [xmppDelegate.vCardModule updateMyvCardTemp:myCard];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芋类,隨后出現(xiàn)的幾起案子隆嗅,更是在濱河造成了極大的恐慌,老刑警劉巖侯繁,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榛瓮,死亡現(xiàn)場離奇詭異,居然都是意外死亡巫击,警方通過查閱死者的電腦和手機(jī)禀晓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坝锰,“玉大人粹懒,你說我怎么就攤上這事∏昙叮” “怎么了凫乖?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我帽芽,道長删掀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任导街,我火速辦了婚禮披泪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搬瑰。我一直安慰自己款票,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布泽论。 她就那樣靜靜地躺著艾少,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翼悴。 梳的紋絲不亂的頭發(fā)上缚够,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音鹦赎,去河邊找鬼谍椅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钙姊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埂伦,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼煞额,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沾谜?” 一聲冷哼從身側(cè)響起膊毁,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎基跑,沒想到半個(gè)月后婚温,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳否,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年栅螟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篱竭。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡力图,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掺逼,到底是詐尸還是另有隱情吃媒,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站赘那,受9級(jí)特大地震影響刑桑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜募舟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一祠斧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胃珍,春花似錦梁肿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至填抬,卻和暖如春烛芬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飒责。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工赘娄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宏蛉。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓遣臼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拾并。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揍堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容