BlackBerry上连接HTTP或Socket的五种方式
?
BlackBerry?的API提供了五种方式来进行HTTP或者socket连接,包括:
1,?BlackBerry Enterprise Server(BES)方式
这种方式通过使用BES的BlackBerry MDS Services来进行网络连接,BlackBerry MDS Services负责处理所有的浏览器请求或者连接请求、并负责数据加密,这是黑莓手机的默认连接方式,如下:
例1:?(HttpConnection) Connector.open("http://www.testserver.com");
以上代码会自动将BlackBerry MDS Services作为它的默认连接路径。实际开发中,如果要确保应用程序使用uses BlackBerry MDS Services作为它的连接路径,需要在URL最后加上参数“deviceside=false”,这也是我们推荐的方式,如下:
例2:?(HttpConnection)Connector.open(“http://www.testserver.com;deviceside=false”);
2,?BlackBerry Internet Servie方式
这种方式是为第三方提供的连接接口,它对数据不进行加密,用户可以通过使用HTTPS和SSL来进行安全的连接。注:目前仅对加入了BlackBerry Alliance Program的第三方开放合作伙伴开放,详情参考:http://na.blackberry.com/eng/partners/alliance.jsp
3,?Direct TCP方式
这种方式允许在没有使用BlackBerry MDS的黑莓手机上直接TCP连接。为了能启用direct TCP方式,用户需要在手机的“选项-高级选项-TCP/IP”中设置APN,以及相应的用户名和密码。
注1:运行在iDEN网络上的黑莓手机(包括6510、7510、7520和7100i),如果不指定deviceside参数(如例1),默认的连接是direct TCP;非运行在iDEN网络上的其他黑莓手机,如果不指定deviceside参数,默认的连接是BlackBerry MDS。
注2:如果连接时BlackBerry MDS不存在,黑莓手机也会自动采用direct TCP方式。
因此,如果要将direct TCP作为黑莓手机的默认连接方式,我们建议在URL中加入“deviceside=true”参数,如下:
例3:??(StreamConnection)Connector.open("socket://testserver:600;deviceside=true");
?
4,?Wi-Fi
如果需要在Wi-Fi上创建网络连接,不需要在应用程序中考虑特别的底层逻辑,可以在URL中加入参数“interface=wifi”就能实现Wi-Fi连接,如下:
例4:(StreamConnection)Connector.open(“socket:// testserver:600;interface=wifi”);
5,?WAP 1.x
并不是所有的移动运营商都支持通过WAP网关进行连接的,所以如果要创建WAP连接,开发者需要和移动运营商联系,获取是否提供这种支持、并且获取他们的WAP网管参数。
以下是一个基于WAP网关进行HTTP连接的例子:
?例5:?(HttpConnection)Connector.open("http://wap.google.com;WAPGatewayIP=127.0.0.1;WAPGatewayAPN=carrier.com.gprs");
注:其中WAPGatewayIP?和WAPGatewayAPN这两项参数必须指定,参数之间用“;”隔开,以下是所有的WAP参数列表,实际开发时请根据运营商提供的信息决定哪些参数需要设置。
Parameter
Description
WapGatewayIP
IP address of the gateway.
WapGatewayAPN
APN for General Packet Radio Service (GPRS) networks only. For testing purposes, you can use rim.net.gprs
WapGatewayPort
Gateway port value. If port 9203 is specified, Wireless Transport Layer Security (WTLS) is used unless?WapEnableWTLS=false?is specified.
WapSourceIP
IP address of the source.
WapSourcePort
Source port value.
TunnelAuthUsername
User name for APN session, when Password Authentication Protocol (PAP) or Challenge Handshake Application Protocol (CHAP) authentication is used.
TunnelAuthPassword
Password for APN session, when PAP or CHAP authentication is used.
WapEnableWTLS
Explicitly turns on or turns off WTLS. If this parameter is not specified, WTLS is used by default for connections to port 9203.
?
?
?
?
?
?
?
?
?
?
?
?
?
?
6.?WAP 2.0
如果要连接WAP2.0的网关,需要在连接时指定service record、以及UID。以下代码说明了WAP2.0的连接时如何工作的:
例5:
ServiceBook sb = ServiceBook.getSB();
ServiceRecord[] records = sb.findRecordsByCid("WPTCP");?
String uid = null;?
for(int i=0; i < records.length; i++)?
{
????//Search through all service records to find the?
????//valid non-Wi-Fi and non-MMS?
????//WAP 2.0 Gateway Service Record.
????if (records[i].isValid() && !records[i].isDisabled())?
????{
????????if (records[i].getUid() != null && records[i].getUid().length() != 0)?
????????{
????????????if ((records[i].getUid().toLowerCase().indexOf("wifi") == -1) &&
??????????????? (records[i].getUid().toLowerCase().indexOf("mms") == -1))
????????????{
????????????????????uid = records[i].getUid();?
????????????????????break;
????????????}
????????}?
????}
}
if (uid != null)?
{
????//open a WAP 2 connection
????Connector.open(_url + ";ConnectionUID=" + uid);
}
else
{
????//Consider another transport or alternative action.
}
?
用户常见的问题:
1,?为什么基于WAP连接的应用在未激活BES的手机上测试没问题,在激活BES的手机上连接不上?
答:在连接时采用的是本文例1的连接方式。解决方案是改为采用本文例5的连接方式。
2,?通过Wi-Fi如何连接到BES,BIS?可以直接连接到其他目的地址么?
答:?Wi-Fi可以通过BBI连接到BES和BIS,也可以通过在Wi-Fi上配置VPN直接连接到BES。也可以绕开BBI、BES和BIS直接连接到其他server。