Всплывающее окно Apple Pay не отображается с определенными адресами доставки по умолчанию

Я нахожусь во Франции и пытаюсь открыть лист Apple Pay в своем приложении. Когда я устанавливаю адрес доставки по умолчанию во Франции в настройках, он работает. (И тогда я могу переключиться на адрес в США)

Когда я устанавливаю адрес доставки по умолчанию в США в настройках, иногда он работает, но часто не работает. В случае сбоя лист Apple Pay просто не отображается. (экземпляр PKPaymentAuthorizationViewController и экземпляр PKPaymentRequest верны, а не nil)

Это очень странно...


person The Windwaker    schedule 09.02.2016    source источник
comment
Подразумеваемый вопрос, почему он не появляется. Можете ли вы улучшить этот вопрос с помощью соответствующего кода и любого вывода консоли lldb, который может дать подсказку? Каким-то образом условия различаются между рабочим и нерабочим случаями. Когда я вижу кажущуюся случайность, моя первая мысль — это состояние гонки.   -  person danh    schedule 09.02.2016
comment
Вы правы, я только что сделал простой код Apple Pay, все в основном потоке, и он работает. Буду разбираться, в чем проблема.   -  person The Windwaker    schedule 10.02.2016


Ответы (1)


Нашел! Это не связано с конкретными адресами!

Реализация этого метода делегата таким образом не работает

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                  didSelectShippingContact:(PKContact *)contact
                                completion:(void (^)(PKPaymentAuthorizationStatus,
                                                     NSArray<PKShippingMethod *> * _Nonnull,
                                                     NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{
    completion(PKPaymentAuthorizationStatusSuccess, @[], _currentRequest.paymentSummaryItems);
}

(_currentRequest — это PKPaymentRequest, который я использовал для всплывающего окна PKPaymentAuthorizationViewController, которое сохраняется как атрибут экземпляра)

Я не могу это объяснить, но установка PKPaymentAuthorizationStatusInvalidShippingPostalAddress вместо PKPaymentAuthorizationStatusSuccess в завершении будет работать. И установка точки останова, когда мы вызываем завершение, также позволит отобразить лист Apple Pay.

Но если вы все же хотите вернуть PKPaymentAuthorizationStatusSuccess в методе завершения, используйте его следующим образом:

completion(PKPaymentAuthorizationStatusSuccess, nil, _currentRequest.paymentSummaryItems);

Да, установка значения nil для указанного параметра nonnull будет работать!

person The Windwaker    schedule 10.02.2016