Storekit Appstore 购买促销

Storekit Appstore purchase promotion

这段代码是苹果开发者网站上给出的,当用户点击促销应用商店产品时,它会告诉您检查是否可以完成交易?我该如何检查呢?因为那时我必须满足交易是否失败或推迟的问题,而且似乎无法弄清楚该怎么做。

//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)

  )

如何检查付款是否失败或需要延期或是否可以按照代码部分中的说明完成?

是否需要延迟交易完全取决于您的应用程序以及您的应用程序可能有的任何要求。

例如,假设您的应用要求用户在购买订阅之前先设置一个帐户。

如果用户在 App Store 中开始购买,shouldAddStorePayment 方法将在您的应用启动后调用以完成购买。

此时您可能会检测到用户尚未在您的应用中设置帐户(实际上,该应用可能是由于他们点击了推广的 IAP 而安装的)。在这种情况下,您将从 shouldAddStorePayment return false 因为您的应用无法完成购买。

然后您的应用程序将继续其正常的登录流程,让用户建立他们的帐户。

建立帐户后您想完成购买;这既是一种良好的用户体验,又能确保您不会错过任何促销活动。

这是您问题中的其他示例代码所在;它显示了如何保存付款并在稍后阶段开始购买。

总之,当shouldAddStorePayment被调用时:

  1. 确定是否有某些原因导致您现在无法完成购买
  2. 如果有,returnfalse,否则returntrue
  3. 如果您 return false,请保存购买详细信息,以便在阻止购买的问题得到解决后,您可以在稍后阶段开始购买。