246
#WWDC17 © 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Pete Hare, App Store Engineer Ross LeBeau, App Store Engineer What’s New in StoreKit Session 303 Distribution

•What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

#WWDC17

© 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Pete Hare, App Store Engineer Ross LeBeau, App Store Engineer

•What’s New in StoreKit • Session 303

Distribution

Page 2: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKitNEW

Page 3: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKit

Promoting in-app purchases

NEW

Page 4: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKit

Promoting in-app purchases

Server-to-server subscription notifications

NEW

Page 5: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKit

Promoting in-app purchases

Server-to-server subscription notifications

Detailed subscription status information

NEW

Page 6: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKit

Promoting in-app purchases

Server-to-server subscription notifications

Detailed subscription status information

Responding to reviews

NEW

Page 7: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

What’s New in StoreKit

Promoting in-app purchases

Server-to-server subscription notifications

Detailed subscription status information

Responding to reviews

Asking for ratings and reviews

NEW

Page 8: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

•Review of In-App Purchases

Page 9: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Overview

Page 10: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Overview

Digital content or service bought in-app

Page 11: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Overview

Digital content or service bought in-app

Not for physical goods

Page 12: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Page 13: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Page 14: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Non-consumable products

Page 15: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Non-consumable products

Non-renewing subscriptions

Page 16: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Non-consumable products

Non-renewing subscriptions

Auto-renewable subscriptions

Page 17: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Non-consumable products

Non-renewing subscriptions

Auto-renewable subscriptions

Page 18: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Types of In-App Purchases

Consumable products

Non-consumable products

Non-renewing subscriptions

Auto-renewable subscriptions

Advanced StoreKit Grand Ballroom A Thursday 1:50PM

Page 19: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 20: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 21: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 22: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 23: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 24: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 25: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 26: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 27: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 28: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Load In-App Identifiers Options for storing the list of product identifiers

Page 29: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Load In-App Identifiers Options for storing the list of product identifiers

After setting up product identifiers in iTunes Connect

Page 30: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Load In-App Identifiers Options for storing the list of product identifiers

After setting up product identifiers in iTunes Connect

Baked into your app

let identifiers = ["com.myCompany.myApp.product1", "com.myCompany.myApp.product2"]

Page 31: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Load In-App Identifiers Options for storing the list of product identifiers

After setting up product identifiers in iTunes Connect

Baked into your app

let identifiers = ["com.myCompany.myApp.product1", "com.myCompany.myApp.product2"]

Or fetch from your server

let identifiers = remoteIdentifiers()

Page 32: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 33: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

let request = SKProductsRequest(productIdentifiers: identifierSet) request.delegate = self request.start()

Page 34: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

let request = SKProductsRequest(productIdentifiers: identifierSet) request.delegate = self request.start()

Page 35: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

let request = SKProductsRequest(productIdentifiers: identifierSet) request.delegate = self request.start()

Page 36: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

let request = SKProductsRequest(productIdentifiers: identifierSet) request.delegate = self request.start()

Page 37: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

let request = SKProductsRequest(productIdentifiers: identifierSet) request.delegate = self request.start()

