测试 App Store 促销应用内购买时未显示付款 sheet
No payment sheet displayed when testing App Store Promotion In-App Purchase
我 运行 在测试我的 App Store 促销(直接在应用程序的产品页面上提供的应用程序内购买)的实施时遇到了问题。
根据 documentation,我们应该执行以下操作:
- 构建一个看起来像这样的系统URL,填充我们自己的
bundleId
和productIdentifier
:itms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name
- 发送 link 到设备。
- 在设备上打开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 现已正确显示。
我 运行 在测试我的 App Store 促销(直接在应用程序的产品页面上提供的应用程序内购买)的实施时遇到了问题。
根据 documentation,我们应该执行以下操作:
- 构建一个看起来像这样的系统URL,填充我们自己的
bundleId
和productIdentifier
:itms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name
- 发送 link 到设备。
- 在设备上打开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 现已正确显示。