Android 安卓上的anynomous统一签名

Android 安卓上的anynomous统一签名,android,firebase,unity3d,firebase-authentication,Android,Firebase,Unity3d,Firebase Authentication,我正在开发一款游戏,尝试在我的android设备上以任何方式登录。当我在Macbook上的Unity编辑器中运行游戏时,一切都很顺利,数据库也在更新 但当我在我的三星设备上编译并运行它时,什么也没发生,它只是冻结了。有人知道为什么吗?我尝试将sha1密钥添加到我在Firebase上的项目的fingeprints中,但没有成功 代码如下: private void anonymousSignIn() { auth = Firebase.Auth.FirebaseAuth .

我正在开发一款游戏,尝试在我的android设备上以任何方式登录。当我在Macbook上的Unity编辑器中运行游戏时,一切都很顺利,数据库也在更新

但当我在我的三星设备上编译并运行它时,什么也没发生,它只是冻结了。有人知道为什么吗?我尝试将sha1密钥添加到我在Firebase上的项目的fingeprints中,但没有成功

代码如下:

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输出点进行堆栈跟踪,以查看到底发生了什么*我建议帮助解析logcat)。如果不知道所有这些是如何联系在一起的,就很难判断“冻结”在游戏上下文中的含义,或者哪个调用可能会导致您的问题。我确实看到了一些可能的问题:

1)
SetEditorDatabaseUrl
不是必需的,而且我从来没有在自己的项目中使用过它。我假设
“MyDatabaseAddress/”
是这个堆栈溢出问题的临时值,但如果您的项目中只有一个数据库,那么它也是一个不必要的潜在错误表面

2)
removeUser
可能正在Unity中执行某些工作。因此,您应该将
ContinueWith
替换为
ContinueWithOnMainThread
(请参阅)。这也将确保您获得所有必要的日志记录

3)
auth.CurrentUser
将在游戏的两次运行之间保持。每次调用
auth.signinanoymouslyasync
都将创建一个新用户,即使用户已经注册。您应该将身份验证代码更改为:

auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
if (auth.CurrentUser == null) {
    auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task => {
并记住在
else
中执行任何重要的工作(例如调用
removeUser()

4) 在
prepareDatabase
调用中,您有一个硬编码的
字符串userId=“Erik”
。如果您有如下数据库规则:

{
  "rules": {
    "highscore": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}
那么它将永远被拒绝

5) 类似地,如果在调用
prepareDatabase
之前没有等待
auth.signinanoymouslyasync
完成,默认的
“auth!=null”
可能会自动失败

我希望这有帮助


--Patrick

谢谢你的提示,事实上,当你无法调试时,很难知道出了什么问题。我会检查插件。