在Apple Watch

时间:2015-11-30 09:58:52

标签: ios objective-c xamarin watchkit apple-watch

我收到的通知中包含其有效负载中的ID。这个ID就在那里,所以我可以在服务器上获取实际的对象。

现在,我只使用AppDelegate HandleWatchKitExtensionRequest和Watchkit中的.OpenParentApplication进行通信。

使用它,如果我不进行任何webservice调用,那就没关系了。一旦我尝试调用服务器,就会收到一条错误消息,指出父应用程序从不调用reply()

所以显然我认为异步调用会使它失败。

实现这一目标的最佳方法是什么?我有一种感觉,我做错了,但我没有其他真正的解决方案,我在网上找到了。

现在它看起来像这样

  1. [观看]收到远程通知
  2. [观看]在字典中打开带有ID的父应用程序
  3. [Parent]调用webservice(此处失败
  4. [Parent]将结果发送到手表(某些字符串和图像
  5. 注意:我正在使用Xamarin,但任何Obj-C / Swift代码都足够了,我需要与WatchOS 1兼容,因此我不能真正使用WCSession / WatchConnectivity框架,可以吗?

1 个答案:

答案 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];
    } );
}

希望这很有用。