2016-11-06 26 views
5

i istek gönderildi zaman, Im başarısızlık bloğunda bu mesajı almaya,AFNetworking sorunu: Projemde AFNetworking kullandık yetkisiz (401)

Hata Alan = com.alamofire.error.serialization. yanıt Kodu = -1.011 "İstek başarısız oldu: yetkisiz (401)" UserInfo = {com.alamofire.serialization.response.error.response = com.alamofire.serialization.response.error.data = < 7b227375 63636573 73223a66 616c7365 2c226d65 73736167 65223a22 41757468 656e7469 63617469 6f6e2066 61696c65 64227d>, NSLocalizedDescription = İstek başarısız oldu: Yetkisiz (401)}

Bu benim AFNetworking kullanarak isteği yolluyorum nasıl.

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:BASE_URL]]; 

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil]; 

NSString *path = [NSString stringWithFormat:@"/api/##/##/##/sign_in"]; 

NSString *params = @"{\"user\": {\"uid\": \"10236412002551\",\"access_token\":\"g6tdbvc34seadcx7yufbbcgvf8ijhss\",\"email\": \"[email protected]\",\"latitude\": \"6.927079\",  \"longitude\": \"79.861243\",\"remote_avatar_url\": \"\"}}"; 

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 
[policy setValidatesDomainName:NO]; 
[policy setAllowInvalidCertificates:YES]; 

[manager POST:path parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { 
    if([[responseObject objectForKey:@"error_code"] intValue]==0){ 
     if (success) { 
      success(userArray); 
     } 
    } 
    } failure:^(NSURLSessionDataTask *task, NSError *error) { 
     if (failure) { 
      failure(error); 
     } 
    }]; 
} 

Ama NSURLSession kullanarak doğru yanıtı almak mümkün olacak olursa. (Kod aşağıda bakınız)

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]]; 

    NSURL * url = [NSURL URLWithString:@"http://##/api/##/##/##/sign_in"]; 
    NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url]; 

    NSString * params [email protected]"{\"user\": {\"uid\": \"10236412002551\",\"access_token\":\"g6tdbvc34seadcx7yufbbcgvf8ijhss\",\"email\": \"[email protected]\",\"latitude\": 6.927079,  \"longitude\": 79.861243,\"remote_avatar_url\": \"\"}}"; 

    [urlRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest 
                 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
                  NSLog(@"Response:%@ %@\n", response, error); 
                  if(error == nil) 
                  { 
                   NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 

                   NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

                   NSLog(@"Data = %@",text); 
                   NSLog(@"Data = %@",json); 
                  } 

                 }]; 
    [dataTask resume]; 

Ben AFNetworking kullanarak ilgileniyorum, Ama bu sorun nedeniyle Kazandım ileriye doğru hareket edemez. Lütfen AFNetworking ile sorunu düzeltmeme yardımcı olun.

Bu

ben göndermesi gerektiğini isteği,

{ 
    "user": { 
     "uid": "102364120025511", 
     "access_token": "g6tdbvc34seadcx7yufbbcgaavf8ijh", 
     "email": "[email protected]", 
     "latitude": 6.927079, 
     "longitude": 79.861243, 
     "remote_avatar_url": "" 
    } 
} 

Bu benim almalısınız yanıtı

{ 
    "success": true, 
    "message": "Successfully authenticated", 
    "user": { 
    "id": 123, 
    "email": "[email protected]", 
    "provider": "facebook", 
    "latitude": 6.927079, 
    "longitude": 79.861243, 
    "avatar": { 
     "url": "", 
     "thumb": "" 
    } 
    } 
} 
+0

BTW, "7b227375 ..." verilerinin ne içerdiğini merak ediyorsanız, bu, {{"başarı": false, "message": "Authentication failed"} türünde bir JSON yüküdür}. – Rob

cevap

1

Sen sağlamakta olduğunuz olduğunu aşağıdadır params bir JSON dizesi olarak ve daha sonra kullanmak üzere AFNetworking talimat Daha sonra bir JSON yapısında bu dizeyi temsil etmek için bir AFJSONRequestSerializer. Net etki, bunu iki kez JSONified yapmış olmanızdır.

Sen sözlük nesne sağlamak ve AFNetworking, sizin için JSON oluşturmak izin vermeli mesela: Bu arada

NSString *params = @{@"user": @{@"uid": @"10236412002551", @"access_token": @"g6tdbvc34seadcx7yufbbcgvf8ijhss", @"email": @"[email protected]", @"latitude": @6.927079, @"longitude": @79.861243, @"remote_avatar_url": @""}}; 

aşağıdaki konularda çok daha sağlam olacaktır için (NSJSONSerialization kullanır) AFNetworking JSON inşa izin Bunu kendin yapmaya çalışıyorum. Yani, NSURLSession yaklaşımını kullansanız bile, bu iç içe geçmiş sözlük yapısını oluşturmayı ve ardından JSON veri yükünü oluşturmak için NSJSONSerialization kullanmayı öneririm. Veya AFNetworking'i kullanırsanız, bunu sizin için yapar.

+0

Harika yardımlar bro @Rob, Teşekkürler :) – Infaz