




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】在Android的IM應(yīng)用中使用asmack庫實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)
根據(jù)XMPP的XEP標(biāo)準(zhǔn)協(xié)議規(guī)范,實(shí)現(xiàn)avatar頭像傳輸與存儲的功能主要有三種實(shí)現(xiàn)方式,分別對應(yīng)于協(xié)議規(guī)范:
+【XEP-0153】vCard-BasedAvatars
/extensions/xep-0153.html
+【XEP-0084】UserAvatar
/extensions/xep-0084.html
+【XEP-0008】IQ-BasedAvatars
/extensions/xep-0008.html其中
+XEP-0153是通過將avatar頭像存儲在vcard的XML報文中實(shí)現(xiàn)的,這個也是openfire和spark中支持的方式;在openfire中的vcard的實(shí)現(xiàn)都在org.jivesoftware.openfire.vcard包中,其中:
-用戶的vcard的存儲實(shí)現(xiàn)在類DefaultVCardProvider中處理了vcard的查詢,刪除,更新,新增等DB操作;
-在VCardManager中實(shí)現(xiàn)對vcard的緩存與管理(包括新增,刪除,更新,以及查詢);這種實(shí)現(xiàn)方式比較直接,在服務(wù)端就是將用戶的vcard(XML格式)信息一起存儲在表(ofVcard)中,示例:<vCard
xmlns="vcard-temp">
<N>
<FAMILY/>
<GIVEN/>
<MIDDLE/>
</N>
<ORG>
<ORGNAME/>
<ORGUNIT/>
</ORG>
<FN/>
<URL/>
<TITLE/>
<NICKNAME/><PHOTO><TYPE>p_w_picpath/jpeg</TYPE><BINVAL>/9j/4AAQSkZJRgABAQEAYABgAADYlFFFM4T//2Q==</BINVAL></PHOTO>
<EMAIL>
<HOME/>
<INTERNET/>
<PREF/>
<USERID/>
</EMAIL>
<TEL><PAGER/><WORK/><NUMBER/>
</TEL>
<TEL><CELL/><WORK/><NUMBER/>
</TEL>
<TEL><VOICE/><WORK/><NUMBER/>
</TEL>
<TEL><FAX/><WORK/><NUMBER/>
</TEL>
<TEL><PAGER/><HOME/><NUMBER/>
</TEL>
<TEL><CELL/><HOME/><NUMBER/>
</TEL>
<TEL><VOICE/><HOME/><NUMBER/>
</TEL>
<TEL><FAX/><HOME/><NUMBER/>
</TEL>
<ADR><WORK/><PCODE/>
<REGION/>
<STREET/>
<CTRY/>
<LOCALITY/>
</ADR>
<ADR><HOME/><PCODE/>
<REGION/>
<STREET/>
<CTRY/>
<LOCALITY/>
</ADR>
</vCard>
+XEP-0008的IQ-BasedAvatars實(shí)現(xiàn)方式現(xiàn)在已不被推薦,用官方協(xié)議來說:WARNING:Considerationofthisdocument
hasbeenDeferredbytheXMPPStandardsFoundation.Implementationofthe
protocoldescribedhereinisnotrecommended
+XEP-0084UserAvatar是通過基于pubsub協(xié)議的基礎(chǔ)上實(shí)現(xiàn)用戶頭像的發(fā)布(publish)與其他用戶的訂閱(subscribe);這也是beem的實(shí)現(xiàn)方式(beem中也提供了直接通過url的方式下載頭像);在UserAvatar的協(xié)議中定義了兩個pubsub節(jié)點(diǎn),分別為:
-metadata節(jié)點(diǎn):主要包括avatar的狀態(tài)信息;
-data節(jié)點(diǎn):就是avatar的數(shù)據(jù);該協(xié)議也指出可以通過HTTP協(xié)議方式訪問avatar的存儲;按照官方協(xié)議說法,該協(xié)議的實(shí)現(xiàn)方式可能要替代其他兩種實(shí)現(xiàn)方式:
ItisintendedthatthisspecificationwillsupersedebothIQ-BasedAvatars[6]andvCard-BasedAvatars[7]oncethePEPsubsetofXMPPpublish-subscribeisimplementedanddeployedwidelyenough.針對useravatar方式的實(shí)現(xiàn),針對publisher與subscriber至少需要完成如下功能:
-Publishingavatardata
-Updatingmetadataaboutthecurrentavatar
-Disablingavatars
-Discoveringavataravailability
-Receivingnotificationofavatarchanges
-Retrievingavatardataviapubsub
-RetrievingavatardataviaHTTP上面只是對實(shí)現(xiàn)avatar相關(guān)XEP協(xié)議做一個初步的了解,我這里的實(shí)例仍然“偷懶”采用了VCard方式實(shí)現(xiàn)。協(xié)議參考:/extensions/xep-0054.htmlSmack中的VCardAPI參考:/builds/smack/docs/latest/javadoc/1,設(shè)置用戶blue的VCard中的頭像avatar信息:a)首先確認(rèn)ProviderManager已經(jīng)加入vcard-temp,如下代碼:ProviderManagerpm=
ProviderManager.getInstance();
//PrivateDataStorage
pm.addIQProvider("query","jabber:iq:private",new
PrivateDataManager.PrivateDataIQProvider());
//RosterExchange
pm.addExtensionProvider("x","jabber:x:roster",
newRosterExchangeProvider());
//MessageEvents
pm.addExtensionProvider("x","jabber:x:event",new
MessageEventProvider());
//DelayedDelivery
pm.addExtensionProvider("x","jabber:x:delay",new
DelayInformationProvider());
//Version
try{
pm.addIQProvider("query","jabber:iq:version",
Class.forName("org.jivesoftware.smackx.packet.Version"));
}catch(ClassNotFoundExceptione){
//Notsurewhat'shappening
here.
}//
VCardpm.addIQProvider("vCard",
"vcard-temp",newVCardProvider());
//OfflineMessageRequests
pm.addIQProvider("offline",
"/protocol/offline",new
OfflineMessageRequest.Provider());b)設(shè)置用戶選擇的頭像(其中還附帶演示了設(shè)置用戶blue的其他信息,如FirstName,LastName,以及NickName),如下示例代碼:
publicclassSetVCardTaskextendsAsyncTask<Uri,Integer,Long>
{
@Override
protectedLongdoInBackground(Uri...params)
{
if(params.length<1){
returnLong.valueOf(-1);
}
UriuriFile=params[0];//需要傳輸?shù)念^像文件
ByteArrayOutputStreambaos=new
ByteArrayOutputStream();
FileInputStreamfis;
try
{
String[]proj={
MediaStore.Images.Media.DATA};
Cursoractualp_w_picpathcursor=
managedQuery(uriFile,proj,null,null,null);
intactual_p_w_picpath_column_index
=
actualp_w_picpathcursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualp_w_picpathcursor.moveToFirst();
StringfilePath=
actualp_w_picpathcursor.getString(actual_p_w_picpath_column_index);
fis=newFileInputStream(new
File(filePath));
byte[]buf=newbyte[1024];
intn;
while(-1!=(n=
fis.read(buf)))
{
baos.write(buf,0,n);
}
}
catch(Exceptione)
{
e.printStackTrace();
}
byte[]bbytes=
baos.toByteArray();//設(shè)置和更新用戶信息VCardvCard=newVCard();
vCard.setFirstName("Steven");
vCard.setLastName("Hu");
vCard.setNickName("安靜的瘋子");vCard.setAvatar(bbytes);
try
{
vCard.save(MainHelloIM.getInstance().getConnection());
}
catch(XMPPExceptione)
{
e.printStackTrace();
}
returnLong.valueOf(0);
}
}c)最終在服務(wù)端的數(shù)據(jù)庫中可以看到如下數(shù)據(jù)(其中可以看到用戶昵稱也都設(shè)置成功了):d)通過spark登錄成功后,可以看到頭像已經(jīng)更新如下:
2,查看用戶blue的VCard信息a)首先確認(rèn)ProviderManager已經(jīng)加入vcard-temp,同上;b)采用異步任務(wù)來獲取用戶blue的VCard信息中的昵稱
publicclassGetVCardTaskextend
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新光源助航燈光設(shè)備合作協(xié)議書
- 銀行金融產(chǎn)品合作協(xié)議
- 法律實(shí)務(wù)中的合同法知識考點(diǎn)梳理
- 小區(qū)物業(yè)農(nóng)村合作種植協(xié)議
- 電影行業(yè)在線票務(wù)平臺功能完善與推廣方案
- 商業(yè)投資出資金額及結(jié)構(gòu)證明書(8篇)
- 農(nóng)業(yè)種植技術(shù)合作支持及服務(wù)協(xié)議
- 造紙行業(yè)智能化生產(chǎn)流程優(yōu)化方案
- 電商平臺售后服務(wù)評價體系建立服務(wù)協(xié)議
- 農(nóng)業(yè)災(zāi)害風(fēng)險預(yù)防及應(yīng)對措施服務(wù)合同書
- 2025證券從業(yè)資格考試證券市場基礎(chǔ)知識真題試卷
- 2025年入團(tuán)基礎(chǔ)知識試題及答案詳解
- 2025-2030年中國軍工行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 地震知識課件
- 2025年小學(xué)生科學(xué)知識競賽試題及答案
- 2025年中學(xué)語文教師招聘試題及答案
- 2025年行測真題及答案B卷
- 阿片類藥物的不良反應(yīng)和對策
- 潤滑油購銷合同協(xié)議
- 《醫(yī)療團(tuán)隊(duì)中的護(hù)理管理:護(hù)士長角色定位》課件
- 2025公務(wù)員行政能力測試題及答案
評論
0/150
提交評論