1. 程式人生 > 實用技巧 >如何用Nearby Service讓你的遊戲實現近距離聯機

如何用Nearby Service讓你的遊戲實現近距離聯機

  複雜的自組網,偶發的長尾時延,無法連線網路的場景,這些問題是否制約你的遊戲盈利? 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實現如下相關功能:

  1. 本地多人遊戲:自組網,提供低延時(小於50ms)、穩定可靠的傳輸體驗。
  2. 離線檔案傳輸:無需流量,可達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
原作者:趙照