使用交互式推送通知 iOS 8 调用 Web 服务

Posted

技术标签:

【中文标题】使用交互式推送通知 iOS 8 调用 Web 服务【英文标题】:Call web service with interactive push notification iOS 8 【发布时间】:2015-08-13 09:35:01 【问题描述】:

我正在尝试在我的应用中实现交互式推送通知。应用成功收到通知。

收到通知后,我在锁定屏幕上有两个按钮。它们都应该启动两个 Web 服务

这是我在application handleActionWithIdentifier中的代码

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) 


    let aps = userInfo["aps"] as NSDictionary
    let id = aps["id"] as Int
    let notification = Notifications()
    notification.notificationId = NSNumber(integer: id)

    if identifier == "APPROVE"
        APIManager.sharedInstance.approveApprovalRequest(notification)
    
    else if identifier == "DELETE"
        APIManager.sharedInstance.dismissBulletin(notification)
    
    completionHandler()

我用过

 NSURLSession.sharedSession().dataTaskWithRequest(request, 
    completionHandler:  (data, response, error) -> Void in).resume()

用于网络服务调用。

但它返回连接错误。

我该如何解决这个问题。任何帮助表示赞赏。

编辑:

这是我在日志中收到的错误

Error Domain=NSPOSIXErrorDomain Code=9 "The operation couldn’t be completed.Bad file descriptor"

UserInfo=0x1552ca00 _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=9

【问题讨论】:

【参考方案1】:

这对我有用。

let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: error)

【讨论】:

【参考方案2】:

如果您打开了后台模式,它应该可以工作,您可以在 Capabilities 中执行此操作并选择 Remote Notifications。

更新 在多任务和网络中,如果应用程序被挂起并且套接字被回收,您可能会收到 EBADF 错误阅读更多关于此here

注意:当您的应用恢复执行时,此处特意未指定资源已被回收的套接字返回的实际错误,以便将来进行改进。但是,在许多情况下,错误将是 EBADF,这可能不是您所期望的!在正常情况下,EBADF 意味着应用程序已将无效的文件描述符传递给系统调用。但是,对于资源被回收的socket,并不代表文件描述符无效,只是socket不再可用。

提示:检查APIManager.sharedInstance.approveApprovalRequest(notification)的实现

【讨论】:

我已打开后台模式并选择了远程通知和后台获取。但没有帮助

以上是关于使用交互式推送通知 iOS 8 调用 Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

与 APNS 服务器交互以向 iOS 设备发送推送通知的最简单方法是啥?

交互式通知支持 iOS 8

GCM 使用 content_available 向 iOS 推送通知(无法从非活动状态调用)

未调用 iOS 推送通知服务扩展 (didReceive)

无法在 iOS8 上设置交互式推送通知

ios8自定义交互式推送通知