AFNetworking only runs background tasks when Wi-Fi is available

I would like to use AFNetworking AFHTTPSessionManager

to implement an action to upload data to a web server (like a post action) only when Wi-Fi is available and the action needs to be queued even if cellular is available. I think I need to use AFNetworkReachabilityManager

. But in AFNetworking github it only shows how to work with AFHTTPRequestOperationManager

and manager.operationQueue

.

Hence, I want to ask if I can make a similar stuff using AFHTTPSessionManager

and thisoperationQueue

Below is my thought with some piece of code, does it make sense to do this?

AppDelegate.m

@interface AppDelegate ()
@property (strong, nonatomic) NSURLSession *session;
@property (strong, nonatomic) NSMutableURLRequest *request;
@property (strong, nonatomic) AFHTTPSessionManager *manager;
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self config_sessionManager];
    [self config_request];

    return YES;
}

- (void)config_sessionManager {

    NSURL *baseURL = [NSURL URLWithString:TargetURL];
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:kSCIdenitifer];
    self.manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL sessionConfiguration:config];

    //actually, what is this operationQueue? I don't quit understand it
    //sometimes, I see `mainQueue` was used,
    //e.g `[[NSOperationQueue mainQueue] addOperation:op]` in GET example in the Github
    NSOperationQueue *operationQueue = self.manager.operationQueue;

    [self.manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusReachableViaWiFi:
                [operationQueue setSuspended:NO];
                break;

            default:
                [operationQueue setSuspended:YES];
                break;
        }
    }];

    [self.manager.reachabilityManager startMonitoring];
}

- (void)config_request {
    self.request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kTargetURL]];
    self.request.HTTPMethod = @"POST";
    self.request.HTTPBody = [self.m_str dataUsingEncoding:NSUTF8StringEncoding];
}

- (void)run_task {

    NSURLSessionUploadTask * task = [self.manager uploadTaskWithStreamedRequest:self.request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (!error) {
            //ok, no error
            NSLog(@"upload data successfully!!!!");
        }
        else {
            //there is error
            NSLog(@"error with uploading data!!!!");
        }
    }];
    [task resume];

}


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [self run_task];
    completionHandler(UIBackgroundFetchResultNewData);
}

@end

      


So if I do as above, will I put the task config_task

in the Session Manager if Wifi is not available? And if later Wifi is available again, will the task resume and data as I want?

+3
ios nsurlsession afnetworking afnetworking-2


source to share


No one has answered this question yet

Check out similar questions:

49
AFNetworking and background translations
15
limiting the installation of concurrent tasks in AFNetworking 2 with AFHTTPSessionManager running
4
IOS client: I have a custom token in Active Directory, but how do I access the MS Graph API?
3
setbackground load with do while loop
2
Using AFNetworking 2.0 with background tasks
2
FaceBook Connect. Login to the system
1
AFNetworking 2 and background tasks
1
nsurlsession for multiple request in a loop
0
How do I check the receipt of an in-app purchase?
0
NSURLSession: how to start download again but not resume download?



All Articles
Loading...
X
Show
Funny
Dev
Pics