您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“什么是白話彩信協(xié)議”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
第一步既然也是短信協(xié)議,我們先回顧一下短信協(xié)議的組成,是這個(gè)樣子的:
包含UDH和UD,那彩信通知中UDH和UD的值是什么呢?
先說UDH,其包含2個(gè)端口信息(wap-push:2948,wap-wsp:9200),這兩個(gè)端口是IANA注冊(cè)的端口,我們后面說,現(xiàn)在我們只需要知道,要存下這兩個(gè)端口需要4個(gè)字節(jié)(每個(gè)端口2字節(jié)),我們正好有IEI為0x05
(Application port addressing scheme, 16 bit address),表示IED包含的是16位的端口信息,那我們通知的UDH是這樣的:
2948的16進(jìn)制為0x0B84
,9200的16進(jìn)制為0x23F0
,所以最后UDH就是:0x05 0x04 0x0B 0x84 0x23 0xF0
接著我們?cè)賮碚fUD,我們前面提到了,我們通知中會(huì)帶上彩信文件的地址,當(dāng)手機(jī)收到通知時(shí),會(huì)去該地址下載彩信文件,所以,彩信的地址必然在我們UD中,哪還有哪些東西需要包含在UD中呢?
不知道大家有沒有注意過彩信在手機(jī)中展示是什么樣的呢?彩信肯定會(huì)有圖片、視頻這些主要信息,不過還會(huì)發(fā)送人、主題、彩信大小這些信息。那在我們通知中需要包含上面哪些信息呢,實(shí)際上以上就是我們彩信文件所包含的全部信息,不過通知中是不需要圖片、視頻這些主要信息的,不然還要通知干什么呢,那剩下的就是通知中需要帶上的信息了,包括發(fā)送人、主題、彩信大小。
好了,我們知道了UD中需要存哪些信息,接下來,我們就來看下UD的具體組成
老規(guī)矩,在這之前,介紹個(gè)概念
WSP(Wireless Session Protocol): 這是一種基于HTTP1.1的一種協(xié)議,有自己的編碼方式
我們前面說UDH的時(shí)候提到,有2個(gè)端口信息(wap-push, wap-wsp),這倆個(gè)端口恰好對(duì)應(yīng)我們彩信的兩個(gè)過程,可以把它們當(dāng)做目的地和源地,我們UD也正是用WSP編碼方式存儲(chǔ)的,這里簡(jiǎn)單的說一下WSP是怎么編碼的
WSP編碼其實(shí)可以看做key-value編碼,key的編碼又有2種,一種可以當(dāng)做是內(nèi)置的key,一種是自定義的key
內(nèi)置key的有對(duì)應(yīng)的一個(gè)字節(jié)內(nèi)容代表,自定義key會(huì)用專門的字符串編碼方式進(jìn)行編碼,value和自定義key一樣,如果是字符串會(huì)用專門的字符串編碼方式進(jìn)行編碼,數(shù)字則會(huì)用專門的數(shù)字編碼方式進(jìn)行編碼
我們UD組成也包含信息頭和信息體,這個(gè)信息頭和信息體就不是短信中的UDH和UD了,而是WSP的信息頭和信息體
信息頭
WSP信息頭很簡(jiǎn)單,包含一個(gè)TID和一個(gè)PDU TYPE,各占一個(gè)字節(jié),TID不用去關(guān)心它,我們只需要關(guān)心當(dāng)pdu_type=6
時(shí),就表示這是一個(gè)wap-push就OK了
比如,我們假設(shè)TID=0
那么WSP頭就為:0x00 0x06
信息體
這里我們?cè)俳榻B一個(gè)概念
MMSEP(Multimedia Messaging Service Encapsulation Protocol): 彩信封裝協(xié)議,是基于WSP協(xié)議
MMSEP也包含信息頭和信息體,還記得我們之前說通知和彩信文件的內(nèi)容差不多嗎?其實(shí)彩信文件和通知相同的部分就是MMSEP的信息頭,多出來的圖片、視頻就是MMSEP的信息體了,其實(shí)通知就是一個(gè)信息體為空的MMSEP
MMSEP信息頭會(huì)指定一個(gè)content_type,content_type也是根據(jù)專門的字符串編碼方式進(jìn)行編碼,比如彩信通知的content_type為:application/vnd.wap.mms-message
,MMSEP的content_type和普通content_type不太一樣,MMSEP的content_type能帶參數(shù),并一起參與編碼,彩信通知的content_type就帶有一個(gè)參數(shù)X-Wap-Application-ID=x-wap-application:mms.ua
這里我們簡(jiǎn)單看一下content_type結(jié)果:0x22 0x61 ... 0x00 0xAF 0x84
我們大概解釋一下這串編碼,還記得前面說的WSP編碼方式嗎?X-Wap-Application-ID
這個(gè)key是內(nèi)置的,用0xAF
表示,x-wap-application:mms.ua
同樣,用0x84
表示。那再來看前面的,因?yàn)?code>application/vnd.wap.mms-message不是內(nèi)置的key,所以得按照特殊字符串編碼方式編碼,第一位表示長(zhǎng)度0x22
,后面0x61 ... 0x00
就是編碼內(nèi)容了(這里就省略了)
我們接著看,MMSEP信息頭里面除了我們之前提到的發(fā)送人、主題、彩信大小外,還會(huì)有一些其它信息,我們挨個(gè)介紹一下
version: 表示使用的WSP編碼版本
message_type: 表示彩信類型
transaction_id: 表示事物ID
message_class_id: 表示彩信分類ID
expiry: 表示彩信有效期
subject: 表示標(biāo)題
location: 表示彩信文件地址(我們前面提到,WSP是基于HTTP的協(xié)議,這里可以是一個(gè)HTTP地址)
from: 表示發(fā)送人
這里我們特別解釋一下message_type,message_type代表了這個(gè)是一種什么類型的彩信,比如message_type=2
表示這是一個(gè)通知,message_type=4
表示這是一個(gè)彩信文件
那到這里,我們的通知UD剩下的部分也知道了,就是這個(gè)樣子:
這里大多數(shù)key都是內(nèi)置的,我舉幾個(gè)例子,比如
0x8D90
0x80
表示這是version,0x90
表示值為1.0;
0x8A80
表示msg_class_id=personal;
0x8C82
表示message_type=2;
0x98
表示transaction_id,0x88
表示expiry,0x89
表示from,0x8E
表示size,0x83
表示location,0x96
表示subject;
這里沒有例出的值的key,它們的值就需要用特殊的字符串或者數(shù)字編碼了
到這里,我們通知的部分就介紹完了,整個(gè)通知大概就是:0x05 0x04 0x0B 0x84 0x23 0xF0 0x00 0x06 0x22 0x61 ... 0x00 0xAF 0x84 0x8D90 0x8A80 0x8C82 0x98 ... 0x88 ... 0x89 ... 0x8E ... 0x83 ... 0x96 ...
這里補(bǔ)充一點(diǎn),可能你也注意到了,從最終結(jié)果來看,既然我們彩信通知和普通文本短信一樣,而且我們編碼出來的東西很可能超過了短信字節(jié)的限制,那同樣也會(huì)有可能出現(xiàn)一個(gè)通知分為多條發(fā)送的情況,這種情況下,我們不能省略必要的信息,能做的可能就是將location(uri)縮短了
最后,我們從協(xié)議的層面來看下通知是什么樣子的:
前面我們說通知的時(shí)候提到了,彩信文件其實(shí)就是比彩信通知多了圖片、視頻的信息,從協(xié)議來看就是比彩信通知(信息部分MMSEP header)多了信息體,其實(shí)信息體里就是放的圖片、視頻,彩信文件就是這個(gè)樣子:
前面我們已經(jīng)介紹過了MMSEP header,那我們彩信文件里只是部分header的值不同,其它都與通知時(shí)一樣的,下面我把不同的取值給你列出來
content_type: application/vnd.wap.multipart.related
或application/vnd.wap.multipart.mixed
message_type: 之前也提到過,如果是彩信文件message_type=4
date: 表示彩信生成時(shí)間,不同于通知的expiry,彩信文件中是date
“什么是白話彩信協(xié)議”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。