0

我已經編寫了一個使用firebase匿名身份驗證並從前臺服務寫入Firebase數據庫的Android應用程序。我正在使用onDisconnect().removeValue()來清理由我的應用程序在websocket關閉時創建的數據。當用戶積極參與應用程序時,將按照預期觸發onDisconnect()調用(意味着我的安全規則正常)。但是,如果前臺服務長時間運行(例如隔夜,屏幕關閉等),則不會再次觸發該呼叫。該應用程序在喚醒後繼續工作(與Firebase服務器等進行通信),但是當它關​​閉應用程序(經過一段空閒時間後)時,看起來onDisconnect()呼叫已經以某種方式丟失。如何從Android中的前臺服務正確使用Firebase

我讀過匿名認證會話每小時被安全地刷新的firebase SDK。是否有可能在活動中發生這種情況(並且被操作系統殺死,但保持前臺服務活着),因此導致服務器放棄回撥到onDisconnect?如果是這樣,這個功能可以保存在前臺服務中嗎?

回答

0

火力地堡已經有一個bug最近(不知道它已經固定),在那裏當它重新驗證每一個小時,就失去了onDisconnect(),因爲它不再有權限修改該節點。這然後導致重複。

一些可能的解決方案:

  1. 附加一個時間戳,並檢查是否最後的時間戳是一個多小時,如果是的話,刪除它添加新的時候。

  2. 刪除在節點中寫入的身份驗證要求以跟蹤斷開連接(儘管這取決於您的需要,但這並不安全)。

這裏有一些更多的選擇,這個問題從火力地堡團隊成員更好的解釋:here

+0

謝謝@Aubtin。很高興知道它對我的代碼沒有任何問題,並且Firebase團隊知道這個問題。 –

0

Android應用程序進程可以無限期地生活。當用戶停止使用應用程序時,Android可能會繼續保持該進程的活動狀態,以便在用戶返回時加快加載速度。你可以認爲這是一種優化,你應該期望有時會發生這種情況。你不應該試圖控制這種行爲 - 讓Android爲你管理。

您與數據庫的連接未關閉,因爲該應用程序仍處於活動狀態,並保持其與數據庫的連接。我建議您在用戶停止使用您的應用時追蹤自己,並在此後的適當時間強制進行清理,而不會假定Android會終止您的應用的進程。

相關問題