我想点击Apple Watch触发器与后端通信的推送通知,并在Apple Watch的表格中显示结果。
我知道如何在Apple Watch上的表格中显示结果。我也知道openParentApplication:reply:
方法。
但是,如果我想在application:handleWatchKitExtensionRequest:reply:
中触发我的后端通信,则会收到reply()
从未调用的错误。如果花费很多时间,iOS似乎会杀死这个方法。
如果我用只有一个条目的硬编码字典测试application:handleWatchKitExtensionRequest:reply:
,那么一切正常。
这是推荐的方法吗?
在我看来,我应该在didReceiveRemoteNotification
方法和应用程序组中的NotificationController.swift中执行某些操作但是如何在iPhone上触发后端通信?
更新:
AppDelefate.swift中的部分代码:
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
var workaround: UIBackgroundTaskIdentifier?
workaround = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
UIApplication.sharedApplication().endBackgroundTask(workaround!)
})
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), {
UIApplication.sharedApplication().endBackgroundTask(workaround!)
})
var realBackgroundTaks: UIBackgroundTaskIdentifier?
realBackgroundTaks = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
reply(nil)
UIApplication.sharedApplication().endBackgroundTask(realBackgroundTaks!)
})
let testDict = ["Hello" : "World"]
reply(testDict)
UIApplication.sharedApplication().endBackgroundTask(realBackgroundTaks!)
}
此代码工作正常。 但是,如果我将testDict更改为后端通信代码,则此方法将被终止。
答案 0 :(得分:1)
今天我找到了解决问题的方法。您无法在回复字典中传递自定义对象,您必须使用基本类型。
洗脱液在下页Kristina Thai上进行了描述。
答案 1 :(得分:0)
您需要在iPhone上启动后台任务,以确保在您的API请求完成之前,您的应用不会在后台被杀死。我在这里用类似的答案分享了一些资源:https://stackoverflow.com/a/29848521/3704092