android - Unity 在 Android 上登录 anynomous
问题描述
我正在尝试在我开发的游戏中在我的 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 输出时进行堆栈跟踪,以查看到底发生了什么*我推荐这个 Unity 插件来帮助解析 LogCat)。在不知道所有这些是如何联系在一起的情况下,很难说出“冻结”在您的游戏上下文中可能意味着什么,或者哪个调用可能导致您的问题。我确实看到了一些可能的问题:
1)SetEditorDatabaseUrl
不是必需的,我从不在自己的项目中使用它。我假设这"mydatabaseadress/"
是这个堆栈溢出问题的一个临时值,但如果您的项目中只有一个数据库,它也是一个不必要的潜在错误表面。
2)removeUser
可能在 Unity 中做一些工作。出于这个原因,您应该替换ContinueWith
为ContinueWithOnMainThread
(see this )。这也将确保您获得所有必要的日志记录。
3)auth.CurrentUser
将在您的游戏运行之间持续存在。每次调用auth.SignInAnonymouslyAsync
都会创建一个新用户——即使已经注册了一个用户。您应该将您的身份验证代码更改为:
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
if (auth.CurrentUser == null) {
auth.SignInAnonymouslyAsync().ContinueWithOnMainThread(task => {
并记住removeUser()
在else
.
4)在您的prepareDatabase
通话中,您有一个硬编码的string userId = "Erik"
. 如果您有如下数据库规则:
{
"rules": {
"highscore": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
那么它将永远被拒绝。
5) 同样,如果你没有等待auth.SignInAnonymouslyAsync
完成才调用prepareDatabase
,默认"auth != null"
可能会自动失败。
我希望这会有所帮助!
——帕特里克
推荐阅读
- node.js - 在创建帖子时尝试引用用户时出现 Cast to ObjectId 错误(express -sessions、mongoose)
- android - 如何在Android Layout中将EditBox中的文本划分为TextView和EditBox
- c++ - 为什么 C++ 标准库中没有 SIMD 功能?
- celery - 谁在 celery 中等待 apply_async(countdown=10)
- c++ - 用于创建对象的堆或堆栈?
- javascript - reactjs登录后如何创建受保护的路由
- javascript - 当社区添加了 URL 时,JSForce describeGlobal 不起作用
- listview - xamarin 表单列表视图多选
- database - 主主数据库架构中的主节点是共享相同的数据集还是拥有自己独特的数据集?
- azure - 没有 www 的 URL 重定向到不同的页面