ios - NSURLSession с dataTaskWithRequest срабатывает только при запуске приложения, а не когда оно не запущено
Как описано в заголовке, я могу ответить в виде текста, когда приходит удаленное уведомление. Мой http-запрос работает хорошо, если я нажимаю кнопку "Домой" один раз, но не работает, когда приложение не запущено, оно ждет. Когда приложение запускается, оно тоже работает.
// Please work
func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
print(userInfo["personB"])
if identifier == "comment-reply" {
if let response = responseInfo[UIUserNotificationActionResponseTypedTextKey],
responseText = response as? String {
let request = NSMutableURLRequest(URL: NSURL(string: "https://example.com/post-ios.php")!)
request.HTTPMethod = "POST"
let p = "a=123&b=\(responseText)"
request.HTTPBody = p.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
task.resume()
}
}
completionHandler()
}
Теперь, мне нужно: -VoIP сертификат, -Bonground конфигурации сеанса, -Dispatch что-то или -Upload задача?
Может кто-нибудь мне помочь?
ОБНОВЛЕНИЕ для задачи загрузки
func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
let id = userInfo["personB"]!
if identifier == "comment-reply" {
if let response = responseInfo[UIUserNotificationActionResponseTypedTextKey],
responseText = response as? String {
let conf = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("replyPost")
let requ = NSMutableURLRequest(URL: NSURL(string: "https://example.com/post-ios.php")!)
requ.HTTPMethod = "POST"
let data = "a=123&b=\(responseText)".dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession(configuration: conf, delegate: self, delegateQueue: NSOperationQueue.mainQueue()).uploadTaskWithRequest(requ, fromData: data!)
task.resume()
}
}
completionHandler()
}
Это тоже не работает. Я добавить дополнительный обработчик?
1 ответ
Когда вы вызываете завершение, то ваше приложение будет снова приостановлено. Это произойдет до того, как ваша задача будет выполнена.
Вместо uploadTask(with:from:)
ты должен позвонить uploadTask(with:from:completionHandler:)
и положи completionHandler()
в блоке обработчика завершения.