主要用的類有:
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)兩當(dāng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Roster 可以理解為好友花名冊(cè),提供創(chuàng)建刪除獲取列表等功能Roster.SubscriptionMode 這個(gè)在建立鏈接的時(shí)候使用,我的理解就是設(shè)置接收請(qǐng)求的模式,有三種,我們項(xiàng)目用的是SubscriptionMode.manual 也就是手動(dòng)處理。
Presence 有關(guān)好友的推送消息,都是Presence包
Presence.Type 有7個(gè)Type,包含了好友上線下線、添加刪除好友及錯(cuò)誤信息的Type
PacketFilter 過濾器,此功能中主要實(shí)現(xiàn)過濾出Presence
PacketListener 看名字就知道,Packet監(jiān)聽,可以監(jiān)聽到服務(wù)端發(fā)來的所有信息。因?yàn)閤mpp發(fā)的包都是它的子類~
注釋掉就好了。
這個(gè)是個(gè)宏定義的判斷,只在MAC OSX10.5以下有效,現(xiàn)在都10.11了,這個(gè)注釋掉完全不影響,而且你開發(fā)的是手機(jī)應(yīng)用,更不影響了。
iOS 搭建xmpp聊天的具體步驟如下:
聊天室
[cpp] view plain copy
print?
//初始化聊天室
XMPPJID *roomJID = [XMPPJID jidWithString:ROOM_JID];
xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:self jid:roomJID];
[xmppRoom activate:xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
[cpp] view plain copy
print?
//創(chuàng)建聊天室成功
- (void)xmppRoomDidCreate:(XMPPRoom *)sender
{
DDLogInfo(@"%@: %@", THIS_FILE, THIS_METHOD);
}
[cpp] view plain copy
print?
//加入聊天室,使用昵稱
[xmppRoom joinRoomUsingNickname:@"quack" history:nil];
[cpp] view plain copy
print?
//獲取聊天室信息
- (void)xmppRoomDidJoin:(XMPPRoom *)sender
{
[xmppRoom fetchConfigurationForm];
[xmppRoom fetchBanList];
[xmppRoom fetchMembersList];
[xmppRoom fetchModeratorsList];
}
如果房間存在,會(huì)調(diào)用委托
[cpp] view plain copy
print?
// 收到禁止名單列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchBanList:(NSArray *)items;
// 收到好友名單列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchMembersList:(NSArray *)items;
// 收到主持人名單列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchModeratorsList:(NSArray *)items;
房間不存在,調(diào)用委托
[cpp] view plain copy
print?
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchBanList:(XMPPIQ *)iqError;
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchMembersList:(XMPPIQ *)iqError;
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchModeratorsList:(XMPPIQ *)iqError;
離開房間
[cpp] view plain copy
print?
[xmppRoom deactivate:xmppStream];
[cpp] view plain copy
print?
//離開聊天室
- (void)xmppRoomDidLeave:(XMPPRoom *)sender
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
其他代理
[cpp] view plain copy
print?
//新人加入群聊
- (void)xmppRoom:(XMPPRoom *)sender occupantDidJoin:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
//有人退出群聊
- (void)xmppRoom:(XMPPRoom *)sender occupantDidLeave:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
//有人在群里發(fā)言
- (void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
iOS無法做到這一點(diǎn),
因?yàn)镮OS的應(yīng)用程序并不知道自身是否被系統(tǒng)KILL掉,
比如QQ,在好友KILL掉QQ程序以后, 你依然無法知道他是否下線, 他的頭像依然顯示在線.
除非應(yīng)用內(nèi)有一個(gè)動(dòng)作:退出登錄, 并且用戶通過點(diǎn)擊"退出登錄"來主動(dòng)退出應(yīng)用, 服務(wù)器才能得知他是否下線。
兩種處理方式
1、將獲取到的音頻文件通過base64加密直接通過xmpp的消息體發(fā)送過去,然后解碼;
2、通過http請(qǐng)求的方式將音頻文件上傳到服務(wù)器,然后將音頻文件的下載地址通過xmpp消息體發(fā)送過去,另外一個(gè)客戶端下載。
音頻文件建議轉(zhuǎn)碼為amr,這種格式的音頻文件比較小。
socket是套接字,在你的語境下,多指?jìng)鬏攲泳W(wǎng)絡(luò)接口。
webSocket,是一個(gè)應(yīng)用層協(xié)議,說的是,目前瀏覽器實(shí)現(xiàn)的一套通信協(xié)議,用來解決之前HTTP,請(qǐng)求響應(yīng)模型不合適的場(chǎng)合。
XMPP,是一個(gè)應(yīng)用層協(xié)議,協(xié)議基于XML結(jié)構(gòu)設(shè)計(jì)。
其實(shí)websocket是socket的簡(jiǎn)約實(shí)現(xiàn),與socket相比,可以節(jié)省額外的端口占用,直接使用一個(gè)公網(wǎng)域名訪問。另外協(xié)議對(duì)報(bào)文的流量消耗做了優(yōu)化。xmpp與websocket比也是比較臃腫的
xmpp是im的使用比較廣泛的協(xié)議,早期的手機(jī)端推送為了省事就用的這種協(xié)議,但是后來發(fā)現(xiàn)這種協(xié)議比較臃腫耗流量,而且對(duì)服務(wù)器要求比較高
網(wǎng)站名稱:ios開發(fā)中xmpp,ios開發(fā)中的框架有哪些
當(dāng)前URL:http://muchs.cn/article44/phidee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)建站、App設(shè)計(jì)、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)