Как сделать запрос API с токеном доступа? - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу использовать токен доступа для каждого вызова API, который я делаю после входа в приложение и получения токена доступа. Я пробовал так много вещей, но безрезультатно. Я получаю правильный ответ, когда проверяю его на почтальоне. Я не знаю, что я делаю неправильно. Я использую AFNetworking (AFHTTPSessionManager является базовым классом NetworkIntractor), это код моего сетевого уровня:

+(NetworkIntractor *)sharedManager{
static NetworkIntractor *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    config.URLCache = nil;
    config.timeoutIntervalForRequest = 15.0f;
    config.timeoutIntervalForResource =20.0f;
    if ([USERDEFAULT boolForKey:LOGGEDIN] == YES) {
        [manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults]valueForKey:AccessToken] forHTTPHeaderField:@"Authorization"];
    }
    manager = [[NetworkIntractor alloc]initWithBaseURL:[NSURL URLWithString:BASEURL] sessionConfiguration:config];
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    });
return manager;}


void call_getNetworkingAPI(NSURL *url, SuccessBlock successBlock, FailureBlock failureBlock){

NSURLSessionDataTask *task = [[NetworkIntractor sharedManager].session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error == nil) {

        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        if (dict != nil) {
            successBlock(dict,response);
        }
    }else
    {
        failureBlock(error,response);
    }
}];
[task resume];

}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 сентября 2018

Мне не хватало только ключа управления кешем в заголовке, вот и все.

NSDictionary *headers = @{ @"Authorization": [NSString stringWithFormat:@"Bearer %@", [[NSUserDefaults standardUserDefaults] valueForKey:AccessToken]],
                           @"Cache-Control": @"no-cache"
                           };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BASEURL, urlStr]]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    DLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    DLog(@"%@", httpResponse);

                                                    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

                                                    if (dict != nil) {
                                                        successBlock(dict,httpResponse);
                                                    }
                                                    else
                                                    {
                                                    failureBlock(error,httpResponse);
                                                    }

                                                }
                                            }];

[dataTask resume];
...