iOS和Android的點對點連線

發表於2014-05-02

Multipeer connectivity是iOS 7推出的一個新框架,它是一個使附近裝置通過Wi-Fi網路、P2P Wi-Fi以及藍芽個人區域網進行通訊的框架。互相連結的節點可以安全地傳遞資訊、流或是其他檔案資源,而不用通過網路服務。Multipeer connectivity框架封裝了多種技術,即WiFi和藍芽,這兩者均可以用於在iOS裝置之間的建立連線。

對於Android來說,有很多不同的選擇可以建立本地點對點連線。最突出的是,WiFi Direct(一個開放的標準)和藍芽都是開放和可用的。然而這些技術在iOS平臺上都是不可用的,這使得在沒有中央例項(比如WiFi AP)的前提下,兩者在高頻寬本地連線方面完全不相容。這樣問題就來了。根據地理區域和目標受眾的人口分佈,推出一個Android或者iPhone-only的產品可能會是有風險的或者是愚蠢的。問題是:有什麼替代方案能解決這個問題嗎?

NFC是不可能解決的,因為它在iOS上是不可用的。唯一的選擇只有Bluetooth LE (低功耗藍芽)。有趣的是,iOS和Android都能很好的支援這項技術。Bluetooth LE除了傳統藍芽環境外,還能夠實現客戶端之間的低功率連線,如手機、伺服器(比如心率監視器)。在這種連線場景下,頻寬要求低,這就是為什麼有效負載是21位元組。沒錯,就是21位元組,不到千位元組的1.9%。當然,你可以將一個更大訊息包拆成無數個小訊息包傳送,但這並不是BLE的設計者所想要的。

Android和iOS都能作為BLE裝置的客戶端,這意味著他們能夠使用服務,訂閱資料,甚至如果伺服器允許的話,還可以提供反饋。蘋果官方文件中一個例子描述到將一個溫度控制器作為伺服器接受輸入值來設定所需的室溫。

那麼,客戶端和伺服器在概念上有什麼差別呢?伺服器是發出廣播,如WiFi接入點。客戶端能夠收聽廣播,然後瀏覽附近的伺服器。客戶端不發出廣播,只提供使用。iOS支援也作為伺服器。這意味著你可以配置你的iOS裝置來發布BLE服務,以便P2P使用BLE。不幸的是,這個特性目前並不支援Android平臺。所以目前要解決的是,每個Android裝置需要連線到一個iOS裝置來宣佈它的存在。

這麼做有黑客的嫌疑,但它是有效的方法。這種方法也有一個很大的缺點:雖然Android對iOS連線和iOS對iOS連線可用,但是Android對Android卻不行。因為直接在Android上使用不同技術將會有大量的實現可能性。可以想象,使用所有的這些技術的組合,根據不同的技術,大量的工作以及災難性的頻寬,P2P的自制程式的解決方案將是可行的。

作為參考,下表是上文提到技術的完整相容性圖表。答案取決於,這個技術對於不做任何額外努力的開發人員是否有用的。

regerhgrh4196_140501094522_1

相關文章