0

タイトルの通り、遠隔通知が来たらテキストで返信できます。ホームボタンを 1 回タップすると 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 証明書、-バックグラウンド セッション構成、-ディスパッチ何か、または -アップロード タスク?

誰でも私を助けることができますか?

アップロード タスクの更新

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()
}

それも機能しません。ハンドラーを追加しますか?

4

1 に答える 1

1

completionHandler() を呼び出すと、アプリケーションは再び中断されます。これは、タスクが完了する前に発生します。

代わりに、完了ハンドラ ブロックuploadTask(with:from:)を呼び出しuploadTask(with:from:completionHandler:)て配置する必要があります。completionHandler()

于 2016-09-20T23:25:37.810 に答える