2017-08-06 36 views
1

我只想更新email,firstname和lastname的值(如果它們爲空)。如果信息不存在,只能將數據寫入firebase - Swift iOS

我需要這樣做,以便如果用戶決定在設置中更改這些設置,則每次用戶使用Facebook登錄時都不會覆蓋它們。

任何解決方案來檢查沒有datasnapshot的領域是空白的?試圖最大限度地提高效率。

用戶使用Facebook登錄時的當前代碼? FB Grab User Info Code

爲每個用戶數據庫結構:

Database

+2

請將您的代碼添加爲文本,而不是圖片 –

+0

不確定問題是非常清楚的,但一旦用戶認證,您將有他們的用戶名。讀完用戶/ uid_x節點後,如果數據不存在,則相應地更新。即在嘗試寫入數據之前獲取快照*。 – Jay

回答

0

在火力,你必須檢查,如果你的領域在你的數據庫中的當前值是空的唯一方法就是來接他們要設置前他們。

0

您可以檢查現場只有通過獲取them.Then使用此代碼更新特定值,這是在使用firebase transaction

ref.child("yourKey").child("yourKey").updateChildValues(["email": yourValue]) 
0

一種方式是空的。

事務處理允許您在設置/更新數據庫之前檢查數據庫引用的當前值。它的主要用例是阻止多個源的多個併發更新,但它也可以用於這種情況 - 讀取然後寫入。 在交易區塊中,您可以查看您正在進行交易的數據庫引用的價值&可以檢查該值是否爲空(因此會創建大小寫) - >然後根據需要進行更新並返回TransactionResult.success(withValue: newData)

如果該對象已經設置,則只需用TransactionResult.abort()中止事務,並且不會執行寫入數據庫。

另一種選擇,即不需要讀/寫,是設置在相關ref上的火力地堡數據庫規則將只允許寫如果以前的值爲空:

"refPath": { 
     ".write": "data.val() == null && newDataval() != null" 
    } 

寫第二到現有參考數據庫的時間將會失敗。 我願意與交易一起 - 在客戶端代碼中更加表達要求。

相關問題