在AFNETWORKING中重新连接网络连接时,请恢复所有上传任务



i'm使用 AFNetworking 3.0。我已经使用后台会话成功上传了任务。现在,我想暂停并根据网络达到范围恢复所有任务。就像当网络重新连接时无网络和恢复任务时,暂停任务。

代码:

static AFURLSessionManager *manager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"wts.Demo-Upload"];
    sessionConfiguration.HTTPMaximumConnectionsPerHost = 20;
    manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];
});
[manager setDidFinishEventsForBackgroundURLSessionBlock:^(NSURLSession * _Nonnull session) {
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if (appDelegate.backgroundSessionCompletionHandler) {
        void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler;
        appDelegate.backgroundSessionCompletionHandler = nil;
        completionHandler();
    }
    NSLog(@"All tasks are finished");
}];

NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusNotReachable:
            // we need to notify a delegete when internet conexion is lost.
            // [delegate internetConexionLost];
            NSLog(@"No Internet Conexion");
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi:
            NSLog(@"WIFI");
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN:
            NSLog(@"3G");
            break;
        default:
            NSLog(@"Unkown network status");
            [operationQueue setSuspended:YES];
            break;
    }
}];
    [manager.reachabilityManager startMonitoring];

最终找到了解决方案。首先获得所有上传任务并恢复。

[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusNotReachable:
            NSLog(@"No Internet Connection");
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi:
            NSLog(@"WiFi");
        case AFNetworkReachabilityStatusReachableViaWWAN:
            NSLog(@"3G");
            for (NSURLSessionUploadTask *uploadTask in [manager uploadTasks]) {
                [uploadTask resume];
            }
            break;
        default:
            NSLog(@"Unknown network status");
            [operationQueue setSuspended:YES];
            break;
    }
}];

上面的代码在App在前景时正常工作。但是当应用在后台时,setReachabilityStatusChangeBlock从未被调用。谁能知道如何调用可达性块,即使应用程序在后台?

最新更新