Page 38: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { for product in response.products { // Localized title and description product.localizedTitle product.localizedDescription // Price and locale product.price product.priceLocale // Content size and version (hosted) product.downloadContentLengths product.downloadContentVersion } }

Page 39: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { for product in response.products { // Localized title and description product.localizedTitle product.localizedDescription // Price and locale product.price product.priceLocale // Content size and version (hosted) product.downloadContentLengths product.downloadContentVersion } }

Page 40: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { for product in response.products { // Localized title and description product.localizedTitle product.localizedDescription // Price and locale product.price product.priceLocale // Content size and version (hosted) product.downloadContentLengths product.downloadContentVersion } }

Page 41: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { for product in response.products { // Localized title and description product.localizedTitle product.localizedDescription // Price and locale product.price product.priceLocale // Content size and version (hosted) product.downloadContentLengths product.downloadContentVersion } }

Page 42: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Fetch Product Info

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { for product in response.products { // Localized title and description product.localizedTitle product.localizedDescription // Price and locale product.price product.priceLocale // Content size and version (hosted) product.downloadContentLengths product.downloadContentVersion } }

Page 43: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 44: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI

Page 45: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI

Up to the application

Page 46: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI

Up to the application

Can have a large effect on sales

Page 47: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI

Up to the application

Can have a large effect on sales

https://developer.apple.com/in-app-purchase/

Page 48: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 49: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 50: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 51: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 52: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 53: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 54: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase UI Formatting the product price

Do not perform currency conversion

let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = product.priceLocale // Not the device locale! let formattedString = formatter.string(from: product.price)

Page 55: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 56: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Requesting a Payment

let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment)

Page 57: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Requesting a Payment

let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment)

Page 58: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Requesting a Payment

let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment)

Page 59: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Requesting a Payment

let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment)

Page 60: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 61: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 62: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 63: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Suspicious activity during payment process

Page 64: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Suspicious activity during payment process

[email protected] [email protected] [email protected]

ServerServerApp Store

Page 65: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Suspicious activity during payment process

[email protected] [email protected] [email protected]

ServerServerApp Store

ServerServerYour Server

neverfoldsJim35

Page 66: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

Page 67: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Page 68: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account

Page 69: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID

Page 70: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID• Don’t provide the actual account name

Page 71: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID• Don’t provide the actual account name• Don’t provide the password

Page 72: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID• Don’t provide the actual account name• Don’t provide the password• We suggest using a hash of the account name

Page 73: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID• Don’t provide the actual account name• Don’t provide the password• We suggest using a hash of the account name

let payment = SKPayment(product: product) payment.applicationUsername = hash(yourCustomerAccountName) SKPaymentQueue.default().add(payment)

Page 74: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Detecting Irregular Activity Provide an account identifier

For applications with their own account management

Provide an opaque identifier for your user’s account• Don’t send us the user’s Apple ID• Don’t provide the actual account name• Don’t provide the password• We suggest using a hash of the account name

let payment = SKPayment(product: product) payment.applicationUsername = hash(yourCustomerAccountName) SKPaymentQueue.default().add(payment)

Page 75: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 76: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Start Observing the Payment Queue

import UIKit import StoreKit

@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, SKPaymentTransactionObserver {

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { SKPaymentQueue.default().add(self) return true }

Page 77: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Start Observing the Payment Queue

import UIKit import StoreKit

@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, SKPaymentTransactionObserver {

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { SKPaymentQueue.default().add(self) return true }

Page 78: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Start Observing the Payment Queue

import UIKit import StoreKit

@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, SKPaymentTransactionObserver {

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { SKPaymentQueue.default().add(self) return true }

Page 79: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase } } }

Page 80: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase } } }

Page 81: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase } } }

Page 82: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase } } }

Page 83: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase } } }

Page 84: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase case .deferred: // Allow the user to continue to use the app // It may be some time before the transaction is updated // Do not get stuck in a modal "Purchasing..." state! } } }

Page 85: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase case .deferred: // Allow the user to continue to use the app // It may be some time before the transaction is updated // Do not get stuck in a modal "Purchasing..." state! } } }

Page 86: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Handle SKPaymentQueueObserver Events

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: // Validate the purchase case .deferred: // Allow the user to continue to use the app // It may be some time before the transaction is updated // Do not get stuck in a modal "Purchasing..." state! } } }

Page 87: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Deferred Transactions

Page 88: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Deferred Transactions

Create a mutable payment

Page 89: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Deferred Transactions

Create a mutable payment

Set the simulatesAskToBuyInSandbox flag

Page 90: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Deferred Transactions

Create a mutable payment

Set the simulatesAskToBuyInSandbox flag

let payment = SKMutablePayment(product: product) payment.simulatesAskToBuyInSandbox = true SKPaymentQueue.default().add(payment)

Page 91: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Page 92: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Page 93: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Check the error code

Page 94: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Check the error code• Don’t show an error alert unless necessary

Page 95: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Check the error code• Don’t show an error alert unless necessary• User canceling a payment will result in an error

Page 96: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Check the error code• Don’t show an error alert unless necessary• User canceling a payment will result in an error

Let StoreKit handle the transaction flow as much as possible

Page 97: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Handling Errors

Not all errors are equal

Check the error code• Don’t show an error alert unless necessary• User canceling a payment will result in an error

Let StoreKit handle the transaction flow as much as possible• Including asking for confirmation for purchase

Page 98: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Page 99: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Trusted record of app and in-app purchases

Page 100: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Trusted record of app and in-app purchases

Stored on device

Page 101: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Trusted record of app and in-app purchases

Stored on device

Issued by the App Store

Page 102: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Trusted record of app and in-app purchases

Stored on device

Issued by the App Store

Signed and verifiable

Page 103: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

The Receipt

Trusted record of app and in-app purchases

Stored on device

Issued by the App Store

Signed and verifiable

For your app, on that device only

Page 104: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Receipt Validation

Page 105: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Receipt Validation

On-device validation • Unlock features and content within the app

Page 106: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Receipt Validation

On-device validation • Unlock features and content within the app

Server-to-server validation • Restrict access to downloadable content • Used often for subscriptions

Page 107: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Receipt Validation

On-device validation • Unlock features and content within the app

Server-to-server validation • Restrict access to downloadable content • Used often for subscriptions

Advanced StoreKit Grand Ballroom A Thursday 1:50PM

Page 108: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 109: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Unlock Content

Page 110: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Unlock Content

Unlock functionality in your app

Page 111: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Unlock Content

Unlock functionality in your app

Download additional content

Page 112: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Page 113: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Apple-hosted content

Page 114: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Apple-hosted content• On-demand resources

Page 115: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Apple-hosted content• On-demand resources• Hosted in-app purchase content

Page 116: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Apple-hosted content• On-demand resources• Hosted in-app purchase content

Self-hosted content

Page 117: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Downloading Content

Apple-hosted content• On-demand resources• Hosted in-app purchase content

Self-hosted content• Use background downloads with NSURLSession

Page 118: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 119: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Page 120: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Finish all transactions once content is unlocked • If downloading hosted content, wait until after the download completes

Page 121: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Finish all transactions once content is unlocked • If downloading hosted content, wait until after the download completes

Includes all auto-renewable subscription transactions

Page 122: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Finish all transactions once content is unlocked • If downloading hosted content, wait until after the download completes

Includes all auto-renewable subscription transactions

Otherwise, the payment will stay in the queue

Page 123: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Finish all transactions once content is unlocked • If downloading hosted content, wait until after the download completes

Includes all auto-renewable subscription transactions

Otherwise, the payment will stay in the queue

Subscription billing retry depends on up-to-date information about transaction

Page 124: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Finish the Transaction

Finish all transactions once content is unlocked • If downloading hosted content, wait until after the download completes

Includes all auto-renewable subscription transactions

Otherwise, the payment will stay in the queue

Subscription billing retry depends on up-to-date information about transaction

SKPaymentQueue.default().finishTransaction(transaction)

Page 125: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

In-App Purchase Process

Load In-App Identifiers

Fetch Product Info

Show In-App UI

Request Payment

Process Transaction

Unlock Content

Finish Transaction

Page 126: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

App Review

Page 127: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

App Review

You must have a Restore button

Page 128: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

App Review

You must have a Restore button

Restore and Purchase must be separate buttons

Page 129: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

App Review

You must have a Restore button

Restore and Purchase must be separate buttons

Not just as a “backup” tool

Page 130: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

App Review

You must have a Restore button

Restore and Purchase must be separate buttons

Not just as a “backup” tool• Users with multiple devices

Page 131: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Restore Completed Transactions

Only restores transactions for • Non-consumables • Auto-renewable subscriptions

For consumables and non-renewing subscriptions • You must persist the state!

Page 132: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Restore Completed Transactions

Page 133: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Restore Completed Transactions

SKPaymentQueue.default().restoreCompletedTransactions()

Page 134: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Restore Completed Transactions

Observe the queue

SKPaymentQueue.default().restoreCompletedTransactions()

// Additional callbacks in SKPaymentTransactionObserver func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {} func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) {}

Inspect the receipt and unlock content and features accordingly

Page 135: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Page 136: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Page 137: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Page 138: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Display pricing using the product’s price locale

Page 139: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Display pricing using the product’s price locale

Use the receipt to validate your purchases

Page 140: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Display pricing using the product’s price locale

Use the receipt to validate your purchases

Make the content available

Page 141: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Display pricing using the product’s price locale

Use the receipt to validate your purchases

Make the content available

Finish the transaction

Page 142: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementing In-App Purchases

Always observe the Payment Queue

Fetch localized product information from the App Store

Display pricing using the product’s price locale

Use the receipt to validate your purchases

Make the content available

Finish the transaction

Allow the user to restore completed transactions

Page 143: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ross LeBeau, App Store Engineer

•Promoting In-App Purchases

Page 144: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Page 145: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable

Page 146: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable• App page

Page 147: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable• App page• Editorial features

Page 148: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable• App page• Editorial features• Search results

Page 149: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable• App page• Editorial features• Search results

Start purchase on the App Store

Page 150: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementation Overview

Page 151: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementation Overview

Required • Set up in iTunes Connect • Handle info from App Store

Page 152: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementation Overview

Required • Set up in iTunes Connect • Handle info from App Store

Optional • Order and visibility

Page 153: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Implementation Overview

Required • Set up in iTunes Connect • Handle info from App Store

Optional • Order and visibility

What’s New in iTunes Connect WWDC 2017

Page 154: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 155: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 156: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 157: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 158: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 159: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Continuing a Transaction from the App Store

// MARK: - SKPaymentTransactionObserver

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

Page 160: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Continuing a Transaction from the App Store

// MARK: - SKPaymentTransactionObserver

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

