Apple Pay 应用内配置的设备选择

veg*_*dio 4 ios swift applepay

我在一家金融科技公司工作,该公司在我们的卡中提供对 Apple Pay 的支持,即我们的用户可以选择使用我们的应用程序(应用程序内配置)将他们的卡添加到 Apple Pay。我们公司已经从 Apple 获得了适当的应用内配置权利,并且整个应用内配置流程正在按预期进行。

当用户点击我们应用程序中的“添加到 Apple Wallet”按钮来配置他的卡时,我们将调用以下代码:

let config = PKAddPaymentPassRequestConfiguration()
config.cardholderName = "\(firstName) \(lastName)"
config.localizedDescription = "MyApp Card"
config.primaryAccountSuffix = String(cardSuffix)
config.paymentNetwork = .visa

// Present the Apple Pay ViewController
let controller = PKAddPaymentPassViewController(requestConfiguration: config, delegate: self)
UIApplication.shared.delegate?.window??.rootViewController?.present(controller!, animated: true)
Run Code Online (Sandbox Code Playgroud)

如果用户已配对 Apple Watch,则会出现一个屏幕,要求他选择要在哪个设备上添加卡:在 iPhone 上还是在 Apple Watch 上(请参阅随附的屏幕截图)。用户选择设备后,配置过程将按预期成功继续。

但是,如果用户点击“添加到 Apple 钱包”按钮,并且他已经将卡添加到其中一台设备(例如 Apple Watch),那么上面的代码将再次被调用,但他会再次受到欢迎同一屏幕要求他选择要在 iPhone 或 Apple Watch 上添加该卡的设备,即使该卡已添加到 Apple Watch 上。

据我了解,由于该卡已添加到 Apple Watch 上,因此只有 iPhone 应该显示为添加该卡的有效选项。

在上面的代码中我还需要做些什么来确保只有可用的设备(我的意思是,只有尚未在 Apple Pay 上添加该卡的设备)才会在设备选择中列出?

veg*_*dio 5

我找到了答案,所以我回答我自己的问题:

创建PKAddPaymentPassRequestConfiguration对象后,您需要为该字段设置primaryAccountIdentifier客户银行帐户的唯一标识符(您可能会从银行获得此信息)。

如果您查看我在问题中发布的代码,您会注意到我在对象中设置了许多字段PKAddPaymentPassRequestConfiguration,但没有设置primaryAccountIdentifier. 这就是为什么它对我不起作用。

这是正确的代码,primaryAccountIdentifier最后添加了:

let config = PKAddPaymentPassRequestConfiguration()
config.cardholderName = "\(firstName) \(lastName)"
config.localizedDescription = "MyApp Card"
config.primaryAccountSuffix = String(cardSuffix)
config.paymentNetwork = .visa
config.primaryAccountIdentifier = "some unique identifier"
Run Code Online (Sandbox Code Playgroud)

通过此更新,在您将设备添加到 Apple Pay 后,当您想要使用同一帐户添加第二台设备时,它将不再显示为配置选项。