安卓手機APP開發__網絡連接性支持VPN
安卓提供了API給開發者,來創建一個虛擬的私有網絡(VPN)的解決方案.
根據這里的介紹,你能知道如何開發和測試你的針對安卓設備的VPN的客戶端.
概述
VPN允許設備為了安全地連接網絡,而沒有物理性的連接在一個網絡上.
安卓包括了一個內嵌的(PPTP 和 L2TP/IPSec)VPN客戶端,它有時也叫
legacy VPN. 安卓4.0(API級別是14)引入了API,讓APP的開發者能夠提供
他們自己的VPN解決方案.你打包你的VPN解決方案進入你的APP。開發者
通常構建一個VPN的APP,是因為如下理由之一:
提供內嵌的客戶端不支持的VPN協議
幫助用戶更容易地連接到VPN服務。
接下來解釋如何開發VPN的APP,不包括內嵌的VPN客戶端。
用戶體驗
安卓提供了一個用戶界面,幫助用戶配置和開啟和停止你的VPN解決方案。系統的用戶界面
也讓人能夠使用設備連接一個活躍的VPN連接。安卓顯示了VPN連接的如下的用戶組件:
在一個VPN的APP首次激活之前,系統顯示了一個連接請求對話框。對話框提示
用戶使用設備時確認他們信任VPN并且接受請求。
VPN的設置屏幕(設置〉網絡&互聯網〉VPN)顯示了用戶接受的連接請求的是哪一個
VPN的APP。這里有一個按鈕是配置系統選項或者是忘記VPN。
當一個連接是活躍的時候,快速配置顯示了一個信息面板。觸摸標簽,顯示一個對話框
有更多的信息和對一個鏈接的設置.
在狀態欄包括了一個VPN的圖標,來顯示一個活躍的連接。
你的APP也需要提供一個用戶界面,讓用戶使用設備來配置你的服務的選項。
例如,你的解決方案,可能需要捕捉帳戶的授權設置。APP應該顯示如下的用戶界面:
控制手動地開啟和停止一個連接。當需要的時候,總是在線的VPN能夠連接.
但是,在用戶第一次使用VPN時,允許用戶配置連接.
當服務活躍的時候,有一個非打擾的通知。通知能顯示連接狀態或者是提供網絡統計信息
的更多的內容。觸摸通知,讓你的APP來到前臺。當服務變成不活躍時,移除通知。
VPN服務
你的APP為了一個用戶連接系統網絡到一個VPN的網關。每個用戶能運行一個不同的VPN的
APP。你創建一個VPN服務,系統使用這個服務來啟動和停止你的VPN,并且跟蹤連接的狀態
你的VPN服務是從VpnService繼承下來的。
服務作為你的VPN的網絡連接的容器和它們的本地的設備的接口。你的服務的實例
調用了VpnService.Builder方法來建立一個新的本地接口。
你的APP把如下的數據從連接的設備傳到VPN的網關:
從本地的接口讀取要轉出的IP的數據包,加密它們,把它們發送給VPN網關。
從本的的接口寫入要進入的數據包(從VPN網關接收并且解密)
重要的提示信息:當和VPN的網關進行交換數據包時,你的APP必須使用強加密手段
對于一個用戶而言僅有一個活躍的服務。開始一個新的服務,自動地停止原有的服務。
添加一個服務
為了在你的APP中添加一個VPN服務,創建一個安卓服務,它是繼承于VpnService。
在你的配置文件中聲明一個VPN服務。內容如下:
使用BIND_VPN_SERVICE權限來保護服務,這樣僅有系統能綁定到你的服務。
使用"android.net.VpnService"過濾器來廣播你的服務,讓系統能找到你的服務。
這個例子顯示了你能在一個配置文件中,如何聲明一個服務:
<service android:name=".MyVpnService"android:permission="android.permission.BIND_VPN_SERVICE"><intent-filter><action android:name="android.net.VpnService"/></intent-filter>
</service>
現在,你的APP聲明了一個服務,系統能自動地根據需要啟動和停止你的APP的VPN的服務。
例如,當運行著總是在線的VPN時,系統控制著你的服務。
準備一個服務
為了準備APP變成用戶的當前的VPN服務,調用VpnService.prepare()。
如果用戶使用設備沒有對你的APP授予權限,這個方法返回一個活動的憑證,
你能使用這個憑證來開啟一個系統的活動,這個活動來向用戶請求權限。
系統顯示一個對話框,這與其它的權限對話框是類似的,例如,照相機或者
通訊錄讀取。如果你的APP已經準備好了,方法就返回一個空值。
僅有一個APP能成為當前已經準備好的VPN服務。總是要調用VpnService.prepare()方法,
因為一個用戶可能設置一個不同的APP作為VPN的服務。為了了解更多的內容,看服務生命
周期部分。