Jecomment appeler API de l'API en utilisant le bloc NSURLSession
NSString* FBAuthoValue= @"TESTINGCONSTANT";
Le clic de bouton de chargement, il appelle HitLoadAPI
J'appelle mon API comme ci-dessous HitLoadAPI, maintenant si fin à mon serveur mon FBAuthoValue est le changement que j'ai besoin de frapper une autre API pour obtenir la valeur d'actualisation de FBAuthoValue, et définir dans HitLoadAPI.
1) L'utilisateur a frappé HitLoadAPI avec FBAuthoValue = @ valeur "TESTINGCONSTANT", mais comme dans le serveur maintenant FBAuthoValue = @ "NewTestCode", il retourne httpresponsecode 909, sur 909 que je dois appeler refreshFBAuthValue api, et de mettre cette valeur de retour à HitLoadAPI, et l'API fonctionne correctement. 2) si le jeton FBAuthoValue change sur le serveur, appelez l'API refreshFBAuthValue, et sa valeur de retour doit définir et appeler à nouveau HitLoadAPI, sans connaître l'utilisateur.
NOTE: je dois frapper plusieurs API un après l'autre, on suppose API-1, API-2, API-3 et ainsi de suite, et si FBAuthoValue, si une api, les changements dans le serveur alors besoin de rafraîchir que FBAuthoValue et ensuite la même API doivent être appel, sans affecter ou bloquer à l'utilisateur. Je vais récompenser 50 bounty à coup sûr. Vue d'ensemble: Appel API-1, pendant ce temps si le jeton expire, besoin d'appeler le jeton expirer api, et l'API-1 se souviendra à nouveau, sans l'utilisateur appuyez à nouveau sur le bouton Load.
Voici mon code
-(void)HitLoadAPI
{
NSError *error;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *url = [NSURL URLWithString:@"[JSON SERVER"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
[request setValue:FBAuthoValue forHTTPHeaderField:FBAUTH];
NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys: @"TEST IOS", @"name",
@"IOS TYPE", @"typemap",
nil];
NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
[request setHTTPBody:postData];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary* headers = [(NSHTTPURLResponse *)response allHeaderFields];
//NSLog(@" headers =%@",headers);
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
//NSLog(@"response status code: %ld", (long)[httpResponse statusCode]);
if([httpResponse statusCode]==909)
{
FBAuthoValue =[self refreshFBAuthValue];
//what to do here so the current API hit will be call again....
}
}];
[postDataTask resume];
}
-(NSString *) refreshFBAuthValue
{
//hit api to get new refresh token code here need its calling code as well as the block coding cause it response so late which cause return value nil...to HitLoadAPI
return FBaccess_token; //it will return refresh FBaccess_token code
}
J'ai une classe commune pour toutes les API de manutention, comment le faire là? – iphonemaclover
La même approche s'appliquera à toutes les méthodes pour l'appeler récursivement pour une condition correspondante. et il doit y avoir un point de sortie dans la méthode pour ne pas entrer dans une boucle. –
need [self thismethodisnotfixecanchange: FBAuthoValue]; – iphonemaclover