1

我有應用程序使用數據庫的firebase和我想清除特定的用戶字段,稱爲current_venue當用戶殺了應用程序,爲此,我使用AppDelegate方法applicationWillTerminate它實際上是在我殺死應用程序時調用,但不完全。Firebase:如何在用戶停用應用程序時清除Firebase中的特定數據?

下面是我在AppDelegate代碼:

func applicationWillTerminate(_ application: UIApplication) { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
    WebServiceAPI.checkOutVenue() 
} 

而另一種方法是:

static func checkOutVenue() { 

    WebServiceAPI.sharedInstance.current_venue = "" 
    if WebServiceAPI.sharedInstance.user == nil { 
     return 
    } 
    let user = WebServiceAPI.sharedInstance.user! 
    let ref = FIRDatabase.database().reference() 
    ref.child("Clients").child(user.uid).child("current_venue").setValue("") { (err, venueIdRef) in 
     if err == nil { 
      WebServiceAPI.sharedInstance.current_venue = "" 
     } 
    } 
} 

我試着調試它像下面的圖片:

enter image description here

當我殺死應用程序斷點1和2正在調用,但它的ne在版本斷點3.

達到我閱讀的文檔:

https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate

它說:

此方法的實現有大約五秒鐘執行任何任務,並返回。如果該方法在時間到期之前沒有返回,系統可能會完全終止該過程。

實際上,從firebase清除該字段的時間不超過5秒。

當我打開應用程序時,相同的代碼工作正常。

所以我的代碼工作正常,但有一些我失蹤時,我殺了應用程序。

感謝您的幫助。

+0

你確定err == nil? –

+0

您還需要考慮這個senario:如果用戶首先將應用切換到背景,並且在嘗試終止應用後,applicationWillTerminate將不會被調用。 –

+0

@AchrefGassoumi添加了其他條件,但它也沒有調用。 –

回答

1

一種更好的方式,以確保數據的清理,當用戶斷開連接是使用onDisconnect處理程序。該Firebase documentation explains them,但這裏的你如何使用它一個簡單的例子:

ref.child("Clients") 
    .child(user.uid) 
    .child("current_venue") 
    .onDisconnectRemoveValue() 

當此代碼執行時,該指令被髮送到服務器刪除節點時客戶端斷開連接。這意味着即使客戶端(甚至電話)崩潰並且您的客戶端代碼永遠無法執行,它也會始終運行。

+0

謝謝你的作品。 –

2

具有applicationWillTerminat 異步任務是不是最好的方法,因爲你有5秒,以確保取決於互聯網連接的強度異步任務要完成它的執行(你這也許需要少於5秒的正常用戶,這可能需要更多),否則該過程將被殺死。

正如我在評論部分中提到有你沒有想到的,即使你得到這個工作的另一種情況:

如果用戶切換應用程序背景,在第一,並在此之後嘗試終止應用程序,applicationWillTerminate不會叫。

您嘗試一些東西,在理論上是不可能

去想想是這樣的:

func applicationDidEnterBackground(_ application: UIApplication) { 

    WebServiceAPI.checkOutVenue() 
} 
+0

我認爲你是對的。我現在正在使用不同的方法。感謝您的回答.. :) –

相關問題