2016-09-22 57 views
1

我正在開發iOS中的郵件應用程序,該應用程序可以讓用戶選擇延遲發送郵件一段時間(例如,發送此文本5小時後)和我我正在使用Firebase作爲我的數據庫。任何人都知道如何實現這個功能?Firebase。 Swift:在郵件發佈5小時後檢索郵件

具體做法是:

每次發送的消息我用Firebase.child(XXX).setValue(message) 添加一個新的消息到火力

然後使用 Firebase.child(XXX).observeEventType(.ChildAdded,... 獲得新發送消息

有什麼辦法我可以將setValue操作延遲一段時間並因此實現功能?或者有更好的方法來做到這一點。

+1

請解釋您已經嘗試過的內容,併發布[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MJH

回答

1

開箱即用的Firebase沒有這樣的功能。

這裏的easies解決方案是爲您的消息和客戶端添加像validFrom這樣的提交,以過濾此字段中的所有消息。

您甚至可以添加validTo字段並使郵件過期!

+0

謝謝,這是一個可能的解決方案!但客戶端需要打開,才能得到這條消息,這可能會禁用離線推送通知功能? –

0

它可能不是一個好主意,延遲值設置爲你的火力地堡數據庫,可以用Timer但你必須確保你的應用程序必須是仍處於運行模式5小時你已經開始了後Timer。我認爲即使你瞭解也是一個愚蠢的想法。

但是你可以做的就是將你的值設置爲你的數據庫,時間戳作爲一個鍵。

在設定值: -

let timeStamp = Int(NSDate().timeIntervalSince1970) 
FIRDatabase.database().reference().child("your_path").setValue(["\(timeStamp)":"yourMessage"]) 

  • 時間戳: - 是您當前的時間戳
  • yourMessage: - 是你的消息

每當你想找回你的消息檢索該消息的時間戳並檢查是否有5小時通過編輯。

FIRDatabase.database().reference().child("your_path").observeSingleEventOfType(.Value, withBlock:{(snap) in 

if let messageDict = snap.value as? [String:AnyObject]{ 
    for each in messageDict{ 
    let timeKey = Int(each.0) //your TimeStamp 
    let datePosted = NSDate(timeIntervalSince1970: TimeInterval(timeKey)) 
    let elapsedTime_Hours = Int(NSDate().timeIntervalSince(datePosted as Date)/3600) 
    if elapsedTime_Hours >= 5 { 
     print("Five hours have passed and now the user can see the message") 
     } 
    } 
    } 
}) 
+0

謝謝你的建議〜,但基本上,我不想每次都用一段新代碼去做,因爲當客戶選擇一個隨機時間來延遲它的消息時,我真的不能這樣做。 –

+0

這是不可能的。這是最遠你會得到..... – Dravidian