簡體   English   中英

如何在Firebase中基於ID更新其他用戶余額?

[英]how can i update another user balance base on id in firebase?

我正在使用Firebase進行android studio項目,目前我已經完成了注冊和登錄,但是我的功能是將余額轉移到其他用戶。

因此,我需要做的是在將金額轉移給另一位用戶之后,找到修改/更新余額內容(值)的方法。

但是我進行了一些研究,他們說Firebase僅可以使用自己的用戶帳戶進行讀寫。

假設我已經登錄到user1,並想轉移到user2。

謝謝。

-Users
      -AsjdnskkhdiioAndmmnekwas

         Name:"User1"

         email:"user1@hotmail.com"

         uid: "Adjshdkjwwnekwihwoi4kdnw4l2"

         age:20

         Balance:100

      -DdmkenklahaoinskaAnmdmls

         Name:"User2"

         email:"user2@hotmail.com"

         uid: "Cbdnaknekmmalsmdlen1qnio2"

         age:21

         Balance:100
-------------------------------------------------------------------
**how to become:**

 -Users
      -AsjdnskkhdiioAndmmnekwas

         Name:"User1"

         email:"user1@hotmail.com"

         uid: "Adjshdkjwwnekwihwoi4kdnw4l2"

         age:20

         Balance:50

      -DdmkenklahaoinskaAnmdmls

         Name:"User2"

         email:"user2@hotmail.com"

         uid: "Cbdnaknekmmalsmdlen1qnio2"

         age:21

         Balance:150

請記住,您是管理員(數據庫中)所有用戶的所有信息。 使用DatabaseReference setValue()方法來更新數據庫內部的信息,如下所示:

private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();

String senderId = "sample_id_sender";
String receiverId = "sample_id_receiver";
mDatabase.child("users").child(senderId ).child("Balance").setValue(new_balance1);
mDatabase.child("users").child(receiverId).child("Balance").setValue(new_balance2);

如何知道接收者的ID? 這取決於您的情況,例如,您要向名稱為“ User2”的用戶發送1 $。 你必須找到在用戶列表user2的ID,在你的數據庫,我覺得這些指南是對你有好處: https://firebase.google.com/docs/database/android/read-and-write https://開頭火力點。 google.com/docs/database/android/lists-of-data

有趣的問題。 我認為您可以結合使用修改后的數據模型,事務和服務器端安全規則來實現此目的。

分步進行:

  1. 由於您需要知道兩個用戶的當前余額才能確定他們的新余額,因此需要使用交易。
  2. 您將需要以某種方式存儲實際的事務,否則服務器將無法驗證寫入。 這里的最小信息是from UID to UIDamount
  3. 然后,在安全規則中,您應該修改整個交易中兩個帳戶之間的總余額是未修改的。 為此,您需要來自第2步的數據,否則您將無法知道to帳戶。
  4. 最后,在安全規則中,您需要驗證余額可以減少的唯一帳戶是當前用戶是所有者的帳戶。 在規則中,例如"balance": { ".validate": "data.child('uid').val() == auth.uid || newData.child('Balance').val() > data.child('Balance').val()" }

但是,可伸縮性可能是一個問題,因為它正在修改多個子節點中的節點,這意味着事務遍及整個頂級分支。

另請參閱:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM