Я использую AFHTTPSessionManager для получения информации из API несколько раз.Он работает правильно, когда не в фоновом режиме, хотя после закрытия приложения вызов AFHTTPSessionManager, похоже, не хочет работать, он блокируется.
-(void)requestGET:(NSString *)strURL xml:(BOOL)xml Token:(NSString *)token success:(void (^)(NSDictionary *responseObject))success failure:(void (^)(NSError *error))failure {
BOOL isNetworkAvailable = [self checkNetConnection];
if (!isNetworkAvailable) {
NSLog(@"No connection");
[self showAlert:@"Please check your internet connection"];
return;
}else{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
if(xml){
// Content xml
manager.responseSerializer = [AFHTTPResponseSerializer new];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/vnd.garmin.tcx+xml", nil];
}else{
// Content json
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil];
}
[manager GET:strURL parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if([responseObject isKindOfClass:[NSDictionary class]]) {
// Return json
if(success) {
success(responseObject);
}
}else{
// Return xml to nsdictionary
if(success){
NSString* responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSDictionary * XMLDictionary = [XMLReader dictionaryForXMLString:responseStr error:nil];
success(XMLDictionary);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@", error);
if(failure) {
failure(error);
}
}];
}
}
Вышеуказанный метод вызывается ниже несколько раз, чтобы захватитьданные из API и выкачать их.
-(void)getFitbitURL{
// Create group
dispatch_group_t group = dispatch_group_create();
// Retrieve array
NSMutableArray *URLS = [self generateURLS];
for (NSMutableArray *entity in URLS){
NSString *url = entity[0];
// Enter group
dispatch_group_enter(group);
NSString *token = [FitbitAuthHandler getToken];
FitbitAPIManager *manager = [FitbitAPIManager sharedManager];
// Get URL
[manager requestGET:url xml:0 Token:token success:^(NSDictionary *responseObject) {
// Do stuff with output
printf("%s",[[responseObject description]UTF8String]);
// Leave group
dispatch_group_leave(group);
} failure:^(NSError *error) {
NSLog("%@",error);
// Leave group
dispatch_group_leave(group);
}];
}
// Wait for all of group to complete
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"Complete");
});
}
Я пытался исследовать в Интернете, как это сделать, но все мои идеи провалились, мой метод applicationDidEnterBackground работает правильно, когда приложение закрывается, но все остальное не работает правильно, например, URLЗапросы.Любые предложения будут оценены.