【发布时间】:2019-08-31 13:12:40
【问题描述】:
我编写了向 applicationWillTerminate 发送 URLRequest 的代码,但发现这是错误的。 有没有其他方法可以通知服务器应用程序已终止? 下面的代码接收并返回服务端返回的数据,但由于只是通知服务端应用结束,原则上不需要。
func applicationWillTerminate(_ application: UIApplication) {
appExitRequest()
}
func appExitRequest() {
let settings = UserDefaults.standard
let id = settings.string(forKey: myId)
guard let myId = id?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
return
}
guard let req_url = URL(string: "http://localhost/test.php/terminate?myId=\(myId)") else {
return
}
print(req_url)
let req = URLRequest(url: req_url)
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: req, completionHandler: {
(data, response, error) in
session.finishTasksAndInvalidate()
do {
print("OK", data ?? "Empty")
} catch {
print("Failure", error)
}
})
task.resume()
}
【问题讨论】:
-
尝试记录它终止的时间,并在应用再次启动后将该信息发送到服务器?
-
当然也有这样的方法。但是,因为我们只想在数据库中记录活跃用户,所以我们不能等待应用重新启动。
-
为什么不使用某种分析引擎(Adobe、Firebase 等)来监控活动会话的数量?这些足够先进,可以在商业环境中为您提供准确的 KPI。
-
需要识别个人用户,而不是用户总数。 Firebase 能做到吗?
-
这里可以使用socket,发送socket消息会比URLRequest更快,任务也更小。