Android 安卓上的anynomous统一签名
我正在开发一款游戏,尝试在我的android设备上以任何方式登录。当我在Macbook上的Unity编辑器中运行游戏时,一切都很顺利,数据库也在更新 但当我在我的三星设备上编译并运行它时,什么也没发生,它只是冻结了。有人知道为什么吗?我尝试将sha1密钥添加到我在Firebase上的项目的fingeprints中,但没有成功 代码如下: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 .
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谢谢你的提示,事实上,当你无法调试时,很难知道出了什么问题。我会检查插件。