Можем ли мы добавить новый адрес доставки в Apple Pay

В моем приложении пользователь уже добавил "Адрес доставки". Я хочу назначить этот адрес как shippingAddress shippingContact, а пользователь платит Apple Pay.

Я пробовал с приведенным ниже кодом «shippinAddress» — это мой словарь, в котором уже есть адрес, который я хочу использовать в качестве адреса доставки Apple Pay.

PKPaymentRequest *paymentRequest = [Stripe paymentRequestWithMerchantIdentifier:merchantId];
paymentRequest.shippingContact = [self getShippingAddress_ApplePay];

-(PKContact*)getShippingAddress_ApplePay
{

PKContact *address = [[PKContact alloc] init];

NSPersonNameComponents *personName = [[NSPersonNameComponents alloc] init];
personName.givenName = [shippinAddress valueForKey:@"firstname"];
personName.familyName = [shippinAddress valueForKey:@"lastname"];


CNMutablePostalAddress * postalAddress = [[CNMutablePostalAddress alloc] init];
postalAddress.street = [shippinAddress valueForKey:@"street"];
postalAddress.city = [shippinAddress valueForKey:@"city"];
postalAddress.state = [shippinAddress valueForKey:@"region"];
postalAddress.postalCode = [shippinAddress valueForKey:@"postcode"];
postalAddress.ISOCountryCode = [shippinAddress valueForKey:@"country_id"];

CNPhoneNumber *phone = [[CNPhoneNumber alloc] initWithStringValue:[shippinAddress valueForKey:@"telephone"]];

address.name = personName;
address.emailAddress = [KCustomerInfo valueForKey:@"email"];
address.postalAddress = postalAddress;
address.phoneNumber = phone;

return address;

}

Я не получу этот адрес, пока paymentAuthorizationViewController присутствует.

Я тоже пытался установить это paymentRequest.requiredShippingAddressFields = PKAddressFieldAll;

Может ли кто-нибудь предложить, мы можем назначить этот путь или нет? Да, тогда я ошибаюсь в том, как я использовал?

Спасибо


person Niks    schedule 15.01.2016    source источник


Ответы (1)


По сути, нет никакого способа получить адрес, пока будет представлен PKPaymentAuthorizationController. Вам нужно дождаться обратного вызова делегата:

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus))completion

Как вы, возможно, знаете, вы можете извлечь информацию об адресе из объекта PKPayment.

Существуют также обратные вызовы, которые будут запущены, если пользователь выбрал адрес внутри PKPaymentAuthorizationController :

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                   didSelectShippingMethod:(PKShippingMethod *)shippingMethod
                                completion:(void (^)(PKPaymentAuthorizationStatus status, NSArray<PKPaymentSummaryItem *> *summaryItems))completion;

or

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                  didSelectShippingContact:(PKContact *)contact
                                completion:(void (^)(PKPaymentAuthorizationStatus status, NSArray<PKShippingMethod *> *shippingMethods,
                                                     NSArray<PKPaymentSummaryItem *> *summaryItems))completion NS_AVAILABLE_IOS(9_0);

ОБНОВЛЕНИЕ Хорошо, кажется, я неправильно понял вопрос. Чтобы передать адрес PKAuthController, вам необходимо сохранить этот адрес в соответствующем контакте адресной книги.

person Sebastian Boldt    schedule 15.01.2016
comment
@ Привет .. спасибо за ответ, на самом деле я хочу, чтобы мой адрес был за пределами Apple Pay, как в моем одном контроллере, я уже запрашивал у пользователя адрес, и теперь я хочу использовать этот адрес в качестве адреса доставки в Apple Pay. Итак, могу ли я назначить этот адрес или есть единственный способ добавить адрес через контроллер авторизации? - person Niks; 18.01.2016
comment
PKPaymentAuthController использует сохраненный контакт из адресной книги. Одна вещь, которую вы можете сделать, это сохранить адрес внутри соответствующего пользовательского контакта, тогда он автоматически появится внутри PKAuthController, я думаю, стоит попробовать. Было бы интересно узнать. - person Sebastian Boldt; 18.01.2016
comment
хм, ладно, тогда я проверю так - person Niks; 19.01.2016