Apple Pay не работает после обновления Xcode до версии 10.4

Apple Pay отлично работает в симуляторе, но после обновления Xcode до 10.4 перестала работать.

  1. Появится всплывающее окно Apple Pay.
  2. После того, как вы нажмете «Оплатить с паролем», он скрывается без аутентификации платежа.

  3. Метод - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion {} не вызывается.

Код:

NSString *merchantIdentifier = [STPPaymentConfiguration sharedConfiguration].appleMerchantIdentifier;
PKPaymentRequest *paymentRequest = [Stripe paymentRequestWithMerchantIdentifier:merchantIdentifier country:@"US" currency:currencyCode];
paymentRequest.paymentSummaryItems = @[
   [PKPaymentSummaryItem summaryItemWithLabel:@"Fancy Hat" amount:[NSDecimalNumber decimalNumberWithString:amount]],
   // The final line should represent your company;
   // it'll be prepended with the word "Pay" (i.e. "Pay iHats, Inc $50")
   [PKPaymentSummaryItem summaryItemWithLabel:@"iHats, Inc" amount:[NSDecimalNumber decimalNumberWithString:amount]],
];

if ([Stripe canSubmitPaymentRequest:paymentRequest]) {
    // Setup payment authorization view controller
    PKPaymentAuthorizationViewController *paymentAuthorizationViewController = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
    paymentAuthorizationViewController.delegate = self;

    // Present payment authorization view controller
    FlutterViewController* controller = (FlutterViewController* )[[UIApplication sharedApplication].keyWindow rootViewController];
    [controller presentViewController:paymentAuthorizationViewController animated:YES completion:nil];
}

person Shiv Pogra    schedule 21.08.2019    source источник
comment
точно такая же проблема после обновления до Xcode 10.3. Заметил, что подпись для didAuthorizePayment метода изменилась на func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) и помечена как iOS11 +. Но переход на новую подпись мне не помог.   -  person Vitalii    schedule 17.09.2019


Ответы (1)


Они изменили подпись, так что есть новый метод для вызова для iOS11 +, в то время как старый метод по-прежнему необходим для iOS9 и iOS10:

 /// for iOS 9 and iOS 10
 func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                          didAuthorizePayment payment: PKPayment,
                                           completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
    ...
 }

 @available(iOS 11.0, *)
 func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                          didAuthorizePayment payment: PKPayment,
                                              handler: @escaping (PKPaymentAuthorizationResult) -> Void) {
    ...
 }

И

Кажется, что в 12.4 Simulator не работает. Вам нужно будет протестировать на реальном устройстве. Симуляторы с предыдущими версиями iOS вроде бы работают (у меня iOS10 работает). Проблема симулятора обсуждается в этом вопросе: ApplePay `paymentAuthorizationViewController: didAuthorizePayment: обработчик:` не вызывается в Xcode 10.3

person Vitalii    schedule 17.09.2019