簡體   English   中英

Unity 登陸 anynomous android

[英]Unity sign in anynomous on android

我正在嘗試在我開發的游戲中的 android 設備上登錄 anynomous。 當我在我的 Macbook 上的 Unity 編輯器中運行游戲時,一切運行順利並且數據庫已更新。

但是當我在我的三星設備上編譯和運行它時,什么也沒有發生,它只是死機了。 有誰知道為什么? 我嘗試將 sha1 密鑰添加到我在 Firebase 上的項目的指紋中,但沒有成功。

這是代碼:

private void anonymousSignIn()
{
    auth = Firebase.Auth.FirebaseAuth
        .DefaultInstance;
    auth.SignInAnonymouslyAsync().ContinueWith(task => {
        if (task.IsCanceled)
        {
            Debug.LogError("SignInAnonymouslyAsync was canceled.");
            return;
        }
        if (task.IsFaulted)
        {
            Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
            return;
        }

        user = task.Result;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
        print("User signed in");
        removeUser();
    });
    print("Auth done");
}

private void prepareDatabase()
{
    FirebaseApp.DefaultInstance
        .SetEditorDatabaseUrl("mydatabaseadress/");
    DatabaseReference reference =
        FirebaseDatabase.DefaultInstance.RootReference;
    string userId = "Erik";
    User user = new User(userId, 24);
    string json = JsonUtility.ToJson(user);
    reference.Child("highscore").Child(userId).SetRawJsonValueAsync(json);
}

我需要在凍結點的堆棧跟蹤或 Android logcat output 來查看到底發生了什么*我推薦這個 Unity 插件來幫助解析 LogCat)。 如果不知道所有這些是如何聯系在一起的,就很難說出“凍結”在您的游戲上下文中可能意味着什么,或者哪個調用可能會導致您的問題。 我確實看到了一些可能的問題:

1) SetEditorDatabaseUrl不是必需的,我從來沒有在自己的項目中使用它。 我假設"mydatabaseadress/"是這個堆棧溢出問題的臨時值,但如果您的項目中只有一個數據庫,它也是一個不必要的潛在錯誤面。

2) removeUser可能在 Unity 中做一些工作。 因此,您應該將ContinueWith替換為ContinueWithOnMainThread (請參閱)。 這也將確保您獲得所有必要的日志記錄。

3) auth.CurrentUser將在您的游戲運行之間持續存在。 每次調用auth.SignInAnonymouslyAsync都會創建一個新用戶- 即使已經注冊了一個用戶。 您應該將您的授權碼更改為:

auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
if (auth.CurrentUser == null) {
    auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task => {

並記住在else中做任何重要的工作(例如調用removeUser() )。

4) 在您的prepareDatabase調用中,您有一個硬編碼string userId = "Erik" 如果您有這樣的數據庫規則:

{
  "rules": {
    "highscore": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

那么它總是會被拒絕。

5) 同樣,如果您在調用prepareDatabase之前沒有等待auth.SignInAnonymouslyAsync完成,默認的"auth != null"可能會自動失敗。

希望對您有所幫助!

——帕特里克

暫無
暫無

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

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