我正在收到一个通知,其中包括它的有效负载中有一个ID。这个ID就在那里,这样我就可以在服务器上获取实际的对象。
现在,我只使用AppDelegate HandleWatchKitExtensionRequest
和Watchkit的.OpenParentApplication
进行通信。
使用它,如果我不打任何webservice电话,那就没问题了。一旦我试图调用服务器,就会发现一个错误,即父应用程序从不调用reply()
。
所以很明显,我认为异步调用会使它失败。
实现这一目标的最佳方法是什么?我有一种感觉,我做错了,但我没有其他真正的解决方案,从我发现的网上。
现在它看起来像这样
注意:我正在使用Xamarin,但是任何Obj/Swift代码都足够了,而且我需要兼容WatchOS 1,因此我不能真正使用WCSession/WatchConnectivity框架,对吗?
发布于 2015-11-30 02:12:04
在同样的情况下,希望以下能对你有所帮助。因此,当watchkit应用程序调用主应用程序时,开始后台任务,加载正在加载的内容,并结束bg任务。如下所示:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
{
__block UIBackgroundTaskIdentifier watchKitHandler;
watchKitHandler = [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"backgroundTask"
expirationHandler:^{
watchKitHandler = UIBackgroundTaskInvalid;
}];
//load the things here.
reply(@{@"hehe":@"hehe123"});
dispatch_after( dispatch_time( DISPATCH_TIME_NOW, (int64_t)NSEC_PER_SEC * 10. ), dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
[[UIApplication sharedApplication] endBackgroundTask:watchKitHandler];
} );
}
希望这是有用的。
https://stackoverflow.com/questions/33995796
复制