一、WAP PUSH 技術的一些說明 http://blog.csdn.net/nutian/archive/2009/06/16/4269523.aspx
WAP PUSH又叫做服務資訊或推入資訊,是一種特殊格式的短信。
WAP就像網際網路,是一個内容豐富的網絡,使用者如何找到自己喜歡的站點,如何在一個站點中找到自己喜歡的業務,往往需要花上很長的一段時間。而WAP PUSH可以将某一站點或某一業務的連結通過短信發送到支援WAP PUSH功能的手機上,這樣您隻需要閱讀這條短信(服務資訊),打開短信中的連結,就可以直接通路業務了。是以,WAP PUSH實作了短信和WAP業務的結合,節省了您尋找業務的時間,友善您直接找到并使用自己喜歡的業務。PUSH資訊無論是否被使用者打開,都會保留在手機的"推入收件箱"内,使用者可以重複打開。
wap push 的意思是帶連接配接的短信,它可以引導你進入wap的網站。它是通過sp的網關發出來的,用軟體和移動的接口。
WAP PUSH的特點優勢
省去使用者在手機上輸入網址的不友善。如有些網址字數多,輸入很麻煩。
适合用來做針對性的促銷、廣告宣傳。如您可以直接講某個活動資訊的頁面位址、某個優惠券的頁面位址、某個産品的頁面位址直接推送到使用者手機。
使用者強制性接受,到達率達到100%
使用者打開率高收到WAP-PUSH後打開的比例分布:
據網際網路權威研究機構艾瑞咨詢研究,收到WAPPUSH後,有16.6%的網民一般都會打開,看清說明文字後打開的比例達到了53.6%。而基本不打開或直接删除的比例分别為11.4%和18.6。可以發現,WAPPUSH推送服務的接受程度是很高的,尤其是随着WAPPUSH發送的文字說明和介紹對使用者是否打開起了比較重要的作用,大部分使用者是在看清了文字說明之後才打開WAPPUSH的。
2006年以後出産的手機幾乎全部支援接收WAPPUSH
簡單易懂的解釋:
wap push是一種特殊的二進制短信
普通短信:在你手機上是一段文字,不是文盲的都認識
wap push:在你手機上是一個網址外加一段文字,通過這個網址你就可以直接通路相應的wap站點
如何關閉接收push資訊?
一般情況下,在手機上選擇:網際網路--〉浏覽器--〉浏覽器設定--〉服務資訊設定,點為關閉即可。
目前的發送狀況
從今年起,中國移動開始逐漸限制各個SP商的push資訊群發,從理論上來講,幾乎所有的SP商都發不了push資訊。
WAP Push的技術
WAP Push是要将網際網路上的資訊主動推送到使用者的手機等移動終端上。達到這個目标需要解決如下兩個問題:
(1)網際網路伺服器如何主動地連通位于無線網絡上的手機,通信問題。
(2)網際網路上的資訊内容采用什麼格式,資料表現問題。
WAP論壇(現在歸到OMG)在2000年時就提出了WAP1.2規範,相比WAP1.1增加的主要内容就是WAP Push的整個體系。 WAP Push分為Confirmed Push,即需要對方回送接收确認資訊的Push,和無連接配接模式的Push,即發送出去後,是否收到不管了。
整個WAP架構包括PI(Push Initiator,即網際網路的伺服器)、PPG(Push Proxy Gateway,一般為WAP網關)、移動終端三大部分。PI到PPG之間是基于HTTP的PAP(Push Access Protocol)協定(PPG和PI互為HTTP伺服器),PPG到移動終端之間是OTA(Over-The-Air)協定。
基本流程是網際網路的伺服器将要發送的資訊内容,采用XML表現形式,通過PAP協定發送給WAP網關。這裡發生了很多細節過程後(計費、SP辨別、通路控制、資訊内容二進制壓縮編碼、終端發現、終端能力特性檢查、終端位址解析),通過OTA協定将内容發送到手機上(2.0以下的規範用OTA- WSP,2.0以上的規範用OTA-HTTP)。
這是很理想的目标,可是在目前全球所有營運商部署的無線網絡那裡,實作這個基本都不現實。第二代無線網絡GSM/CDMA95A是基于信令的電路交換的通信技術,并不支援IP協定,能進行WAP這樣資料業務,需要先在信令協定棧上借用modem撥号機制封裝成IP/PPP包。WAP網關通過信令網找到手機并建立WSP會話的連接配接,是不可能實作的。第二代半過渡性的網絡技術GPRS/CDMA1.x理論上是可以讓手機永久線上,擁有固定的IP位址,可現實并不是如此。空中信道的有限容量、計費管理、網絡容量等方面都不成熟,是以,移動終端要像一台伺服器那樣,接收并處理WAP網關随時發起的主動連接配接請求,隻能等到第三代無線網絡技術全面普及的那一天了。
正是由于上述局限,目前,在世界各地,所有營運商和所有方案供應商那裡,都采用SMS方式承載OTA側的推送。SMS是信令通道上傳輸的,處于網絡覆寫中的手機通過BTS、BSC、MSC與短信中心随時随地可以互相通信。是以,作為這種伺服器到終端的資訊傳輸載體,SMS是最适合不過了。
中國移動和中國聯通都對SP提供了WAP Push接口,他們是通過WAP網關與短信中心的接口用SMS發送到手機上。既然他們也是用短消息來實作的,那麼,如果我擁有一個短信發送通道,從理論上說,自然而然也可以發送WAP Push。
下面要說的就是WAP Push的資訊表現形式問題。
WAP Push的内容有兩種,一種是SI,service indication;另一種 SL,service loading。這兩種内容類型的目的都是發送URL連結到手機上。SI是以異步方式發送一個通知、警示、提醒等資訊到手機上,使用者會看到螢幕上顯示這條通知文字内容,然後,提示你是否去那個頁面,如果去,手機将激活為WAP浏覽器,打開這個連結,浏覽其内容。SL則是直接發送一個 URL連結到手機上,手機不會給使用者任何提示,自動地啟動WAP微浏覽器,下載下傳這個URL對應的内容,顯示在手機上。讓人覺得好像是推送了一個頁面下來了似的。MMS就是利用這個機制實作的。
至于為什麼不直接發送一個基于XML的WML頁面(包括多媒體資訊圖像、聲音),WAP論壇的規範設計者找了一通理由,說這種方式存在很多弊病,是以,WAP Push就沒有直接推送内容的規範了。我想未來3G肯定會有這樣的規範出台。
目前大部分手機并沒有實作對SL的支援,近幾年新出的WAP浏覽器版本高點的手機基本都支援SI(OEM Openwave微浏覽器的手機如果 WAP Browser版本在4.0以上的都支援)。國産手機基本都是貼牌生産,核心全是國外的,是以,國内手機技術現狀基本跟歐洲一樣的格局。
中國聯通的WAP網關和WAP Push業務都是有Openwave提供,Openwave出于對市場的壟斷和控制,在CDMA手機上的 WAP Push支援非常封閉保守,有些接口沒有遵循國際規範,通過聯通的短信中心發送WAP Push的SI消息到CDMA手機上,隻能借用聯通和 OpenWave提供的接口标準。
二、WAP PUSH經驗總結(overSMS) http://kb.cnblogs.com/a/1057468/ (WAP 建構 Java 應用 和 WAP經驗總結)
注:内容很多,有時間應該看看,這裡隻把wap push的部分拿了過來
sms實作wap push的方法和格式(轉載)
wap push格式
00 ’SMSC Len。用手機上設定短信中心号碼
51 ’submit type
00 ’SMS_TP_Message_Reference type
0B ’對方電話的長度
A1 ’Number type
13175639296F6 ’電話号碼:13573629696
00 ’SMS_TP_PID
F5 ’SMS DCS
A744 ’SMS available date
0B05040B8423F00003030101 ’Wap Push Header 1
29060603AE81EA8DCA 'Wap Push header 2
02
05 '-//WAPFORUM//DTD SI 1.0//EN
6A 'UTF-8
00
45 '<si>
C6 '<indication
08 '<action=signal-high>
0C 'href="http://
03 '字元串開始
687474703A2F2F3231382E35392E3133382E35343A32303030 'URL: http://218.59.138.54:2000/
00 'URL 字元串結束
01 '>
03 '内容描述字元串開始
'這裡就是顯示給使用者的内容,用utf-8編碼。
9A6C5EF6671D '内容描述:馬延朝
00 '内容描述字元串結束
01 '</indication>"
01 '</si>
可以隻能顯示很少的漢字,請高手指點怎麼分包發送更多的漢字?
一下方法是經過驗證的。
TrxID =一個随機數
fullStr = "0605040B8423F0" & TrxID & "0601AE"
fullStr = fullStr & "02056A0045C6080C03"
fullStr = fullStr & StrToHex(TheURL, 2)
fullStr = fullStr & "001103" & "0102"
fullStr = fullStr & "40494400080AC307" & Format(Now, "yyyymmddhhmmss")
fullStr = fullStr & "10C304" & "20990101" & "0103"
fullStr = fullStr & StrToHex(MServiceName, 2) & "000101"
分段發送的
例如 http://blog.csdn.net/eason_cou/archive/2007/05/11/wap.gd.monternet.com/?userType=B&serviceID=04020028 提示資訊:神秘激情地帶,江湖兒女情長神秘激情地帶,江湖兒女情長神秘激情地帶,江湖兒女情長
第一包:
0B05040B8423F0000355020155060403AE81EA02056A0045C60C037761702E67642E6D6F6E74657
26E65742E636F6D2F3F75736572547970653D42267365727669636549443D303430323030323800
070103E7A59EE7A798E6BF80E68385E59CB0E5B8A62CE6B19FE6B996E584BFE5A5B3E68385E995BF
E7A59EE7A798E6BF80E68385E59CB0E5B8A62C
第二包:
0B05040B8423F00003550202E6B19FE6B996E584BFE5A5B3E68385E995BFE7A59EE7A798E6BF80E6
8385E59CB0E5B8A62CE6B19FE6B996E584BFE5A5B3E68385E995BF000101 ,解釋可參考WDP WSP,我就不具體說了
0B是頭的總長度
05040B8423F0是固定的,表示接下來是一個WAP PUSH
分包的關鍵是0003550201,對應GSM 03.40裡9.2.3.24.1,00表示是Concatenated Short Messages,03是長度,55是reference number,樓主在這兒固定編碼會有問題的,如果同時下發兩條這樣的多包短信給同一個手機,手機就區分不開了,02表示分成2個短信發送,01是目前包的序号。
一個擴充包wappush包是這麼構成的
WDP + WSP + SI/SL
如果長度超常(短信一個包的Content不要超過140)
就要分解成
WDP1 + (WSP+SI/SL)的part 1
WDP2 + (WSP+SI/SL)的part 2
...
WDPN + (WSP+SI/SL)的part N
如單包
WDP: 06 05 04 0B 84 23 F0
WSP: ...
SI/SL:...
雙包是
第1包
WDP: 0B 05 04 0B 84 23 F0 00 03 01 02 01
Part1: ...
// 00 - UDH IE Tag
// 03 - UDH SAR IE Length
// 01 - Refrence
// 02 - Total Packet
// 01 - Current Packet
第2包
WDP: 0B 05 04 0B 84 23 F0 00 03 01 02 02
Part2:...
WDP參考相關文檔。
=====================================================
首先,構造一個Push消息體:
02
05 '-//WAPFORUM//DTD SI 1.0//EN
6A 'UTF-8
00
45 '<si>
C6 '<indication
08 '<action=signal-high>
0C 'href="http://
03 '字元串開始
這裡就是url從" target="_blank" rel="external nofollow" http://"以後的那部分的每個字元的ASCII碼
00 '字元串結束
0A 'created=
C3 '時間
07 '7個位元組,也可以是04,下面就隻需要年月日就可以了
20 03 01 01 00 00 00 '年,月,日,時,分,秒,格式如何一看就明白吧。
10 'si_expires=
C3 '時間
07 '跟上面一樣
20 04 01 01 00 00 00
01 '>
03 '字元串開始
這裡就是顯示給使用者的内容,用utf-8編碼。
utf-8編碼,英文字元直接用ascii碼;中文如果unicode是(二進制)abcdefgh ijklmnop,
那麼utf-8就會變成1110abcd 10efghij 10klmnop
00 '字元串結束
01 '</indication>"
01 '</si>
有了Push消息體之後,需要在前面增加一個Push PDU
81 'transaction id (connectionless WSP)
06 'pdu type (06=push)
06 'Headers len
03 AE 81 EA 'content type: application/vnd.wap.sic; charset=utf-8
8D 'content-length
XX '這裡就是Push消息體的長度。如果消息體長度小于128,那麼就要加上128。例如是93個位元組,那麼需要填入DD
'至于大于127怎麼處理,按照協定好像應該是這樣,例如原來的二進制abcdefgh,那麼就要弄成兩個位元組:
'1000000a 1bcdefgh,但是嘗試還沒成功
在然後,還要在前面增加一個UDH
06 'User Data Header Length (6 bytes)
05 'UDH Item Element id (Port Numbers)
04 'UDH IE length (4 bytes)
0B 84 'destination port number
23 F0 'origin port number
如果所有這些加起來大于140個位元組,那麼就需要修改UDH頭,分成兩條短消息串聯。但是沒有嘗試成功。
發送的時候,udhi=1,pid=0,dcs=4
Nokia 3650/7650肯定OK,motorola t720肯定ok,siemens 3118,3618肯定不行,其他的還沒嘗試。
同樣的技術可以用來發送mms通知、fundown的鈴聲圖檔。
需要解決的問題:長于127位元組/兩條短信的時候該怎麼辦。
另轉載 Wap push over sms 實踐
通過短信進行點對點的WAP PUSH,本質上來說應該是發送一個wap頁面(WBXML)到接收方,裡面含有一段文字和一個url連結。
在發送端采用PDU模式發送,編碼是UCS2。
整個發送的包大部分内容都是固定的,隻需要對幾個地方根據希望發送的内容進行一下替換即可。
我參考的例子是這樣的,隻用說明中紅色的部分是需要變化的:
0051000BA13108086406F600F5A7850B05040B8423F0000303010129060603AE81EA8DCA02056A00
45C6080C033231312e3133362e3135332e33302f776170707573682f70757368496e6465782e6a737
03f7075736849643d3035303531313134313630353231000103E8AFB7E782B9E587BBE4BBA5E4B88B
E993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101
00 SMSC 位址資訊的長度 00表示用手機上設定短信中心号碼,PDU 串的“SMSC 址格式”段和“SMSC 位址”段将省去
51 基本參數(TP-MTI/VFP) 不要求發送回複
00 消息基準值(TP-MR)
0B 對方電話的長度
A1 目标位址格式 A1表示為國内格式
3108086406F6 目标位址,補‘F’湊成偶數位後奇偶位互換 (因為手機号碼是11位,需要補一個F,再将奇偶位互換,比如12345678901需要變成2143658709F1)
00 協定辨別(TP-PID) 是普通GSM 類型,點到點方式
F5 使用者資訊編碼方式 (TP-DCS)
A7 有效期(TP-VP)
85 使用者資訊長度(TP-UDL) (此處是從下面的0B開始所有的位元組數/2對應的十六進制數)
0B WAP PUSH頭部的總長度
05040B8423F0表示接下來是一個WAP PUSH
00 表示是Concatenated Short Messages
03 長度
03 reference number
01 表示分成1個短信發送
01 目前包的序号
29060603AE81EA8DCA WSP
02 标記位
05 -//WAPFORUM//DTD SI 1.0//EN
6A UTF-8
00 标記開始
45
C6
08
0C href=\"http://
03 字元串開始
3231312e3133362e3135332e33302f776170707573682f70757368496e6465782e6a73703f7075736
849643d3035303531313134313630353231 URL (編碼過的URL,不帶http://)
00 URL 字元串結束
01 >
03 内容描述字元串開始
E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字元串 (編碼過的文字内容)
00 内容描述字元串結束
01
01
AT指令發送時:
at+cmgf=0 //設定發送為二進制模式
OK
at+cmgs=93 //十進制的數字,值為 (上面生成的一大串的位元組數/2)-1,還沒搞清為啥要減一
> 0051000BA1。。。。。。。(就是那一大串了) Ctrl+Z
+CMGS: 14
OK
發送成功
三、WAPPUSH實作說明
It has been shown in this section that the MMS notification is conveyed over the SMS bearer or alternatively over a data connection(e.g.GSMdatacon-nection or GPRS) if one had previously been established by the MMSclient(e.g.message submission or message retrieval).
根據這句話,還有我通過手機收發短信的觀察,一部分手機可能不是通過sms方式來實作的。因為sms肯定是不需要gprs聯網對吧,但觀察中發現在發給自己彩信的過程中,發送時GPRS連接配接,發送結束,斷開GPRS連接配接,然後在收到彩信之前還有一次短暫的連接配接GPRS的過程。由此現象推斷,這個m-notification-ind就是在這個時候發送的,而且是通過gprs,也就是wap發送的。至于為什麼是通過wap協定。理由如下:在抓取的完整的收發過程資料包中(抓的tcp/ip資料包),隻有收發和發送确認資料包,而沒有通知消息的資料。由此判斷通知消息是通過wap協定,而不是whttp推送的。