2014-10-22 2 views
1

나는 Apple에서 제공 한 ABRecordRef에서 추출한 배송 주소를 얻으려고합니다. 나는 다음했지만 내 거리가 항상 nil로 반환 : 내가 잘못 뭐하는 거지애플 지불 배송 주소 번지

ABMultiValueRef addresses = ABRecordCopyValue(abRecordRef, kABPersonAddressProperty); 

for (CFIndex index = 0; index < ABMultiValueGetCount(addresses); index++) 
{ 
    CFDictionaryRef properties = ABMultiValueCopyValueAtIndex(addresses, index); 
    NSString *street = [(__bridge NSString *)(CFDictionaryGetValue(properties, kABPersonAddressStreetKey)) copy]; 
    NSLog(@"street: %@", street); 
} 

?

도 함께 디버깅 할 때 다음

ABMultiValueRef 0x17227fbc0 with 1 value(s) 
    0: Shipping (0x17227fa00) - { 
    City = "Marina del Rey"; 
    Country = "United States"; 
    State = California; 
    ZIP = 90292; 
} (0x172447440) 

편집 :

나는 또한 이름을 액세스하는 문제가 발생하고있어

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller 
        didSelectShippingAddress:(ABRecordRef)customShippingAddress 
           completion:(void (^)(PKPaymentAuthorizationStatus status, NSArray *methods, NSArray *items))completion 
{ 
    NSLog(@"%@", ABRecordCopyValue(customShippingAddress, kABPersonAddressProperty); 
    completion(PKPaymentAuthorizationStatusSuccess, ..., ...); 
} 

내가없는 거리와 함께이를 얻을 수 휴대 전화 속성 :

이 (3210)는 PKPaymentRequest가 생성되는 방법입니다

PKPaymentRequest *pr = [[PKPaymentRequest alloc] init];  
[pr setMerchantIdentifier:@"********"]; 
[pr setCountryCode:@"US"]; 
[pr setCurrencyCode:@"USD"]; 
[pr setMerchantCapabilities:PKMerchantCapability3DS]; 
[pr setSupportedNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]]; 

[pr setPaymentSummaryItems:[self paymentSummaryItems]]; 

[pr setRequiredBillingAddressFields:PKAddressFieldAll]; 
[pr setRequiredShippingAddressFields:PKAddressFieldAll]; 

[pr setShippingMethods:[self supportedShippingMethods]]; 

답변

5

이 애플의 문서가 큰 아니었다 밝혀 그러나 문제는 paymentAuthorizationViewController:didSelectShippingAddress:completion:의 대리인 콜백 부분 주소가 항상가 돌려 주어집니다 .

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller 
         didAuthorizePayment:(PKPayment *)payment 
           completion:(void (^)(PKPaymentAuthorizationStatus))completion 
{ 
    // Use this instead. 
    [payment shippingAddress]; 
} 

가 나는 또한 필요한 청구 지 주소를 설정하는 호출 (아마도 별도의 버그를) 제거 : 수정도에서 콜백을 설정하는 것입니다.

+0

수정하십시오. 보안을 위해 부분 주소 만 반환되므로 사용자가 결제를 인증하기 전에 표시 할 배송료를 계산할 수 있습니다. 일단 인증되면 사용자는 기본적으로 제공 한 전체 주소에 대한 액세스를 승인했습니다. 그렇지 않으면 배송이 불가능합니다. – runmad

+0

캐나다 및 영국 우편 번호가 전체 우편 번호 (일부만)로 반환되지 않으므로 특정 운송 업체가있는 국가의 배송료를 계산하기가 더 어려워 질 수 있습니다. – runmad