Не могу получить письмо от ApplePay PKPaymentAuthorizationViewController

Я использую ApplePay и требую электронную почту в качестве контактной информации. Когда я пытаюсь получить электронное письмо, я получаю результат "Доставка", который я даже не знаю, откуда он.

Мне необходимо заполнить поле адреса электронной почты в запросе и заполнить адрес электронной почты.

request.requiredShippingAddressFields = PKAddressField.PostalAddress | PKAddressField.Email

Вот код:

func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!) {

    let address: ABRecord! = payment.shippingAddress

    let emails: ABMultiValueRef = ABRecordCopyValue(address, kABPersonEmailProperty).takeRetainedValue() as ABMultiValueRef
    if ABMultiValueGetCount(emails) > 0 {
        let email = ABMultiValueCopyLabelAtIndex(emails, 0).takeRetainedValue()
        NSLog(email)  //Here prints "Shipping"
     }
    ...
 }

Это правильное место, чтобы получить электронную почту? Если нет, то каков правильный подход?


Пытаясь получить номер телефона (kABPersonPhoneProperty), результат также печатается как "Доставка".

2 ответа

Решение

У вас есть тонкая "опечатка" в вашем коде:). ABMultiValueCopyLabelAtIndex копирует метку для записи (которая является "Доставка"). Вы хотите значение с помощью ABMultiValueCopyValueAtIndex,

  let emails: ABMultiValueRef = ABRecordCopyValue(address, kABPersonEmailProperty).takeRetainedValue() as ABMultiValueRef
  if ABMultiValueGetCount(emails) > 0 {
    let email = ABMultiValueCopyValueAtIndex(emails, 0).takeRetainedValue() as String
    NSLog(email)  //Here prints your email address!
  }

Для iOS9 и новее

let email = payment.shippingContact?.emailAddress
Другие вопросы по тегам