[OTA]制作OTA短信来配置手机与服务器同步
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe><div class="postText">制作OTA短信来配置手机与服务器同步编写者
日期
关键词
郑昀@ultrapower
2005-9-26
sms ota 同步 空中下载 手机 WDP WSP WBXML sync4j 同步设置
本文档讲解了OTA的概念,给出了如何发送“同步设置”的OTA短信的步骤,并附带Java编写的源代码(http://www.cnblogs.com/Files/zhengyun_ustc/SyncSettingBuilder.rar)。
空中下载(OTA)的概念
OTA的基础概念可以参考我的《实例讲解制作OTA短信来自动配置手机WAP书签》。下面简单介绍一下:
OTA,即Over The Air,国内翻译为空中下载。
OTA标准由爱立信和诺基亚共同制订。OTA涵盖了许多范围,比如Kjava中的应用程序下载也是通过OTA。我们这篇文章主要讲的是,通过短信方式空中下载同步配置信息,参考的文档是OTA_settings_general_7_0.pdf。
在
https://secure.forum.nokia.com/main/1,6566,1_47_50_10,00.html
你可以看到许多Nokia - Ericsson OTA Documents。
下载OTA Setting规范:
http://sw.nokia.com/id/3377eb33-cb1d-490e-a1cb-8735d785e1d3/OTA_settings_general_7_0.pdf
下载OTA Setting示范:
http://sw.nokia.com/id/bf5f034f-be06-4506-87b7-22788de5c316/OTA_service_settings_example_v11.pdf
规范中定义了三种Setting:
l 浏览器设置
l 浏览器的书签设置
l SyncML设置
也就是说,你通过发送短信可以帮助用户手机设置SyncSettings,从而可以让手机与服务器同步信息(如电话本、日程和记事本等)。
商业应用示范:无忧通讯录
手机无线同步服务--无忧通讯录,支持SyncML,最专业的手机号簿备份服务:
http://www.51txl.com:8080/51txl/
它提供的服务还是非常简单易用的:“无忧通讯录是一种方便使用的无线同步服务,它可以安全地将您手机上的电话簿备份到网络上。假如您的手机丢掉了、被偷或者损坏,这时您不用着急,无忧通讯录上保存有您的电话簿可立即被恢复,而且所有的操作都可方便地在无线状态下完成。”
注册它的时候,它给你的手机上发送一个短信“同步设置”,你用“存入设置”菜单命令保存这个短信到同步菜单里,这样你就可以利用这同步设置和她的服务器端做数据同步了。
我们下面具体讲解一下“同步设置”的OTA短信生成办法。
简单粗暴直奔主题
原则上,你只要看了OTA_settings_general_7_0.pdf,并参照OTA_service_settings_example_v11.pdf,就可以轻松地制作出符合规范的OTA短信。
但是,本文档的目的就是让你简单粗暴地直奔主题,运行本文档附带的源代码后,就可以制造出同步设置的短信的各个包了。
首先,你需要构造出这样的Sync Settings XML,如下所示:
Sync Settings XML
SyncSettings>
Version>1.0Version>
HostAddr>http://10.18.168.183:8080/sync4j/syncHostAddr>
Port>80Port>
RemoteDB>
CTType>text/x-vcardCTType>
CTVer>2.1CTVer>
URI>./scardURI>
Name>sync4jName>
Auth>
AuthScheme>1AuthScheme>
Username>guestUsername>
Cred />
Auth>
RemoteDB>
Name>Sync4jName>
Auth>
AuthLevel>2AuthLevel>
AuthScheme>1AuthScheme>
Username>guestUsername>
Cred />
Auth>
ConRef>
ConType>1ConType>
RefID>4jSvrRefID>
ConRef>
SyncSettings>
其次,对这个XML文档,通过以下代码转译为WBXML:
OTAMessage的构造过程
File xmlDir = new File("C:\\opt\\xml\\sync4jsyncsettings.xml");
String xml = IOTools.readFileString(xmlDir);
SyncSettingWriter writer = new SyncSettingWriter();
vWriter.addElement(writer);
XmlParser xmlp = new XmlParser(new StringReader(xml));
// 遍历XML解析
traverseXML(xmlp);
/*
* 对于Vector中的每一个Writer都做关闭动作
*/
int nIndex = 0;
for(SyncSettingWriter writerSync : vWriter)
{
nIndex++;
writerSync.close(vWriter.size(), nIndex);
System.out.println(encodeHex(writerSync.getBytes()));
}
上面的代码最后来打印出了短信二进制内容,比如:
第一个短信包:
0b0504c34cc00200030402010106060502020b81ea01016a00555803312e3000015003687474703a2f2f3231392e3233382e3136382e3138333a383038302f73796e63346a2f73796e630001520338300001544e03746578742f782d766361726400014f03322e31000156032e2f73636172640001510373796e63346a000147490331000157037a68656e6779756e0001
其中的“0201”代表共有两个短信包,这是第一个包;
第二个短信包:
0b0504c34cc00200030402024d010101510353796e63346a0001474803320001490331000157037a68656e6779756e00014d01014b4c033100015303346a53767200010101
其中的“0202”代表共有两个短信包,这是第二个包;
这样,手机收到这两个包之后,就知道按照顺序组合到一起,然后再解析了。
下面,我们来铺垫:
你要给目的手机发送一条短信,它必须是二进制格式的,这样手机才能够识别出来。
发送短信,可以通过
UltraBinarySMS
UltraBinarySMS.SendSMS sendsms = new UltraBinarySMS.SendSMS();
string strResponse = sendsms.send(content, destmobile);
发送短信,你就可以立即在手机上看到效果。
这几条短信内容差不多分为三块:
l WDP Layer的包头;
l WSP Layer的包头;
l WBXML。
同步SyncSettings XML的真正内容是用WBXML表述的。
WDP、WSP
什么是WDP和WSP呢?。
WDP即Wireless Datagram Protocol。WSP即Wireless Session Protocol。
更多信息可以参考http://www.protocols.com/pbook/wap.htm。
WAP Forum 在设计1.x版本的时候是经过深思熟虑的,但它和我们熟知和喜爱的3W协议(比如HTTP, SSL 和HTML)并不兼容。
WAP1.x堆栈被定义为五层,自底向上依次是:
u WDP (Wireless Datagram Protocol),
u WTLS (Wireless Transport Layer Security),
u WTP (Wireless Transaction Protocol),
u WSP (Wireless Session Protocol),
u WAE (Wireless Application Environment,包括 Wireless Markup Language 或 WML, 以及 WMLScript )。
每一层都和3W堆栈层面大致吻合:
n WDP->IP,
n WTP->TCP,
n WTLS->SSL/TLS,
n WSP->HTTP,
n WML->HTML。
这时你可以参考
http://www.protocols.com/pbook/images/wapstack.gif
,The OSI Model for Wireless Communication。
由于WSP相当于HTTP层,那么WSP层所肩负的职责是:
1).提供HTTP 1.1的功能和语义
2).能力协商
3).会话状态长期保存
4).会话挂起和恢复
5).可靠以及不可靠的Push的公共机制
等等。
在我们的OTA实现中,WSP Header其实就是声明两个内容:PDU type和MIME Type;至于WDP,就是声明一个端口号,并说明本数据包是整条短信的第几个包。
WBXML
WBXML,就是WAP Binary XML。
简单地说,它就是一个定义好的XML片断,可以表述出同步服务器地址、远程数据库名称、登录账号等等内容。
比如,这样一个实例:
Nokia给出的SyncSettings例子
<syncsettings><p></p></syncsettings>
<version>1.0</version>
<hostaddr>http://www.syncserver.com/sync</hostaddr>
<port>8080</port>
<remotedb><p></p></remotedb>
<cttype>text/x-vcard</cttype>
<ctver>2.1</ctver>
<uri>./Contacts?CLASS=PRIVATE</uri>
<name>Private Contact DB</name>
<auth><p></p></auth>
<authscheme>1</authscheme>
<username>james</username>
<cred>cHdk</cred><!-- Base64 coded 'pwd' -->
<remotedb><p></p></remotedb>
<cttype>text/x-vcalendar</cttype>
<ctver>1.0</ctver>
<uri>./Calendar</uri>
<name>Calendar DB</name>
<name>PIM Service</name>
<auth><p></p></auth>
<authlevel>2</authlevel>
<authscheme>1</authscheme>
<username>james</username>
<cred>Ym9uZA==</cred><!-- Base64 coded 'bond' -->
<auth><p></p></auth>
<authlevel>1</authlevel>
<authscheme>1</authscheme>
<username>bond</username>
<cred>Ym9uZA==</cred><!-- Base64 coded 'bond' -->
<conref><p></p></conref>
<contype>1</contype>
<refid>My AP</refid>
这样指明一个和服务器http://www.syncserver.com/sync进行数据同步。
很简单不是吗?
margin: 0cm 0cm 0pt; text-ind
页:
[1]