测试 App Store 促销应用内购买时未显示付款 sheet

No payment sheet displayed when testing App Store Promotion In-App Purchase

我 运行 在测试我的 App Store 促销(直接在应用程序的产品页面上提供的应用程序内购买)的实施时遇到了问题。

根据 documentation,我们应该执行以下操作:

  1. 构建一个看起来像这样的系统URL,填充我们自己的bundleIdproductIdentifieritms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name
  2. 发送 link 到设备。
  3. 在设备上打开link。

据我所知,这应该做两件事:1) 应用程序应该自动打开,以及 2) 系统应该显示付款 sheet 这样交易就可以完成。

但是,当我点击系统 URL link、 时,我的应用 自动打开未显示付款 sheet.

现在,我已经实现了所需的 SKPaymentTransactionObserver 方法,如 here 所述。以下方法应该在应用程序打开时调用,但不是:

class StoreObserver: NSObject, SKPaymentTransactionObserver, SKProductsRequestDelegate {
    func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
        //This is not running. Why not?
        return true
    }
}

我做错了什么?为什么系统打开应用程序时我的 paymentQueue(_:shouldAddStorePayment:for:) 方法没有被调用?

感谢您的帮助。

事实证明,我忽略了 add/remove 应用程序 launch/termination 的观察者,如 here 所述。

import UIKit
import StoreKit

class AppDelegate: UIResponder, UIApplicationDelegate {
                ....
    // Attach an observer to the payment queue.
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        SKPaymentQueue.default().add(iapObserver)
        return true
    }

    // Called when the application is about to terminate.
    func applicationWillTerminate(_ application: UIApplication) {
        // Remove the observer.
        SKPaymentQueue.default().remove(iapObserver)
    }
                ....
}

将此添加到我的应用程序解决了问题;付款 sheet 现已正确显示。