2014-09-10 3 views
0

Je dois appeler les appels Rest Api (POST et GET) lorsque mon application est en mode d'arrière-plan. J'ai essayé de lire des documents Apple qui suggèrent que nous ne pouvons pas utiliser DATATASK en arrière-plan. Nous pouvons seulement télécharger et télécharger des fichiers dans BG. S'il vous plaît aidez-moi. Merci d'avance.Comment utiliser Rest Api à l'aide de Session NSURL iOS 7

Répondre

-1

J'ai créé une méthode qui utilise la méthode GET et envoie des données JSON à l'API. Vous pouvez également configurer votre NSURLSession selon vos besoins, j'utilise la session par défaut ici.

+ (void)callGETAPIUsingSessionWithParams:(NSDictionary *)params andAPIName:(NSString *)apiName andCompletionHandler:(void(^)(NSDictionary *result))completionHandler 
{ 
    NSLog(@"[GET] Request %@ : %@",apiName, params); 

    NSString *getURL = [self addQueryStringToUrlString:[NSString stringWithFormat:@"%@/%@",<Your Domain>,apiName] withDictionary:params]; 
    NSURL *URL = [NSURL URLWithString:getURL]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL]; 
    NSURLSession *session = [NSURLSession sharedSession]; 

    [request setHTTPMethod:@"GET"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

    NSURLSessionDataTask *task = [session dataTaskWithRequest:request 
              completionHandler: 
            ^(NSData *data, NSURLResponse *response, NSError *error) 
            { 
             if([data length] > 0) 
             { 
              NSError *err = nil; 
              NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&err]; 
              NSLog(@"[GET] Response for %@",apiName); 
//           NSLog(@"[%@] => %@",apiName, dictResponse); 
              completionHandler(dictResponse); 
             } 
             else{ 
              NSLog(@"Failed To Get Response for : %@",params); 
              completionHandler(@{@"result":@"Failed"}); 
             } 
            }]; 

    [task resume]; 
} 

Vous pouvez le modifier pour faire appel POST.

+0

Je le veux en arrière-plan lorsque l'application est en arrière-plan – iShameem

+0

Cela ne fonctionne pas pour les tâches en arrière-plan. Les tâches de données ne sont explicitement pas prises en charge en arrière-plan. – DoctorPangloss

Questions connexes