繁体   English   中英

在Apple Watch上收到通知后异步加载数据

[英]Load data asynchronously after notification on apple watch

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

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

使用该方法,如果我不进行任何Web服务调用,那就很好。 尝试调用服务器后,我收到一条错误消息,说父应用程序从不调用reply()

所以很明显我在想异步调用会使它失败。

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

现在看起来像这样

  1. [观看]收到远程通知
  2. [观看]在字典中打开带有ID的父应用程序
  3. [家长]致电网络服务( 此处失败
  4. [家长]将结果发送到手表(一些字符串和图片

注意:我正在使用Xamarin,但是任何Obj-C / Swift代码都足够,并且我需要与WatchOS 1兼容,因此我不能真正使用WCSession / WatchConnectivity框架,可以吗?

处在非常相似的情况下,希望以下内容对您有所帮助。 因此,当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];
    } );
}

希望这是有用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM