Skip to content

App Store Purchases

Samuel Spencer edited this page Jan 22, 2021 · 3 revisions

Make sure to implement the App Startup process prior to doing this!


iOS 11 adds a new delegate method on SKPaymentTransactionObserver:

@available(iOS 11.0, *)
optional public func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool

From Apple Docs:

This delegate method is called when the user has started an in-app purchase in the App Store, and is continuing the transaction in your app. Specifically, if your app is already installed, the method is called automatically. If your app is not yet installed when the user starts the in-app purchase in the App Store, the user gets a notification when the app installation is complete. This method is called when the user taps the notification. Otherwise, if the user opens the app manually, this method is called only if the app is opened soon after the purchase was started.

SwiftyStoreKit supports this with a new handler, called like this:

SwiftyStoreKit.shouldAddStorePaymentHandler = { payment, product in
    // return true if the content can be delivered by your app
    // return false otherwise
}

To test this in sandbox mode, open this URL in Safari:

itms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name

More information on the WWDC17 session What's New in StoreKit (slide number 165 shows the link above).