“applicationWillTerminate”没有被迅速调用

Posted

技术标签:

【中文标题】“applicationWillTerminate”没有被迅速调用【英文标题】:"applicationWillTerminate" is not called in swift 【发布时间】:2019-12-31 07:21:23 【问题描述】:

我正在开发一个聊天应用程序,我必须在其中维护用户“离线”或“在线”状态。我希望当用户进入后台时用户状态将处于离线状态,并且如果用户将终止该应用程序。在我的后台应用程序运行正常。但是当我杀死应用程序时它不能正常工作。我的代码是:-

func applicationDidEnterBackground(_ application: UIApplication) 
    if let uid: Int = UserDefaults.standard.value(forKey: "User_Id") as? Int
          reference(.User).whereField(kREGISTERUSEID, isEqualTo: "\(uid)").getDocuments  (snapshot, err) in
              if let err = err 
              
              else 
                  let document = snapshot!.documents.first
                  document!.reference.updateData([
                      kISONLINE: false
                  ])
              
          
    

 func applicationDidBecomeActive(_ application: UIApplication) 
    if let uid: Int = UserDefaults.standard.value(forKey: "User_Id") as? Int
            reference(.User).whereField(kREGISTERUSEID, isEqualTo: "\(uid)").getDocuments  (snapshot, err) in
                if let err = err 
                
                else 
                    let document = snapshot!.documents.first
                    document!.reference.updateData([
                        kISONLINE: true
                    ])
                
            
    



func applicationWillTerminate(_ application: UIApplication) 
    if let uid: Int = UserDefaults.standard.value(forKey: "User_Id") as? Int
                reference(.User).whereField(kREGISTERUSEID, isEqualTo: "\(uid)").getDocuments  (snapshot, err) in
                    if let err = err 
                    
                    else 
                        let document = snapshot!.documents.first
                        document!.reference.updateData([
                            kISONLINE: false
                        ])
                    
                
          


我在这里使用 firebase。另外,如果用户在 20 秒内不进入聊天屏幕或不向任何人(如whatsapp)发送消息,我想让用户离线。

请帮我实现它。谢谢

【问题讨论】:

您不应该在应用程序终止方法中调用任何 api,因为在该应用程序中没有太多时间来执行 api 请求和响应 【参考方案1】:

您的 api 或 firebase 调用必须在后台模式下执行。转到链接,您将找到如何创建后台任务。

Can I make an api call when the user terminates the app?

【讨论】:

以上是关于“applicationWillTerminate”没有被迅速调用的主要内容,如果未能解决你的问题,请参考以下文章

“applicationWillTerminate”没有被迅速调用

applicationWillTerminate 何时调用,何时不调用

Swift - 在 applicationWillTerminate 中调用本地通知方法

为啥 UIWebView 不在我的应用程序委托中的 applicationWillTerminate: 处加载 NSURLRequest?

如何为启用了后台的 iOS 应用程序获取 applicationWillTerminate 通知?

applicationWillTerminate 上的 Swift 后台任务