检查卡是不是已添加到 PassKit 库

Posted

技术标签:

【中文标题】检查卡是不是已添加到 PassKit 库【英文标题】:Check if card already added to PassKit library检查卡是否已添加到 PassKit 库 【发布时间】:2018-12-21 12:05:14 【问题描述】:

我正在尝试使用 PKAddPaymentPassRequest 将银行卡(“支付通行证”)添加到 Wallet。

所以问题是,我如何查询通行证库以检查我的卡(或任何其他卡)是否已经在库中? 例如,在我的应用中的卡片 UI 上显示“Apple Pay 已启用”复选标记。

【问题讨论】:

请参阅此主题以获得我给出的类似答案:***.com/questions/51060832/… @ScottCondron 谢谢,但您的回答只是显示 PaymentKit 控制器,同时我很高兴知道如何询问 PaymentKit(或任何其他适当的框架)我的卡是否已添加到库中。 您可以使用let library = PKPassLibrary() let passes = library.passes(of: .payment) 不过您需要获得授权才能查看这些通行证。 你在这里找到任何解决方案了吗,@AndreySolovyov?我也有同样的问题。同时PKPassLibrary().passes()PKPassLibrary().remotePaymentPasses() 返回一个空数组。我通过电子钱包应用手动添加了我的卡。 【参考方案1】:

您可以创建一个 PKPassLibrary 并获取类型为“支付卡”的通行证的 PKPass 数组。 然后循环遍历 PKPass 数组,通过其主帐户标识符或卡后缀检查卡是否已添加,然后相应地更改您的 UI。

在斯威夫特中:

let passLibrary = PKPassLibrary.init()
let paymentPasses = passLibrary.passes(of: .payment) // get PKPass array of payment card
for pass in paymentPasses 
    guard let paymentPass = pass.paymentPass else  return 
    // or check by suffix paymentPass.primaryAccountNumberSuffix
    if paymentPass.primaryAccountIdentifier == "yourCardAccountIdentifier" 
        // do something
    

在 Objective-C 中:

PKPassLibrary *passLibrary = [[PKPassLibrary alloc] init];
NSArray<PKPass *> *paymentPasses = [passLibrary passesOfType:PKPassTypePayment];

for (PKPass *pass in paymentPasses) 
    PKPaymentPass * paymentPass = [pass paymentPass];
    if([paymentPass primaryAccountIdentifier] == @"yourCardAccountIdentifier") 
        // do something
    

不要忘记在您的项目中包含 com.apple.developer.payment-pass-provisioning 权利。希望这对你有帮助;)

【讨论】:

我有一个问题,passLibrary.passes 返回一个空数组,还有passLibrary.remotePaymentPasses()。你能帮我解决这个问题吗?我通过电子钱包应用手动添加了我的卡。 passLibrary.passes 只会退回您(发卡机构)添加的凭证,出于安全原因,不会退回钱包中的所有凭证。简单地通过钱包手动添加卡片将无法扫描钱包中的所有卡片。如果您是发卡机构,请确保您的 PNO 或服务提供商已添加相应的密钥。 @paky 您从哪里获得“yourCardAccountIdentifier”值? @Varrry 它等于您信用卡的 PAN(主帐号),简而言之,就是您塑料信用卡上的 14 - 16 位数字。但在我的大多数用例中,检查后缀就足够了。 感谢@paky。奇怪的是,我在实际通行证中看到的 primaryAccountIdentifiers 看起来不像 PAN,它们包含以“V-”为前缀的数字【参考方案2】:

根据文档,PKPassLibrary 有一个名为 containsPass() 的方法

检查这里: https://developer.apple.com/documentation/passkit/pkpasslibrary/1617110-containspass

【讨论】:

以上是关于检查卡是不是已添加到 PassKit 库的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 检查类名是不是已添加到 DIV 并执行任务

如何检查卡是不是已存储在 Paypal Vault 中

在 django python 中添加新卡之前,我如何检查 Stripe 客户是不是已经拥有特定卡

如何检查文件中是不是已存在用户名并将其积分添加给他?

passkit - 通过推送通知传递不刷新。 (服务器响应格式错误)

将文件添加到已设置的 svn 存储库