我收到的通知中包含其有效负载中的ID。这个ID就在那里,所以我可以在服务器上获取实际的对象。
现在,我只使用AppDelegate HandleWatchKitExtensionRequest
和Watchkit中的.OpenParentApplication
进行通信。
使用它,如果我不进行任何webservice调用,那就没关系了。一旦我尝试调用服务器,就会收到一条错误消息,指出父应用程序从不调用reply()
。
所以显然我认为异步调用会使它失败。
实现这一目标的最佳方法是什么?我有一种感觉,我做错了,但我没有其他真正的解决方案,我在网上找到了。
现在它看起来像这样
注意:我正在使用Xamarin,但任何Obj-C / Swift代码都足够了,我需要与WatchOS 1兼容,因此我不能真正使用WCSession / WatchConnectivity框架,可以吗?
答案 0 :(得分:2)
处于相同的情况,希望以下将帮助您。因此,当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];
} );
}
希望这很有用。