firebaseデータベースを使用していますが、トランザクションに奇妙なエラーがあります。基本的に私は、パラメータの数と、このようなユーザリストで、「ユーザー」と呼ばれるキーを持っている:Unity Firebaseトランザクションエラー
"users" : {
"count" : 1,
"userList" : {
"LBBgLkOp3bWbZeSfnKVsqkHeW8s1" : true
}
}
私はカウントをインクリメントし、ユーザリストに現在のユーザーのIDを追加するためにトランザクションを使用しています。問題は、トランザクションが正常に完了しますが、すでに存在する場合、ユーザーはトランザクションが理由もなく失敗したキー(1回目)のキーのユーザ...
がない場合、私のコードは、この
void AddUserAndIncrementCount()
{
FirebaseDatabase.DefaultInstance.GetReference("users")
.RunTransaction(usersData =>
{
Dictionary<string, object> users = usersData.Value as Dictionary<string, object>;
if (users == null)
{ // firstTime
users = new Dictionary<string, object>();
users.Add("count", 1);
users.Add("userList", new Dictionary<string, object>() { { auth.CurrentUser.UserId, true }});
}
else
{
/* printing users returns this
{"count":1,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true}}
*/
// INCREMENT COUNT
users["count"] = int.Parse(users["count"].ToString()) + 1;
// ADD USER TO LIST
Dictionary<string, object> userList = users["userList"] as Dictionary<string, object>;
userList.Add(auth.CurrentUser.UserId, true);
users["userList"] = userList;
}
// END TRANSACTION
/* printing users returns this now
{"count":2,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true,"AM2vI8K106XghEgEgRSkCIpJn0w2":true}}
*/
usersData.Value = users;
return TransactionResult.Success(usersData);
}).ContinueWith(OnAddUserIncrementCountTask);
}
void OnAddUserIncrementCountTask(Task<DataSnapshot> task)
{
if (task.IsCompleted && !task.IsCanceled && !task.IsFaulted)
{
//Success
}
else
{
Debug.Log(task.IsFaulted+" - "+task.Exception.Message);
// True - Exception of type 'System.AggregateException' was thrown.
}
}
であるということです
ご覧のとおり、私が受け取っていたものを印刷して、トランザクションを送信して、すべてがうまく見えます。私はルールを公に設定しようとしました(真実を読んで真を書きます)、それも失敗したので、何か悪いことをしているのか、トランザクションに何か問題があるのかどうかわかりません。私のことを悩ませることは、ユーザーのキーがデータベースに存在しないと失敗しないので、私はそれが見えない何らかの奇妙な理由で失敗していると思うということです...
私はテストしていますAndroidデバイス。
ありがとうございます。
ここにFirebaseの開発者がいます。回避策を見つけてくれてありがとうJuanと私はこの問題についてお詫び申し上げます。これは、次のSDKリリース1.1.3で修正される予定です。 –
こんにちは、問題はない、私はあなたのサポートチームにこれを1週間前に報告しました。それは私にとっては大きな問題ではありませんが、なぜ失敗したのかを理解することは困難でした。 Firebaseは素晴らしいです!良い仕事を保つ:) –