下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】在Android的IM應(yīng)用中使用asmack庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)
根據(jù)XMPP的XEP標(biāo)準(zhǔn)協(xié)議規(guī)范,實(shí)現(xiàn)avatar頭像傳輸與存儲(chǔ)的功能主要有三種實(shí)現(xiàn)方式,分別對(duì)應(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頭像存儲(chǔ)在vcard的XML報(bào)文中實(shí)現(xiàn)的,這個(gè)也是openfire和spark中支持的方式;在openfire中的vcard的實(shí)現(xiàn)都在org.jivesoftware.openfire.vcard包中,其中:
-用戶的vcard的存儲(chǔ)實(shí)現(xiàn)在類DefaultVCardProvider中處理了vcard的查詢,刪除,更新,新增等DB操作;
-在VCardManager中實(shí)現(xiàn)對(duì)vcard的緩存與管理(包括新增,刪除,更新,以及查詢);這種實(shí)現(xiàn)方式比較直接,在服務(wù)端就是將用戶的vcard(XML格式)信息一起存儲(chǔ)在表(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é)議中定義了兩個(gè)pubsub節(jié)點(diǎn),分別為:
-metadata節(jié)點(diǎn):主要包括avatar的狀態(tài)信息;
-data節(jié)點(diǎn):就是avatar的數(shù)據(jù);該協(xié)議也指出可以通過HTTP協(xié)議方式訪問avatar的存儲(chǔ);按照官方協(xié)議說法,該協(xié)議的實(shí)現(xiàn)方式可能要替代其他兩種實(shí)現(xiàn)方式:
ItisintendedthatthisspecificationwillsupersedebothIQ-BasedAvatars[6]andvCard-BasedAvatars[7]oncethePEPsubsetofXMPPpublish-subscribeisimplementedanddeployedwidelyenough.針對(duì)useravatar方式的實(shí)現(xiàn),針對(duì)publisher與subscriber至少需要完成如下功能:
-Publishingavatardata
-Updatingmetadataaboutthecurrentavatar
-Disablingavatars
-Discoveringavataravailability
-Receivingnotificationofavatarchanges
-Retrievingavatardataviapubsub
-RetrievingavatardataviaHTTP上面只是對(duì)實(shí)現(xiàn)avatar相關(guān)XEP協(xié)議做一個(gè)初步的了解,我這里的實(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ù)庫(kù)中可以看到如下數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度互聯(lián)網(wǎng)企業(yè)與廣告公司之間的廣告投放合同3篇
- 2024年度個(gè)人消費(fèi)貸款還款合同范本3篇
- 2024年個(gè)人電子設(shè)備購(gòu)買貸款合同模板3篇
- 2024年水泥磚加工與安裝一體化施工合同3篇
- 2024年森林資源保護(hù)人員勞動(dòng)合同
- 2024年物業(yè)公司保安服務(wù)管理合同
- 2024年環(huán)境監(jiān)測(cè)數(shù)據(jù)報(bào)告編制與交付合同
- 2024年土地流轉(zhuǎn)與農(nóng)業(yè)廢棄物處理合同規(guī)范范本9篇
- 2024年事業(yè)單位編外用工績(jī)效評(píng)估與獎(jiǎng)懲制度合同3篇
- 2024年度產(chǎn)品研發(fā)合同:某企業(yè)與研發(fā)團(tuán)隊(duì)關(guān)于新產(chǎn)品開發(fā)的約定3篇
- 生命不是游戲拒絕死亡挑戰(zhàn)主題班會(huì)
- 拒絕躺平 停止擺爛-學(xué)生心理健康主題班會(huì)(課件)
- 現(xiàn)代教育技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年濟(jì)寧學(xué)院
- 現(xiàn)代通信技術(shù)導(dǎo)論智慧樹知到期末考試答案章節(jié)答案2024年北京科技大學(xué)
- 印刷服務(wù)投標(biāo)方案(技術(shù)方案)
- 醫(yī)療器械軟件設(shè)計(jì)和開發(fā)-全套開發(fā)資料模板范本匯編
- 旅游出行安全告知書
- 一線員工技能等級(jí)評(píng)定方案
- 輸電線路鐵塔基礎(chǔ)施工質(zhì)量控制
- (完整版)服裝生產(chǎn)工藝流程圖匯總,推薦文檔
評(píng)論
0/150
提交評(píng)論