В настоящее время я пытаюсь реализовать торговую систему для моего приложения для Android с использованием firebase. Для этого я должен проверить, нажал ли игрок кнопку покупки для одной сделки, а выбранная сделка все еще доступна в базе данных Firebase.
Способ, которым предполагается работать, заключается в том, что игрок, который хочет купить что-то, проверяет в соответствующей сделке, если идентификатор покупателя все еще пуст, и если это так, помещает туда свой собственный идентификатор. Я установил правила для firebase, так что customerId и purchaseName могут быть установлены только один раз.
Итак, вот код, который я пытался использовать:
if (!reference.Child("trading").Child("trade|" + currentTrade.date).Child("buyerId").SetValueAsync(userId).IsCanceled)
{
Debug.Log("trade should be successfull");
}
else
{
Debug.Log("trade should have failed");
}
Ну, проблемаТеперь, когда не имеет значения, является ли идентификатор покупателя пустым или нет, консоль единства всегда печатает, что сделка прошла успешно. Но я действительно получаю предупреждение в консоли, что в разрешении отказано. Мой вопрос сейчас, как мне правильно его определить, если IP-адрес customerId уже установлен?
Структура моей базы данных:
{
"currentVersion" : {
"FileSize" : 58010,
"ReleaseDate" : "01.08.19",
"Version" : "1.10.7.9"
},
"trading" : {
"trade|1570361586" : {
"amount" : 5,
"buyerId" : "",
"buyerName" : "",
"date" : 1570361586,
"item" : 7,
"price" : 6,
"sellerId" : "1234",
"sellerName" : "testA"
},
"trade|1570363226" : {
"amount" : 1,
"buyerId" : "9876",
"buyerName" : "testB",
"date" : 1570363226,
"item" : 7,
"price" : 1,
"sellerId" : "1234",
"sellerName" : "testA"
},
"trade|1570467885" : {
"amount" : 1,
"buyerId" : "4545",
"buyerName" : "testC",
"date" : 1570467885,
"item" : 7,
"price" : 2,
"sellerId" : "1234",
"sellerName" : "testA"
}
}
}
Правила моей базы данных:
{
"rules": {
"currentVersion" : {
".write" : false,
".read" : true
},
"trading" : {
".read" : true,
"$trade" : {
".write" : "!data.exists()",
"buyerName" : {
".write" : "data.val() == '' && newData.val() != ''"
},
"buyerId" : {
".write" : "data.val() == '' && newData.val() != ''"
},
"sellerName" : {
".write" : false
},
"sellerId" : {
".write" : false
},
"amount" : {
".write" : false
},
"item" : {
".write" : false
},
"price" : {
".write" : false
}
}
}
}
}