簡體   English   中英

Firebase Unity:如何處理沒有互聯網連接的情況

[英]Firebase Unity: How to handle no internet connection situations

我想做的事

我有一個Unity的小游戲,我在firebase實時數據庫中存儲了一個用戶分數,以便稍后顯示排行榜,當用戶第一次進入游戲時,我也會詢問用戶名並用deviceId保存(用於識別設備)。 所以現在我想處理當用戶沒有連接到互聯網時的情況,我想將該數據存儲在設備中,當用戶獲得連接或再次進入游戲時,我將更新 firebase 實時數據庫中的數據。

我的問題是什么

這里的問題是 firebase 沒有拋出任何沒有連接的異常,它只是一直嘗試連接到互聯網,直到有連接。 您可能會建議在用戶進入游戲時檢查互聯網連接,但我也想在用戶開始連接互聯網並假設在游戲期間用戶將失去互聯網的情況下處理它,如果發生這種情況我想如上所述,將數據存儲在設備中。 所以我需要捕捉沒有互聯網連接的情況才能在設備中存儲數據。

我試過的

1)

DatabaseReference connectedRef = FirebaseDatabase.DefaultInstance.GetReference(".info/connected");
    connectedRef.ValueChanged += (object sender, ValueChangedEventArgs a) => {
    bool isConnected = (bool)a.Snapshot.Value;
    Debug.Log(isConnected);
};

當用戶在游戲過程中失去互聯網連接時不會觸發,所以我無法捕捉到沒有互聯網連接異常

2)

Task timeoutTask = Task.Delay(1000);
Task firebaseConnection = await database.Child("users").GetValueAsync();
if (await Task.WhenAny(firebaseConnection, timeoutTask) == firebaseConnection) {
    Debug.Log("timeout");
} else {
    Debug.Log("completed");
}

我認為在 firebase 連接上設置超時將是目前唯一的解決方案,但這也不起作用Debug.Log("timeout"); 沒有互聯網連接時從不登錄。

我一直在為此尋找解決方案,只找到了那些似乎可行的 2 個答案,但沒有運氣,我沒有想法,不知道如何解決這個問題。 期待您的幫助,謝謝。

編輯:

以下代碼我的機器上運行於 MacOS 上 Unity SDK 6.15.1 和 6.13 的編輯器中:

FirebaseDatabase.DefaultInstance.GetReference(".info/connected").ValueChanged += HandleConnectedChanged;
FirebaseDatabase.DefaultInstance.GetReference(".info/serverTimeOffset").ValueChanged += HandleServerTimeOffsetChanged;
private void HandleServerTimeOffsetChanged(object sender, ValueChangedEventArgs e)
{
    Debug.Log($"Offset: {e.Snapshot.Value}");
}

private void HandleConnectedChanged(object sender, ValueChangedEventArgs e)
{
    Debug.Log($"Connected: {e.Snapshot.Value}");
}

雖然輸入“無連接”state 可能需要一些時間(例如,當您關閉 WiFi 時它不會立即觸發),但會立即響應GoOffline()GoOnline

總結評論:

".info/connected"在 iOS 和 Android SDK 中實現,因此在設備上可用。 在 Unity 編輯器中進行測試時,使用C++ 編寫的平台特定后端 SDK的重新實現,它沒有完全實現".info/connected"等特殊節點(截至 6.15.1)。 要測試與當前連接的實時數據庫 state 相關的邏輯,您必須部署到物理設備。

此外,嘗試以一種主要依靠ValueChanged讀取數據和RunTransaction寫入數據的方式設計您的游戲。 這將為您提供在各種網絡條件下的彈性,並幫助您在競爭條件下加強您的游戲,如果您需要它們以進行快速測試,這些將在 Unity 編輯器中工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM