Storekit应用商店购买促销

5

这段代码是苹果开发者网站为用户提供的内容,当用户点击推广的应用商店产品时,它会提示检查是否可以完成交易。我该如何进行检查呢?因为接下来我需要处理如果交易失败或延迟的情况,但似乎无法弄清楚如何做到这一点。

//MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment,
    forProduct product: SKProduct) -> Bool {
      // Check to see if you can complete the transaction.
      // Return true if you can.
 return true
}

我还需要处理下一个场景,我发现这与检查是否可以完成交易的情况相同

func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment,
    forProduct product: SKProduct) -> Bool {

       // ... Add code here to check if your app must defer the transaction.
     let shouldDeferPayment = ...

     // If you must defer until onboarding is completed, then save the payment and return false.

     if shouldDeferPayment {
        self.savedPayment = payment
        return false
     }

    // ... Add code here to check if your app must cancel the transaction.
    let shouldCancelPayment = ...
    // If you must cancel the transaction, then return false:
    if shouldCancelPayment {
       return false
    }
}

      // (If you canceled the transaction, provide feedback to the user.)

     // Continuing a previously deferred payment
     SKPaymentQueue.default().add(savedPayment)

  )

如何检查支付是否失败,是否需要推迟或可以像代码部分所示那样完成?


我仍然在思考如何检测交易是否需要延迟或取消,以及如何编写代码来实现。有什么想法吗? - Astrum
你想要在模拟器或应用内购买沙盒环境中测试延迟交易状态,对吗? - Sagar Thummar
@SagarThummar 我想了解如何检查交易是否需要延迟、取消或可以购买(就像我在问题的第二个代码部分中所说的那样)。我需要知道如何编写代码来实现它。(第二部分代码段来自苹果公司开发者网站上的应用内购买推广,他们没有详细说明如何编写注释部分的代码。) - Astrum
1个回答

10
交易是否需要推迟完全取决于您的应用程序及其可能具有的任何要求。
例如,假设您的应用程序要求用户在购买订阅之前设置帐户。如果用户在应用商店开始购买,则将在启动应用程序后调用shouldAddStorePayment方法以完成购买。
此时,您可能会发现用户尚未在您的应用程序中设置帐户(实际上,应用程序可能是因为用户点击了推广的IAP而安装的)。在这种情况下,您将从shouldAddStorePayment返回false ,因为您的应用程序无法完成购买。
然后,您的应用程序将继续其正常的入门流程,让用户建立他们的帐户。一旦建立了帐户,您就希望完成购买;这既是良好的用户体验,也确保您不会错过销售机会。
这就是您问题中的其他示例代码所展示的内容;它显示了如何保存付款并在以后的某个阶段启动购买。
总之,当调用shouldAddStorePayment时:
1.确定是否有某些原因导致您现在无法完成购买 2.如果有,返回false,否则返回true 3.如果您返回false,请保存购买详细信息,以便在解决导致购买失败的任何问题后再启动购买。

好的,我的应用程序不需要创建帐户或类似的操作,所以在那个部分我应该只返回true。如果他们从应用商店点击应用内购买,而且应用程序还没有被下载,我应该返回false并保存吗?或者这个提示只会在安装后启动应用程序时出现?感谢您的帮助。 - Astrum
如果应用程序尚未下载,则无法执行任何操作;如果尚未安装应用程序,则您的应用程序不会运行。安装应用程序后,它将被启动并开始购买流程。 - Paulw11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接