Apple Pay 弹出窗口未显示特定的默认送货地址

Posted

技术标签:

【中文标题】Apple Pay 弹出窗口未显示特定的默认送货地址【英文标题】:Apple Pay popup not showing with specific default shipping addresses 【发布时间】:2016-02-09 14:56:06 【问题描述】:

我在法国并试图在我的应用中弹出 Apple Pay 表。 当我在“设置”中设置法国默认送货地址时,它可以工作。 (然后我可以切换到美国地址)

当我在“设置”中设置美国默认送货地址时,它有时会起作用,但经常会失败。当它失败时,Apple Pay 表根本不会显示。 (PKPaymentAuthorizationViewController 实例和PKPaymentRequest 实例是正确的,而不是nil

这很奇怪......

【问题讨论】:

隐含的问题是,“为什么不显示”。你能用相关的代码和任何可能提供线索的 lldb 控制台输出来改进这个问题吗?不知何故,工作和非工作情况之间的条件有所不同。当我看到明显的随机性时,我首先想到的是“竞争条件”。 你说得对,我只是做了一个简单的苹果支付代码,全部在主线程中,它可以工作。我会调查一下,找出问题所在。 【参考方案1】:

找到了! 与具体地址无关!

以这种方式实现这个委托方法是行不通的

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

_currentRequest是我用来弹出PKPaymentAuthorizationViewControllerPKPaymentRequest,保存为实例属性)

我无法解释,但在完成中设置 PKPaymentAuthorizationStatusInvalidShippingPostalAddress 而不是 PKPaymentAuthorizationStatusSuccess 会起作用。 而且在我们调用completion的时候设置一个断点也会让Apple Pay sheet显示出来。

但是如果你仍然希望在完成方法中返回PKPaymentAuthorizationStatusSuccess,那么使用它:

completion(PKPaymentAuthorizationStatusSuccess, nil, _currentRequest.paymentSummaryItems);

是的,将nil 值设置为nonnull 指定参数将起作用!

【讨论】:

以上是关于Apple Pay 弹出窗口未显示特定的默认送货地址的主要内容,如果未能解决你的问题,请参考以下文章

Apple pay 带有无效的送货地址

正在加载 Apple Pay 送货地址 No Street

Google Pay 不显示总价或 displayItems [关闭]

Braintree Apple Sandbox Pay 扫描指纹 iOS 后显示付款未完成错误

为 Apple Pay 请求添加默认账单联系人

Apple Pay - 存折本为空