BlackBerry開(kāi)發(fā)連接HTTP或Socket的五種方式
本文和大家重點(diǎn)學(xué)習(xí)一下BlackBerry開(kāi)發(fā)連接HTTP或Socket的五種方式,在BlackBerry開(kāi)發(fā)中,網(wǎng)絡(luò)相關(guān)的設(shè)置有時(shí)候比較令人困惑,下面是一篇關(guān)于網(wǎng)絡(luò)設(shè)置編程的文章,請(qǐng)看本文詳細(xì)介紹。
BlackBerry開(kāi)發(fā)連接HTTP或Socket的五種方式
BlackBerry的API提供了五種方式來(lái)進(jìn)行HTTP或者socket連接,包括:
1,BlackBerryEnterpriseServer(BES)方式
這種方式通過(guò)使用BES的BlackBerryMDSServices來(lái)進(jìn)行網(wǎng)絡(luò)連接,BlackBerryMDSServices負(fù)責(zé)處理所有的瀏覽器請(qǐng)求或者連接請(qǐng)求、并負(fù)責(zé)數(shù)據(jù)加密,這是黑莓手機(jī)的默認(rèn)連接方式,如下:
例1:(HttpConnection)Connector.open("http://www.testserver.com");
以上代碼會(huì)自動(dòng)將BlackBerryMDSServices作為它的默認(rèn)連接路徑。實(shí)際開(kāi)發(fā)中,如果要確保應(yīng)用程序使用usesBlackBerryMDSServices作為它的連接路徑,需要在URL最后加上參數(shù)“deviceside=false”,這也是我們推薦的方式,如下:
例2:(HttpConnection)Connector.open(“http://www.testserver.com;deviceside=false”);
2,BlackBerryInternetServie方式
這種方式是為第三方提供的連接接口,它對(duì)數(shù)據(jù)不進(jìn)行加密,用戶可以通過(guò)使用HTTPS和SSL來(lái)進(jìn)行安全的連接。注:目前僅對(duì)加入了BlackBerryAllianceProgram的第三方開(kāi)放合作伙伴開(kāi)放,詳情參考:http://na.blackberry.com/eng/partners/alliance.jsp
3,DirectTCP方式
這種方式允許在沒(méi)有使用BlackBerryMDS的黑莓手機(jī)上直接TCP連接。為了能啟用directTCP方式,用戶需要在手機(jī)的“選項(xiàng)-高級(jí)選項(xiàng)-TCP/IP”中設(shè)置APN,以及相應(yīng)的用戶名和密碼。
注1:運(yùn)行在iDEN網(wǎng)絡(luò)上的黑莓手機(jī)(包括6510、7510、7520和7100i),如果不指定deviceside參數(shù)(如例1),默認(rèn)的連接是directTCP;非運(yùn)行在iDEN網(wǎng)絡(luò)上的其他黑莓手機(jī),如果不指定deviceside參數(shù),默認(rèn)的連接是BlackBerryMDS。
注2:如果連接時(shí)BlackBerryMDS不存在,黑莓手機(jī)也會(huì)自動(dòng)采用directTCP方式。
因此,如果要將directTCP作為黑莓手機(jī)的默認(rèn)連接方式,我們建議在URL中加入“deviceside=true”參數(shù),如下:
例3:(StreamConnection)Connector.open("socket://testserver:600;deviceside=true");
4,Wi-Fi
如果需要在Wi-Fi上創(chuàng)建網(wǎng)絡(luò)連接,不需要在應(yīng)用程序中考慮特別的底層邏輯,可以在URL中加入?yún)?shù)“interface=wifi”就能實(shí)現(xiàn)Wi-Fi連接,如下:
例4:(StreamConnection)Connector.open(“socket://testserver:600;interface=wifi”);
5,WAP1.x
并不是所有的移動(dòng)運(yùn)營(yíng)商都支持通過(guò)WAP網(wǎng)關(guān)進(jìn)行連接的,所以如果要?jiǎng)?chuàng)建WAP連接,開(kāi)發(fā)者需要和移動(dòng)運(yùn)營(yíng)商聯(lián)系,獲取是否提供這種支持、并且獲取他們的WAP網(wǎng)管參數(shù)。
以下是一個(gè)基于WAP網(wǎng)關(guān)進(jìn)行HTTP連接的例子:
例5:(HttpConnection)Connector.open("http://wap.google.com;WAPGatewayIP=127.0.0.1;WAPGatewayAPN=carrier.com.gprs");
注:其中WAPGatewayIP和WAPGatewayAPN這兩項(xiàng)參數(shù)必須指定,參數(shù)之間用“;”隔開(kāi),以下是所有的WAP參數(shù)列表,實(shí)際開(kāi)發(fā)時(shí)請(qǐng)根據(jù)運(yùn)營(yíng)商提供的信息決定哪些參數(shù)需要設(shè)置。
6.WAP2.0
如果要連接WAP2.0的網(wǎng)關(guān),需要在連接時(shí)指定servicerecord、以及UID。以下代碼說(shuō)明了WAP2.0的連接時(shí)如何工作的:
例5:
- ServiceBookServiceBooksb=ServiceBook.getSB();
- ServiceRecord[]records=sb.findRecordsByCid("WPTCP");
- Stringuid=null;
- for(inti=0;i<records.length;i++)
- {
- //Searchthroughallservicerecordstofindthe
- //validnon-Wi-Fiandnon-MMS
- //WAP2.0GatewayServiceRecord.
- 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)
- {
- //openaWAP2connection
- Connector.open(_url+";ConnectionUID="+uid);
- }
- else
- {
- //Consideranothertransportoralternativeaction.
- }
用戶常見(jiàn)的問(wèn)題:
1,為什么基于WAP連接的應(yīng)用在未激活BES的手機(jī)上測(cè)試沒(méi)問(wèn)題,在激活BES的手機(jī)上連接不上?
答:在連接時(shí)采用的是本文例1的連接方式。解決方案是改為采用本文例5的連接方式。
2,通過(guò)Wi-Fi如何連接到BES,BIS?可以直接連接到其他目的地址么?
答:Wi-Fi可以通過(guò)BBI連接到BES和BIS,也可以通過(guò)在Wi-Fi上配置VPN直接連接到BES。也可以繞開(kāi)BBI、BES和BIS直接連接到其他server。
【編輯推薦】