2013-07-03 4 views
1

큰 상거래 상점의 콘텐츠를 표시하는 기존 앱에서 기능을 확장하려고합니다. 기본적으로 iPhone에서 입력 한 이메일 주소가 고객 목록에 있는지 확인한 다음이를 기반으로 작업을 수행 할 수 있도록 앱에서 확인해야합니다. API 키와 통화 방법을 사용하여 고객 목록을 가져 왔지만 iOS에서이 작업을 가장 효과적으로 수행하는 방법을 잘 모릅니다. 누군가 내가 이것을 호출하기 위해해야 ​​할 일에 대한 조언을 해줄 수 있습니까?BigCommerce API를 사용하여 iOS에서 고객 이메일 받기

업데이트 : 지금까지 다음 코드를 사용했습니다 : 로그에

-(IBAction)gettingcustomers { 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"mystoreserver.customers.json"] 
                  cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                 timeoutInterval:10]; 

    [request setHTTPMethod: @"GET"]; 

    NSError *requestError; 
    NSURLResponse *urlResponse = nil; 


    NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError]; 
    NSLog(@"%@", requestError); 
} 

오류가 보여줍니다

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0xa7d12e0 {NSErrorFailingURLKey=mystoreserver.customers.json, NSErrorFailingURLStringKey=mystoreserver.customers.json, NSUnderlyingError=0xa7da430 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"} 

답변

0

첫째, 오류가 kCFURLErrorUserCancelledAuthentication을 의미한다.

코드에서 몇 가지 문제가 있습니다 :

  1. 분까지 몇 초 정도 걸릴 수 있습니다 네트워크 요청 이후 메인 스레드에서 동기 네트워크 요청 (! 큰 안됐다)를 호출하지 마십시오, 메인 스레드와 UI를 차단합니다.

  2. 앱이 셀룰러 연결로 작동하기를 원한다면 짧은 시간 제한을 설정하지 마십시오. 기본값은 OK입니다. 더 좋게 설정하면 사용자가 취소 할 수 있도록 매우 높게 설정합니다 (비동기 모드에서 NSURLConnection을 사용해야 함).

  3. 적절하게 오류를 확인하십시오. 기본적으로 NSError 개체 포인터에 대한 포인터를 마지막 매개 변수로 사용하는 메서드는 반환 값을 사용하여 성공 또는 실패를 나타냅니다. 즉, 오류가 있는지 여부를 알아 내기 위해 만 반환 값을 확인하십시오! ! 반환 값이 오류를 나타내는 경우에만 오류 매개 변수가 의미있는 NSError 개체를 가리킬 수 있습니다.

  4. 클라이언트 인증의 경우 요청이 인증되지 않는 이유는 "잘 알려진"자격 증명 저장소 (키 체인)에 자격 증명이 없을 가능성이 있기 때문입니다. 자격 증명을 직접 설정하는 사용자 지정 인증 방법을 구현하려면 비동기 모드에서 NSURLConnection을 사용하고 대리자 메서드를 구현해야합니다. 다른 이유도있을 수 있습니다. 이 작업을 수행하기 위해 지금 무엇을해야

는, 비동기 모드에서

  1. 사용 NSURLConnection - 당신은 가능성이 대리자 메서드 connection:willSendRequestForAuthenticationChallenge:를 구현해야합니다.

  2. 예를 들어 요청에 대한 헤더를 올바르게 설정했는지 확인하십시오. "Content-Type"헤더와 아마도 "Accept"헤더를 설정하는 것은 상처를주지 않을 것입니다.

  3. 수정 시간 초과 (기본값).

  4. 오류를 올바르게 검사하십시오.

  5. 응답이 상태 코드인지, Content-Type인지 확인하십시오.

  6. 응답 데이터를 처리하십시오.

  7. 주어진 인증 시도에 따라 connection:willSendRequestForAuthenticationChallenge:을 구현하십시오.