在應(yīng)用中集成XMPPFramework

由于剛剛做完一個(gè)即時(shí)通信的小功能苞冯,故寫(xiě)此文記錄一下

XMPP?可擴(kuò)展通訊和表示協(xié)議

在iOS應(yīng)用里集成即時(shí)聊天功能嗡靡,可以使用開(kāi)源框架XMPPFramework加勤,或者也可以使用各種第三方的SDK耕皮,比如融云撑碴,環(huán)信等等

1.下載好XMPPFramework仑濒,將如下的5個(gè)文件夾拖進(jìn)你的項(xiàng)目中

圖1

2.由于在該框架中使用KissXml解析XML數(shù)據(jù)叹话,所以還需要在項(xiàng)目中添加libxml2.a、libresolv.a兩個(gè)靜態(tài)庫(kù)

圖2

3.之后在build setting中這是header search path

圖3

4.這樣X(jué)MPPFramework框架就添加完畢了躏精,編譯運(yùn)行一下

圖4

5.接下來(lái)的下載一個(gè)支持XMPP服務(wù)器渣刷,Openfire或者Ejabberd都是可以的,我選擇的是Openfire服務(wù)器矗烛,下載好安裝包之后雙擊直接安裝即可

openfire下載地址:http://www.igniterealtime.org/downloads/index.jsp

openfire的配置 ?http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html

6.服務(wù)器配置完畢辅柴,接下來(lái)就要寫(xiě)代碼了箩溃,實(shí)現(xiàn)XMPPFramework的一些代理方法和我自己寫(xiě)的方法

//是否連接

-(void)connect;

//斷開(kāi)連接

-(void)disconnect;

//設(shè)置xmppStream

-(void)setupStream;

//上線(xiàn)

-(void)goOnline;

//下線(xiàn)

-(void)goOffline;

實(shí)現(xiàn)

-(void)connect {

[selfsetupStream];

[xmppStreamsetMyJID:[XMPPJIDjidWithString:MyUserId]];

[xmppStreamsetHostName:serverDoamin];

[xmppStreamsetHostPort:portNum];

NSError* error =nil;

if(![xmppStreamconnectWithTimeout:10error:&error]) {

NSLog(@"can not connect to %@",serverDoamin);

}

}

-(void)disconnect {

[xmppStreamdisconnect];

[selfgoOffline];

}

-(void)goOnline {

XMPPPresence* presence = [XMPPPresencepresence];

[xmppStreamsendElement:presence];//當(dāng)前用戶(hù)上線(xiàn),獲取好友列表

}

-(void)goOffline {

XMPPPresence*presence = [XMPPPresencepresenceWithType:@"unavailable"];

[xmppStreamsendElement:presence];

}

-(void)setupStream {

xmppStream= [[XMPPStreamalloc]init];

[xmppStreamaddDelegate:selfdelegateQueue:dispatch_get_current_queue()];

}

以上只是設(shè)置xmppstream對(duì)象碌嘀,連接xmpp服務(wù)器的一些操作

接下來(lái)就要實(shí)現(xiàn)XMPPFramework中的代理方法了

如果連接服務(wù)器成功則會(huì)調(diào)用該代理方法

//連接服務(wù)器成功

-(void)xmppStreamDidConnect:(XMPPStream*)sender {

NSError* error =nil;

[xmppStreamauthenticateWithPassword:@"123123"error:&error];

}

用戶(hù)登錄

//驗(yàn)證當(dāng)前用戶(hù)名和密碼

-(void)xmppStreamDidAuthenticate:(XMPPStream*)sender {

//驗(yàn)證通過(guò)

[selfgoOnline];//上線(xiàn)獲取到好友列表涣旨,可以發(fā)送消息

}


用戶(hù)登錄成功之后接收到新消息后觸發(fā)該代理方法,在這里解析消息體并更新UI股冗,提示顯示新消息

//收到消息

-(void)xmppStream:(XMPPStream*)sender didReceiveMessage:(XMPPMessage*)message {

NSString *idStr = [[message attributeForName:@"id"] stringValue];

NSString *msg = [[message elementForName:@"body"] stringValue];

NSString *from = [[message attributeForName:@"from"] stringValue];

NSString *strTime = [self getCurrentTime];

if (msg && from) {

NSLog(@"新消息:%@", msg);

}

}


本文只記錄了xmpp的基本配置方法和一些基本的使用方法霹陡,另外在聊天中我們肯定會(huì)向?qū)Ψ桨l(fā)送語(yǔ)音、圖片或者文件等類(lèi)型的消息止状,這些類(lèi)型的消息需要服務(wù)端的支持烹棉,使用上傳服務(wù)器文件然后回發(fā)文件地址,再將文件地址以文本消息的方式發(fā)送給接收者怯疤,在消息體中需要區(qū)別文件類(lèi)型的字段fileType浆洗,接收者根據(jù)該字段來(lái)顯示不同的消息

即時(shí)聊天中xmpp協(xié)議的實(shí)現(xiàn)只是一個(gè)難點(diǎn),另外一個(gè)比較復(fù)雜的東西就是聊天的界面集峦,不過(guò)如果使用第三方的即時(shí)通信平臺(tái)的話(huà)他們都現(xiàn)成的直接可以使用的聊天界面伏社,還是比較方便易用的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塔淤,隨后出現(xiàn)的幾起案子摘昌,更是在濱河造成了極大的恐慌,老刑警劉巖高蜂,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聪黎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妨马,警方通過(guò)查閱死者的電腦和手機(jī)挺举,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烘跺,“玉大人,你說(shuō)我怎么就攤上這事脂崔÷舜荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵砌左,是天一觀(guān)的道長(zhǎng)脖咐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)汇歹,這世上最難降的妖魔是什么屁擅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮产弹,結(jié)果婚禮上派歌,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好胶果,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布匾嘱。 她就那樣靜靜地躺著,像睡著了一般早抠。 火紅的嫁衣襯著肌膚如雪霎烙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天蕊连,我揣著相機(jī)與錄音悬垃,去河邊找鬼。 笑死甘苍,一個(gè)胖子當(dāng)著我的面吹牛尝蠕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羊赵,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼趟佃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昧捷?” 一聲冷哼從身側(cè)響起闲昭,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靡挥,沒(méi)想到半個(gè)月后序矩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跋破,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年簸淀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毒返。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡租幕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拧簸,到底是詐尸還是另有隱情劲绪,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布盆赤,位于F島的核電站贾富,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牺六。R本人自食惡果不足惜颤枪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淑际。 院中可真熱鬧畏纲,春花似錦扇住、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至读整,卻和暖如春簿训,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背米间。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工强品, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈糊。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓的榛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逻锐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夫晌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,490評(píng)論 1 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理昧诱,服務(wù)發(fā)現(xiàn)晓淀,斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 時(shí)間過(guò)得很快,我的第一份iOS工作做的就是IM應(yīng)用(選用的是XMPP),如今也忘得差不多了.利用空閑時(shí)間來(lái)重寫(xiě)一遍...
    飄金閱讀 2,961評(píng)論 2 2
  • 通訊協(xié)議聊天應(yīng)用XMPPFramework XMPPFramework是一個(gè)OS X/iOS平臺(tái)的開(kāi)源項(xiàng)目盏档,使用O...
    真愛(ài)要有你才完美閱讀 439評(píng)論 0 2
  • Gulp官網(wǎng) Gulp中文網(wǎng) Gulp插件網(wǎng) 博客: 前端構(gòu)建工具gulpjs的使用介紹及技巧 - 無(wú)雙 gulp...
    wangxingkang閱讀 235評(píng)論 0 0