復雜的自組網,偶發的長尾時延,無法連接網絡的場景,這些問題是否制約你的游戲盈利? HMS Nearby Service(近距離通信服務)提供了便捷的近距離P2P直連通信,可為你的游戲帶來:

Nearby Service在游戲場景下具有如下技術優勢:
- 綜合使用藍牙、Wi-Fi進行節點發現。你的游戲集成之后,可以自動搜索附近打開游戲的用戶,無需用戶手動打開熱點進行連接。
- 自動選擇最優的組網和傳輸方式。支持點對點、星型、網狀多種拓撲,支持Wi-Fi P2P,無需連接到同一個AP。
- 使用華為自研傳輸協議,高帶寬,低延時,穩定可靠。
應用開發
我們在GitHub上找到一款名為《Snake Land》的開源貪食蛇游戲, 以此款游戲為例子,集成Nearby Service作為游戲的網絡通信管道,實現聯機對戰功能。《Snake Land》原先使用開源框架Kryonet實現網絡通信層。Kryonet只支持連接同一路由器的手機設備之間互聯。集成Nearby Service后,手機連接不同Wi-Fi、不連接Wi-Fi、或者在沒有網絡等場景下,都可以與附近的手機聯機,實現真正的“靠近即連”。
開發准備
集成Nearby Service之前,需要完成以下准備工作
- 配置AppGallery Connect
- 開通近距離通信服務
- 集成SDK
- 配置混淆腳本
詳細信息請參考開發准備。
如何使用Nearby Service
我們首先來看一下Kryonet與Nearby Service的接口對比:
| Kryonet | |
|---|---|
| 開始廣播 | bind |
| 開始掃描 | discoverHost |
| 請求連接 | connect |
| 連接成功 | connected |
| 連接斷開 | disconnected |
| 收到數據 | received |
| 發送數據 | Send |
Nearby Service和 Kryonet的接口是一致的,將Kryonet的接口替換為Nearby Service的接口,並根據參數類型的差異進行一些參數轉換工作。
權限申請
因為Nearby Service會用到藍牙發現,WIFI熱點創建等操作,因此需要向用戶顯示申請一些權限。代碼如下:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
編譯、加載、調試
完成上述業務代碼的補全之后,可以進行編譯,生成apk,安裝到兩台Android 8以上的安卓手機並運行。詳細開發步驟請參考Codelab。
成果展示

一方點擊“Creat a Game”,另一方點擊“Join a Game”,即開始互相發現。發現成功后,主機點擊“GO!”按鈕開始游戲。滑動屏幕控制綠色小蛇轉向,獲取更多食物,小蛇頭部撞到障礙即失敗。
如果你對實現方式感興趣,可以在Github上下載源碼:
https://github.com/HMS-Core/hms-nearby-demo/tree/master/NearbyGameSnake。
結后語
基於Nearby Connection, 可以給你的APP實現如下相關功能:
- 本地多人游戲:自組網,提供低延時(小於50ms)、穩定可靠的傳輸體驗。
- 離線文件傳輸:無需流量,可達80MB/S的傳輸速度。
更詳細的開發指南參考華為開發者聯盟官網:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/introduction-0000001050040566
原文鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201303654965850166&fid=18
原作者:趙照
