我在啟用了磁盤持久性的Android應用中使用Firebase實時數據庫。當用戶首次打開應用程序時,我讀取身份驗證狀態,如果該值為null,則顯示登錄屏幕,登錄后,我將username根據該用戶ID將其存儲在實時數據庫中。如果用戶名為空,那么我將顯示username設置屏幕,他將在其中選擇唯一的用戶名username。在用戶名設置階段連接斷開時會出現問題。username尚未寫入數據庫,但是當他下次打開應用程序時,username它將不會為null,因為實時數據庫為我提供了存儲在緩存中的值。因此,我進入主屏幕,但是如果在此階段其他人選擇了相同的用戶名怎么辦?我維護之間的雙向映射uid,并username在此建議的答復我不能使用事務,因為一次只能在一條路徑上運行事務,但就我而言,我必須自動更新兩條路徑。我還設置了安全規則來維護唯一的用戶名,但是該如何處理已經越過用戶名設置屏幕的用戶。
1 回答

BIG陽
TA貢獻1859條經驗 獲得超6個贊
如果在此階段其他人選擇了相同的用戶名怎么辦?
每當您要對用戶名執行寫操作時,都需要確保其唯一性。要檢查Firebase實時數據庫中是否存在用戶名,需要執行以下查詢:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("users").orderByChild("userName").equalTo(userName);
query.addValueEventListener(/* ... */);
因此,如果用戶在脫機時嘗試設置/更改用戶名,則上述查詢將添加到隊列中。一旦用戶重新建立連接,脫機時所做的每個更改都將在Firebase服務器上更新。換句話說,以上查詢將在服務器上提交。因此,如果用戶選擇了脫機時數據庫中已經存在的用戶名,那么當其重新聯機時,他將收到一條消息,提示用戶名已經存在。
我不能使用事務,因為一次只能在一條路徑上運行事務,但就我而言,我必須自動更新兩條路徑。
我不能使用事務,因為它只能在一條路徑上運行,您根本不能使用事務。不支持離線使用交易。這是因為事務絕對需要與服務器進行往返通信,以確保事務內的代碼成功完成。因此,交易只能在您在線時執行。
添加回答
舉報
0/150
提交
取消