我有應用程序使用數據庫的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 = ""
}
}
}
我試着調試它像下面的圖片:
當我殺死應用程序斷點1和2正在調用,但它的ne在版本斷點3.
達到我閱讀的文檔:
https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623111-applicationwillterminate
它說:
此方法的實現有大約五秒鐘執行任何任務,並返回。如果該方法在時間到期之前沒有返回,系統可能會完全終止該過程。
實際上,從firebase清除該字段的時間不超過5秒。
當我打開應用程序時,相同的代碼工作正常。
所以我的代碼工作正常,但有一些我失蹤時,我殺了應用程序。
感謝您的幫助。
你確定err == nil? –
您還需要考慮這個senario:如果用戶首先將應用切換到背景,並且在嘗試終止應用後,applicationWillTerminate將不會被調用。 –
@AchrefGassoumi添加了其他條件,但它也沒有調用。 –