0

제목에 설명 된대로 원격 알림이 올 때 텍스트로 답장을 보낼 수 있습니다. 홈 버튼을 한 번 탭하면 내 http 요청이 제대로 작동하지만 앱이 실행되고 있지 않을 때는 기다리지 않아도 작동하지 않습니다. 앱이 실행되면 앱도 작동합니다. 지금ios - NSURLSession with dataTaskWithRequest는 앱 실행 중일 때만 실행됩니다. 앱이 실행되지 않는 동안에는 실행되지 않습니다.

// 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 증명서, -background 세션 구성, -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() 
} 

에 대한

UPDATE는 너무 작동하지 않습니다. 추가 처리기를 추가합니까?

답변

1

completionHandler()를 호출하면 응용 프로그램이 다시 일시 중단됩니다. 이것은 작업이 완료되기 전에 발생합니다.

uploadTask(with:from:) 대신 uploadTask(with:from:completionHandler:)을 호출하고 completionHandler()을 완료 핸들러 블록에 넣어야합니다.

+0

네가 맞아. 우리는 백그라운드 세션 설정이 필요하지 않습니다. 기본 설정으로 충분합니다. 액션 앱 상태로 응답 할 때 이미 실행 상태가되기 때문입니다. 감사 :) – zippo