watchOS 应用停止发送 NSURLSessionDownloadTask 请求

Posted

技术标签:

【中文标题】watchOS 应用停止发送 NSURLSessionDownloadTask 请求【英文标题】:watchOS app stops sending NSURLSessionDownloadTask requests 【发布时间】:2017-07-12 17:44:45 【问题描述】:

我有一个 ios 应用程序和一个配套的 watchOS 应用程序。 iOS 应用程序在 watchOS 应用程序首次启动时为 watchOS 应用程序提供访问令牌。在此 watchOS 应用开始通过发送 NSURLSessionDownloadTask 请求定期从服务器获取数据更新之后。

我的 NSURLSession 配置如下:

NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[[[[NSBundle mainBundle] bundleIdentifier] stringByAppendingString:@".backgroundsession"] stringByAppendingString:[NSUUID UUID].UUIDString]];
config.sharedContainerIdentifier = APP_GROUPS_ID;
self.urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

然后我通过以下方式定期发送请求:

NSURL *url = [NSURL URLWithString:API];
NSMutableURLRequest *request = [self buildRequestForURL:url andMethod:@"POST"];

NSString *body = [NSString stringWithFormat:<some request params>];

[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];

[[self.urlSession downloadTaskWithRequest:request] resume];

watchOS 应用在一段时间内成功接收更新。当 iOS 应用处于后台模式或手动卸载时,它会成功接收更新。

但当我锁定 iPhone 屏幕时(几分钟后或几分钟后),watchOS 应用停止接收更新。

有人在使用 watchOS 应用时遇到过同样的问题吗?

【问题讨论】:

你使用WKURLSessionRefreshBackgroundTask吗? @JensPeter 不,我没有。 【参考方案1】:

看看This Apple Example - WatchBackgroundRefresh,以及我对this question的回答。希望这可以引导您找到一些工作代码。

【讨论】:

以上是关于watchOS 应用停止发送 NSURLSessionDownloadTask 请求的主要内容,如果未能解决你的问题,请参考以下文章

watchOS 中的扩展运行时会话在首次运行后停止工作

使用应用程序上下文将数据从 iPhone 发送到 WatchOS 时遇到问题

从 ios 向 watchos 发送消息的问题

直接向 watchOS 2 发送推送通知?

WatchOS 4 未收到后台 GPS 更新

SwiftUI PresentationButton 在 watchOS 上单次使用后停止运行