Не могу получить письмо от 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