Page 161: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Deferring or Stopping a Transaction

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, forProduct product: SKProduct) -> Bool { // Hold on to the payment return false }

SKPaymentQueue.default().add(savedPayment)

Page 162: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Deferring or Stopping a Transaction

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, forProduct product: SKProduct) -> Bool { // Hold on to the payment return false }

SKPaymentQueue.default().add(savedPayment)

Page 163: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Deferring or Stopping a Transaction

// MARK: - SKPaymentTransactionObserver

func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, forProduct product: SKProduct) -> Bool { // Hold on to the payment return false }

SKPaymentQueue.default().add(savedPayment)

Page 164: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Purchases

Protocol itms-services://

Parameters

"action" "purchaseIntent"

"bundleId" com.example.app

"productIdentifier" product_name

Page 165: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Testing Purchases

Protocol itms-services://

Parameters

"action" "purchaseIntent"

"bundleId" com.example.app

"productIdentifier" product_name

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

Page 166: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order and Visibility

Page 167: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order and Visibility

Defaults in iTunes Connect

Page 168: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order and Visibility

Defaults in iTunes Connect

Override on device

Page 169: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order and Visibility

Defaults in iTunes Connect

Override on device

Not synced

Page 170: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Visibility

Page 171: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Visibility

Page 172: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Visibility Override of a Promoted In-App Purchase

// Fetch Product Info for Pro Subscription

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.update(storePromotionVisibility: .hide, forProduct: proSubscription, completionHandler: { (error: Error?) in // Complete })

Page 173: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Visibility Override of a Promoted In-App Purchase

// Fetch Product Info for Pro Subscription

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.update(storePromotionVisibility: .hide, forProduct: proSubscription, completionHandler: { (error: Error?) in // Complete })

Page 174: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Visibility Override of a Promoted In-App Purchase

// Fetch Product Info for Pro Subscription

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.update(storePromotionVisibility: .hide, forProduct: proSubscription, completionHandler: { (error: Error?) in // Complete })

Page 175: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Reading Visibility Override of a Promoted In-App Purchase

// Fetch Product Info for Hidden Beaches pack

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.fetchStorePromotionVisibility(forProduct: hiddenBeaches, completionHandler: { (visibility: SKProductStorePromotionVisibility, error: Error?) in // visibility == .default })

Page 176: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Reading Visibility Override of a Promoted In-App Purchase

// Fetch Product Info for Hidden Beaches pack

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.fetchStorePromotionVisibility(forProduct: hiddenBeaches, completionHandler: { (visibility: SKProductStorePromotionVisibility, error: Error?) in // visibility == .default })

Page 177: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order

Page 178: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Order

Page 179: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Order Override of Promoted In-App Purchases

// Fetch Product Info for Pro Subscription, Fishing Hot Spots, and Hidden Beaches

let storePromotionController = SKProductStorePromotionController.default() let newProductsOrder = [hiddenBeaches, proSubscription, fishingHotSpots] storePromotionController.updateStorePromotionOrder(newProductsOrder, completionHandler: { (error: Error?) in // Complete })

Page 180: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Order Override of Promoted In-App Purchases

// Fetch Product Info for Pro Subscription, Fishing Hot Spots, and Hidden Beaches

let storePromotionController = SKProductStorePromotionController.default() let newProductsOrder = [hiddenBeaches, proSubscription, fishingHotSpots] storePromotionController.updateStorePromotionOrder(newProductsOrder, completionHandler: { (error: Error?) in // Complete })

Page 181: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Updating Order Override of Promoted In-App Purchases

// Fetch Product Info for Pro Subscription, Fishing Hot Spots, and Hidden Beaches

let storePromotionController = SKProductStorePromotionController.default() let newProductsOrder = [hiddenBeaches, proSubscription, fishingHotSpots] storePromotionController.updateStorePromotionOrder(newProductsOrder, completionHandler: { (error: Error?) in // Complete })

Page 182: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Reading Order Override of Promoted In-App Purchases

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.fetchStorePromotionOrder(completionHandler: { (products: [SKProduct], error: Error?) in // products == [hiddenBeaches, proSubscription, fishingHotSpots] })

Page 183: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Reading Order Override of Promoted In-App Purchases

let storePromotionController = SKProductStorePromotionController.default() storePromotionController.fetchStorePromotionOrder(completionHandler: { (products: [SKProduct], error: Error?) in // products == [hiddenBeaches, proSubscription, fishingHotSpots] })

Page 184: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Page 185: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable in App Store

Page 186: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable in App Store

Set up in iTunes Connect

Page 187: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable in App Store

Set up in iTunes Connect

Start purchase in App Store

Page 188: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable in App Store

Set up in iTunes Connect

Start purchase in App Store

Handle in app via SKPaymentTransactionObserver

Page 189: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Promoting In-App Purchases

Discoverable in App Store

Set up in iTunes Connect

Start purchase in App Store

Handle in app via SKPaymentTransactionObserver

Optional—order and visibility

Page 190: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Pete Hare, App Store Engineer

•Ratings, Reviews, and Responses

Page 191: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 192: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 193: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 194: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 195: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses What’s new

NEW

Page 196: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Reset your rating

Ratings, Reviews, and Responses What’s new

NEW

Page 197: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Reset your rating

Respond to reviews

Ratings, Reviews, and Responses What’s new

NEW

Page 198: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Reset your rating

Respond to reviews

Ask for ratings and reviews via SKStoreReviewController

Ratings, Reviews, and Responses What’s new

NEW

Page 199: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Reset your rating

Respond to reviews

Ask for ratings and reviews via SKStoreReviewController

Deep link to write review in the App Store

Ratings, Reviews, and Responses What’s new

NEW

Page 200: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Reset your rating

Respond to reviews

Ask for ratings and reviews via SKStoreReviewController

Deep link to write review in the App Store

Helpfulness and Report a Concern on iOS

Ratings, Reviews, and Responses What’s new

NEW

Page 201: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 202: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 203: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 204: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Responding to reviews

Page 205: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 206: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 207: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 208: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction
Page 209: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Average increase of 1.5 stars per review

Page 210: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Responding to reviews

More informationhttps://developer.apple.com/app-store/responding-to-reviews

Page 211: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Responding to reviews

More informationhttps://developer.apple.com/app-store/responding-to-reviews

What’s New in iTunes Connect WWDC 2017

Page 212: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Receiving reviews

Page 213: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Prompt for review with SKStoreReviewController

Ratings, Reviews, and Responses Receiving reviews

Page 214: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Prompt for review with SKStoreReviewController

Deep link to review in App Store

Ratings, Reviews, and Responses Receiving reviews

Page 215: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Page 216: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Page 217: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Quick way to request a rating/review

Page 218: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Quick way to request a rating/review

Will be required for all modal rating/review prompts

Page 219: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Quick way to request a rating/review

Will be required for all modal rating/review prompts

Restrictions in place

Page 220: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Quick way to request a rating/review

Will be required for all modal rating/review prompts

Restrictions in place• Limited requests per device

Page 221: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

NEWRatings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Introduced in iOS 10.3

Quick way to request a rating/review

Will be required for all modal rating/review prompts

Restrictions in place• Limited requests per device• Can be disabled by user in Settings

Page 222: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Page 223: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Present as a prompt after a user action

Page 224: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Asking for ratings and reviews with SKStoreReviewController

Present as a prompt after a user action

Do not present from a buttonMay not present any UI due to restrictions

Page 225: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Asking for Ratings and Reviews with SKStoreReviewController

if shouldPromptUser() { SKStoreReviewController.requestReview() }

func shouldPromptUser() -> Bool { // Local business rules }

Page 226: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Asking for Ratings and Reviews with SKStoreReviewController

if shouldPromptUser() { SKStoreReviewController.requestReview() }

func shouldPromptUser() -> Bool { // Local business rules }

Page 227: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Asking for Ratings and Reviews with SKStoreReviewController

if shouldPromptUser() { SKStoreReviewController.requestReview() }

func shouldPromptUser() -> Bool { // Local business rules }

Page 228: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

// Asking for Ratings and Reviews with SKStoreReviewController

if shouldPromptUser() { SKStoreReviewController.requestReview() }

func shouldPromptUser() -> Bool { // Local business rules }

Page 229: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

NEW

Page 230: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Introduced in iOS 10.3

NEW

Page 231: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Introduced in iOS 10.3

Link to open your app in the App Store • Presents compose review from app page

NEW

Page 232: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Introduced in iOS 10.3

Link to open your app in the App Store • Presents compose review from app page

User initiated actions • Button in settings

NEW

Page 233: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Page 234: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Use from an embedded button in your app Such as a settings screen

Page 235: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Deep link to write a review in App Store

Use from an embedded button in your app Such as a settings screen

Do not use from an alertUse SKStoreReviewController instead

Page 236: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Deep Link to Write Review

URL is formed using regular product URL with an anchor tag https://itunes.apple.com/us/app/itunes-u/id490217893?action=write-review

For creating product URLs visithttps://linkmaker.itunes.apple.com/

Page 237: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Ratings, Reviews, and Responses Asking users for reviews

More informationhttps://developer.apple.com/app-store/ratings-and-reviews/

Page 238: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Summary

Page 239: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Summary

How to implement in-app purchases

Page 240: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Summary

How to implement in-app purchases

Promote in-app purchases in the App Store

Page 241: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Summary

How to implement in-app purchases

Promote in-app purchases in the App Store

New App Store design

Page 242: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Summary

How to implement in-app purchases

Promote in-app purchases in the App Store

New App Store design

New opportunities to improve your ratings and reviews

Page 243: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

More Informationhttps://developer.apple.com/wwdc17/303

Page 244: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Related Sessions

What’s New in iTunes Connect WWDC 2017

Introducing the New App Store WWDC 2017

Advanced StoreKit Grand Ballroom A Thursday 1:50PM

Page 245: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction

Labs

App Store and iTunes Connect Lab Technology Lab H Thu 12:00PM-1:50PM

StoreKit Lab Technology Lab E Thu 3:10PM-6:00PM

StoreKit Lab Technology Lab E Fri 1:50PM-4:00PM

Page 246: •What’s New in StoreKit · Unlock Content Finish Transaction. In-App Purchase Process Load In-App Identifiers Fetch Product Info Show In-App UI Request Payment Process Transaction