WAP PUSH——服务信息
一、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从"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推送的。