繁体   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