失败和成功之间距离只有1M

What you think decides everything

导航

如何通过SMS发送WAP Push

Posted on 2006-04-01 11:49  frank.net  阅读(3535)  评论(2)    收藏  举报
PUSH作为现今SP推广及今天推信息的首要方式,应该了解一下其构造!

首先,构造一个Push消息体:

02
05 "-//WAPFORUM//DTD SI 1.0//EN
6A "UTF-8
00
45 "
C6 "08 "
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 ""
01 "

有了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字节/两条短信的时候该怎么办。
 
两条短信需要有字节指明当前共有几个包,以及这个是第几个包.

OTA里面有类似的定义:
分包
如果你的短信既要设置浏览器,又要设置书签,就有可能短信内容超长,必须事先分为两个或者多个包。

《OTA_settings_general_7_0.pdf》

和《OTA_service_settings_example_v11.pdf》的例子可以很明显地看出来这一点。

每个包还按照二进制短信发出,由客户端-手机自行合并为一个,并解析。



《OTA_service_settings_example_v11.pdf》的例子中,通过WDP的包头来设置:

02代表共有两个包(Total no. of segments in datagram);

第一个短信的01代表这是第一个包(segment count);

第二个短信则是02。