704 what's new with wallet & apple pay 05 final · not just apple pay wallet there's...
TRANSCRIPT
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
System Frameworks #WWDC16
Session 704
What's New with Wallet & Apple Pay
Nick Shearer iOS Apps and FrameworksLeo Cantelmo Watch SW Engineer
Overview
Update from Wallet
WatchKit
Extensions
Testing Apple Pay
Overview
What's New with PassKitUpdate from Wallet
Not just Apple PayWallet
Not just Apple PayWallet
There's no better time to start using passes
Not just Apple PayWallet
There's no better time to start using passesMore users are engaging with Wallet than ever
RecapPasses
Wallet - The home for Apple Pay and more WWDC 2015
RecapPasses
Gift cards, boarding passes, rewards cards, event tickets, membership cards, and more…
Wallet - The home for Apple Pay and more WWDC 2015
RecapPasses
Gift cards, boarding passes, rewards cards, event tickets, membership cards, and more…Distribute passes from app, e-mail, SMS, web link, or QR code
Wallet - The home for Apple Pay and more WWDC 2015
RecapPasses
Gift cards, boarding passes, rewards cards, event tickets, membership cards, and more…Distribute passes from app, e-mail, SMS, web link, or QR codeUpdate your passes remotely through web services
Wallet - The home for Apple Pay and more WWDC 2015
App placementPasses
App placementPasses
App icons and shortcuts now have front placement
App placementPasses
App icons and shortcuts now have front placementDeep link directly into your app, or the App Store
App placementPasses
App icons and shortcuts now have front placementDeep link directly into your app, or the App StoreGreat for gift card top-up
Value-added servicesPasses
Value-added servicesPasses
Passes can transmit secure information over NFC
Value-added servicesPasses
Passes can transmit secure information over NFCSupport coming from many PoS systems
Value-added servicesPasses
Value-added servicesPasses
"One Tap" experience
Value-added servicesPasses
"One Tap" experienceDeeply integrated into the purchase process
Value-added servicesPasses
"One Tap" experienceDeeply integrated into the purchase processAvailable on iPhone and Apple Watch
Value-added servicesPasses
Distribute passes over NFC
Value-added servicesPasses
Distribute passes over NFCSign up for loyalty programs directly from Wallet
Value-added servicesPasses
Distribute passes over NFCSign up for loyalty programs directly from WalletShare and personalize passes quickly and easily
Value-added servicesPasses
VAS and personalizationPasses
VAS and personalizationPasses
Passes must be signed using a NFC signing certificate
VAS and personalizationPasses
Passes must be signed using a NFC signing certificateContact us to find out more about using VAS services
VAS and personalizationPasses
Passes must be signed using a NFC signing certificateContact us to find out more about using VAS servicesVAS engineers available in the labs
Card Issuers
Card Issuers
Wallet offers unique features for card issuers
Card Issuers
Wallet offers unique features for card issuersStore credit and debit cards also supported
App provisioningCard Issuers
App provisioningCard Issuers
Set up cards in Apple Pay directly from your app
App provisioningCard Issuers
Set up cards in Apple Pay directly from your appAvailable to any existing Apple Pay issuer
App provisioningCard Issuers
Set up cards in Apple Pay directly from your appAvailable to any existing Apple Pay issuerVisit the labs or contact us for more information
In-store experienceCard Issuers NEW
In-store experienceCard Issuers
Present your cards directly from your apps
NEW
In-store experienceCard Issuers
Present your cards directly from your appsRedeem a coupon in your app, and immediately present a payment method
NEW
In-store experienceCard Issuers
Present your cards directly from your appsRedeem a coupon in your app, and immediately present a payment method
let passLibrary = PKPassLibrary.init()
passLibrary.present(pass: myPaymentPass)
NEW
In-store experienceCard Issuers NEW
In-store experienceCard Issuers
Use the new PKPaymentButton style for consistent branding
NEW
In-store experienceCard Issuers
Use the new PKPaymentButton style for consistent branding
let presentButton = PKPaymentButton(type: .inStore, style: .black)
NEW
Store Credit and DebitWallet
Store Credit and DebitWallet
Associate your app with your store or co-brand card
Store Credit and DebitWallet
Associate your app with your store or co-brand cardDefault to your card when paying over NFC or within app
Store Credit and DebitWallet
Associate your app with your store or co-brand cardDefault to your card when paying over NFC or within appNo API required—built into the card itself
Apple Pay
Apple Pay
An easy, secure, and private way to pay
Apple Pay
An easy, secure, and private way to payPay in-store and within apps
Apple Pay
An easy, secure, and private way to payPay in-store and within appsAmazing customer satisfaction
Within appsApple Pay
Within appsApple Pay
Pay using Apple Pay directly from apps
Within appsApple Pay
Pay using Apple Pay directly from appsThousands of apps have already adopted
Within appsApple Pay
Pay using Apple Pay directly from appsThousands of apps have already adoptedMillions of users using Apple Pay
Within appsApple Pay
Pay using Apple Pay directly from appsThousands of apps have already adoptedMillions of users using Apple PayIncredible growth
“With Apple Pay, our conversion rate has tripled.”
Chairish
“Apple Pay drives twice as many new users to StubHub as any other payment method.”
StubHub
Apple Pay China
Apple Pay China
Full support for China UnionPay credit and debit cards
Apple Pay China
Full support for China UnionPay credit and debit cardsAccepted by CUP, PayEase, LianlianPay, YeePay, and UMS
Apple Pay China
Full support for China UnionPay credit and debit cardsAccepted by CUP, PayEase, LianlianPay, YeePay, and UMS
https://developer.apple.com/apple-pay/get-started/cn/
Dynamic networks and proxiesWhat’s New NEW
Dynamic networks and proxiesWhat’s New
request.supportedNetworks = ["Visa", "Mastercard", "AmEx", "Discover"]
NEW
Dynamic networks and proxiesWhat’s New
Today, supported payment networks are hard-coded into your app
request.supportedNetworks = ["Visa", "Mastercard", "AmEx", "Discover"]
NEW
Dynamic networks and proxiesWhat’s New
Today, supported payment networks are hard-coded into your appAdding new networks requires you to perform SDK availability checks
request.supportedNetworks = ["Visa", "Mastercard", "AmEx", "Discover"]
NEW
Dynamic networks and proxiesWhat’s New
Today, supported payment networks are hard-coded into your appAdding new networks requires you to perform SDK availability checksUpdating networks often means updating your app
request.supportedNetworks = ["Visa", "Mastercard", "AmEx", "Discover"]
NEW
Dynamic networks and proxiesWhat’s New NEW
// Discover all supported networks available on this device
PKPaymentRequest.availableNetworks
// Set a payment processor as a supported network
// This maps to a subset of available networks and is dynamically updated
request.supportedNetworks = ["My Payment Processor"]
Dynamic networks and proxiesWhat’s New NEW
// Discover all supported networks available on this device
PKPaymentRequest.availableNetworks
// Set a payment processor as a supported network
// This maps to a subset of available networks and is dynamically updated
request.supportedNetworks = ["My Payment Processor"]
Dynamic networks and proxiesWhat’s New
Enable new networks as they're added
NEW
// Discover all supported networks available on this device
PKPaymentRequest.availableNetworks
// Set a payment processor as a supported network
// This maps to a subset of available networks and is dynamically updated
request.supportedNetworks = ["My Payment Processor"]
Dynamic networks and proxiesWhat’s New
Enable new networks as they're addedUse a payment processor as a supported network
NEW
// Discover all supported networks available on this device
PKPaymentRequest.availableNetworks
// Set a payment processor as a supported network
// This maps to a subset of available networks and is dynamically updated
request.supportedNetworks = ["My Payment Processor"]
Dynamic networks and proxiesWhat’s New
Enable new networks as they're addedUse a payment processor as a supported networkGain support for new networks as they're added, without needing to change your code
NEW
Swift 3 APIWhat’s New NEW
Swift 3 APIWhat’s New
Improved API for Swift users
NEW
Swift 3 APIWhat’s New
Improved API for Swift usersPassKit now uses stringly typed enumerations
NEW
EverywhereApple Pay
EverywhereApple Pay
WatchKit
EverywhereApple Pay
ExtensionsWatchKit
EverywhereApple Pay
Extensions SafariWatchKit
EverywhereApple Pay
Extensions SafariWatchKit
EverywhereApple Pay
Extensions SafariWatchKit
Apple Pay in WatchKit
Leo Cantelmo Watch SW Engineer
+
OverviewApple Pay—WatchKit
OverviewApple Pay—WatchKit
Quick recap
OverviewApple Pay—WatchKit
Quick recapCreating a payment request
OverviewApple Pay—WatchKit
Quick recapCreating a payment requestPresenting the payment sheet
OverviewApple Pay—WatchKit
Quick recapCreating a payment requestPresenting the payment sheetDemo
OverviewApple Pay—WatchKit
Quick recapCreating a payment requestPresenting the payment sheetDemoDesign considerations
How payments workQuick Recap
How payments workQuick Recap
Payment Authorization Controller
Payment Request
How payments workQuick Recap
Payment Authorization Controller
Payment Request
Delegate
How payments workQuick Recap
Payment Authorization Controller
Payment Request
Delegate
Secure Element
Apple Servers
How payments workQuick Recap
Payment Authorization Controller
Payment Request
Payment Token
Delegate
Secure Element
Apple Servers
Configuring your environmentBefore You Start
Configuring your environmentBefore You Start
Register a merchant identifier and set up cryptographic keys in the Developer Portal
Configuring your environmentBefore You Start
Register a merchant identifier and set up cryptographic keys in the Developer PortalEnable Apple Pay in the Capabilities pane inside Xcode
// Creating a Payment Request
import PassKit
let paymentRequest = PKPaymentRequest()
paymentRequest.countryCode = "US"
paymentRequest.currencyCode = "USD"
paymentRequest.merchantIdentifier = “merchant.com.example.emporium"
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.supportedNetworks = PKPaymentRequest.availableNetworks()
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label:"Emporium", amount:NSDecimalNumber(string:”10.99"))
]
// Creating a Payment Request
import PassKit
let paymentRequest = PKPaymentRequest()
paymentRequest.countryCode = "US"
paymentRequest.currencyCode = "USD"
paymentRequest.merchantIdentifier = “merchant.com.example.emporium"
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.supportedNetworks = PKPaymentRequest.availableNetworks()
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label:"Emporium", amount:NSDecimalNumber(string:”10.99"))
]
// Creating a Payment Request
import PassKit
let paymentRequest = PKPaymentRequest()
paymentRequest.countryCode = "US"
paymentRequest.currencyCode = "USD"
paymentRequest.merchantIdentifier = “merchant.com.example.emporium"
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.supportedNetworks = PKPaymentRequest.availableNetworks()
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label:"Emporium", amount:NSDecimalNumber(string:”10.99"))
]
// Creating a Payment Request
import PassKit
let paymentRequest = PKPaymentRequest()
paymentRequest.countryCode = "US"
paymentRequest.currencyCode = "USD"
paymentRequest.merchantIdentifier = “merchant.com.example.emporium"
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.supportedNetworks = PKPaymentRequest.availableNetworks()
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label:"Emporium", amount:NSDecimalNumber(string:”10.99"))
]
// Presenting the Payment Sheet
import PassKit
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self
paymentController.present { (success) in
// ...
}
// MARK: - PKPaymentAuthorizationControllerDelegate
func paymentAuthorizationControllerDidFinish(controller: PKPaymentAuthorizationController) {
controller.dismiss {
// ...
}
}
// Presenting the Payment Sheet
import PassKit
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self
paymentController.present { (success) in
// ...
}
// MARK: - PKPaymentAuthorizationControllerDelegate
func paymentAuthorizationControllerDidFinish(controller: PKPaymentAuthorizationController) {
controller.dismiss {
// ...
}
}
// Presenting the Payment Sheet
import PassKit
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self
paymentController.present { (success) in
// ...
}
// MARK: - PKPaymentAuthorizationControllerDelegate
func paymentAuthorizationControllerDidFinish(controller: PKPaymentAuthorizationController) {
controller.dismiss {
// ...
}
}
// Presenting the Payment Sheet
import PassKit
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self
paymentController.present { (success) in
// ...
}
// MARK: - PKPaymentAuthorizationControllerDelegate
func paymentAuthorizationControllerDidFinish(controller: PKPaymentAuthorizationController) {
controller.dismiss {
// ...
}
}
// Presenting the Payment Sheet
import PassKit
let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
paymentController.delegate = self
paymentController.present { (success) in
// ...
}
// MARK: - PKPaymentAuthorizationControllerDelegate
func paymentAuthorizationControllerDidFinish(controller: PKPaymentAuthorizationController) {
controller.dismiss {
// ...
}
}
PKPaymentAuthorizationControllerPresenting the Payment Sheet NEW
PKPaymentAuthorizationControllerPresenting the Payment Sheet
New controller class available in PassKit.framework
NEW
PKPaymentAuthorizationControllerPresenting the Payment Sheet
New controller class available in PassKit.frameworkResponsible for controlling the payment authorization flow
NEW
PKPaymentAuthorizationControllerPresenting the Payment Sheet
New controller class available in PassKit.frameworkResponsible for controlling the payment authorization flowSame API semantics of PKPaymentAuthorizationViewController
NEW
PKPaymentAuthorizationControllerPresenting the Payment Sheet
New controller class available in PassKit.frameworkResponsible for controlling the payment authorization flowSame API semantics of PKPaymentAuthorizationViewControllerAllows for presentation of the payment sheet from WatchKit extensions
NEW
PKPaymentAuthorizationControllerPresenting the Payment Sheet
New controller class available in PassKit.frameworkResponsible for controlling the payment authorization flowSame API semantics of PKPaymentAuthorizationViewControllerAllows for presentation of the payment sheet from WatchKit extensionsSupported across watchOS and iOS allowing for code reuse
NEW
DemoMaking payments on watchOS
Make shopping easyDesign considerations
Make shopping easyDesign considerations
Design short interactions for small screens
Make shopping easyDesign considerations
Design short interactions for small screens
Don’t require unnecessary information
Make shopping easyDesign considerations
Design short interactions for small screens
Don’t require unnecessary informationBilling and shipping options from iPhone
Make shopping easyDesign considerations
Design short interactions for small screens
Don’t require unnecessary informationBilling and shipping options from iPhone
Use provided WKInterfacePaymentButton
Make shopping easyDesign considerations
Design short interactions for small screens
Don’t require unnecessary informationBilling and shipping options from iPhone
Use provided WKInterfacePaymentButtonStoryboard support in Interface Builder
Make shopping easyDesign considerations
Design short interactions for small screens
Don’t require unnecessary informationBilling and shipping options from iPhone
Use provided WKInterfacePaymentButtonStoryboard support in Interface BuilderFollow our Apple Pay Identity Guidelines
SummaryApple Pay—WatchKit
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension• Use provided methods to present and dismiss the payment sheet
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension• Use provided methods to present and dismiss the payment sheet
Create a great Apple Watch experience for your users
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension• Use provided methods to present and dismiss the payment sheet
Create a great Apple Watch experience for your users• Interactions are short and screens small
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension• Use provided methods to present and dismiss the payment sheet
Create a great Apple Watch experience for your users• Interactions are short and screens small• Use WKInterfacePaymentButton following our guidelines
SummaryApple Pay—WatchKit
Same code from iOS will work with minimal changes• Use PKPaymentAuthorizationController in your WatchKit extension• Use provided methods to present and dismiss the payment sheet
Create a great Apple Watch experience for your users• Interactions are short and screens small• Use WKInterfacePaymentButton following our guidelines
Apple Pay Within Apps WWDC 2015
Extensions
Messages, Siri, Maps, and more…
Previous releasesExtension Support
Previous releasesExtension Support
Apple Pay has been difficult to support in extensions
Previous releasesExtension Support
Apple Pay has been difficult to support in extensionsNot many interesting places to use it
New opportunitiesExtension Support
New opportunitiesExtension Support
New extensions in iOS 10 offer many new Apple Pay opportunities
New opportunitiesExtension Support
New extensions in iOS 10 offer many new Apple Pay opportunitiesNew PKPaymentAuthorizationController API allows presentment in non-UI contexts
MessagesExtension Support NEW
MessagesExtension Support
Split items and purchases
NEW
MessagesExtension Support
Split items and purchasesSend a gift to a friend
NEW
MessagesExtension Support
Split items and purchasesSend a gift to a friendOrganize outings
NEW
Intents—Siri and MapsExtension Support NEW
Intents—Siri and MapsExtension Support
Get a ride or cab from Maps and Siri
NEW
Intents—Siri and MapsExtension Support
Get a ride or cab from Maps and SiriPay directly from the extension
NEW
Intents—Siri and MapsExtension Support
Get a ride or cab from Maps and SiriPay directly from the extension
NEW
Using Apple Pay Extension Support NEW
Using Apple Pay Extension Support
Requesting and presenting payment is identical to WatchKit
NEW
Using Apple Pay Extension Support
Requesting and presenting payment is identical to WatchKitUse the new PKPaymentAuthorizationController in both UI and non-UI extensions
NEW
Using Apple Pay Extension Support
Requesting and presenting payment is identical to WatchKitUse the new PKPaymentAuthorizationController in both UI and non-UI extensionsShare your payment code between app and extension
NEW
Sample codeApple Pay NEW
Sample codeApple Pay
New sample code with WatchKit and Intents samples available
NEW
Sample codeApple Pay
New sample code with WatchKit and Intents samples availableSimplified to show a shared Apple Pay model
NEW
Testing Apple Pay
The simulatorTesting Apple Pay
The simulatorTesting Apple Pay
Test your iOS, WatchKit, Web, and Intents in the Simulator
The simulatorTesting Apple Pay
Test your iOS, WatchKit, Web, and Intents in the SimulatorReturns dummy payment data
The simulatorTesting Apple Pay
Test your iOS, WatchKit, Web, and Intents in the SimulatorReturns dummy payment dataUseful for UI development and testing
The simulatorTesting Apple Pay
The simulatorTesting Apple Pay
Not real card data
The simulatorTesting Apple Pay
Not real card dataNot representative of real device behavior
The simulatorTesting Apple Pay
Not real card dataNot representative of real device behaviorTesting with real devices and cards not always feasible
The Apple Pay Sandbox NEW
The Apple Pay Sandbox
A brand new testing environment for Apple Pay
NEW
The Apple Pay Sandbox
A brand new testing environment for Apple PayProvision test cards directly onto devices
NEW
The Apple Pay Sandbox
A brand new testing environment for Apple PayProvision test cards directly onto devicesReturns test encrypted payment data
NEW
Getting set upThe Apple Pay Sandbox NEW
Getting set upThe Apple Pay Sandbox
Create a testing iCloud Account at iTunes Connect
NEW
Getting set upThe Apple Pay Sandbox
Create a testing iCloud Account at iTunes ConnectLog in to that account on your device
NEW
Getting set upThe Apple Pay Sandbox
Create a testing iCloud Account at iTunes ConnectLog in to that account on your deviceSet your region
NEW
Getting set upThe Apple Pay Sandbox
Create a testing iCloud Account at iTunes ConnectLog in to that account on your deviceSet your region Use test cards at developer.apple.com
NEW
TipsThe Apple Pay Sandbox NEW
TipsThe Apple Pay Sandbox
Environments are switched automatically when you sign in/out of iCloud
NEW
TipsThe Apple Pay Sandbox
Environments are switched automatically when you sign in/out of iCloudValidate your apps and sites with production cards before launching
NEW
SupportThe Apple Pay Sandbox NEW
SupportThe Apple Pay Sandbox
Supports American Express, MasterCard, and Visa in Seed 1
NEW
SupportThe Apple Pay Sandbox
Supports American Express, MasterCard, and Visa in Seed 1Additional networks coming soon
NEW
Summary
Summary
New Wallet and Apple Pay API and features
Summary
New Wallet and Apple Pay API and featuresApple Pay in WatchKit
Summary
New Wallet and Apple Pay API and featuresApple Pay in WatchKitApple Pay in Extensions
Summary
New Wallet and Apple Pay API and featuresApple Pay in WatchKitApple Pay in ExtensionsTesting in the Sandbox and Simulator
On the webApple Pay
On the webApple Pay
Use Apple Pay on mobile websites
On the webApple Pay
Use Apple Pay on mobile websitesAuthorize payment on using your Apple Pay device
On the webApple Pay
Use Apple Pay on mobile websitesAuthorize payment on using your Apple Pay device
On the webApple Pay
Use Apple Pay on mobile websitesAuthorize payment on using your Apple Pay device
More Information
https://developer.apple.com/wwdc16/704
Apple Pay Partners
Bank and private label inquiries• In-app provisioning and co-brand/private label features
Value-added service inquiries• NFC passes and loyalty
- https://developer.apple.com/contact/passkit/
Related Sessions
Apple Pay on the web Mission Tuesday 1:40PM
Designing Great Apple Watch Experiences Presidio Wednesday 1:40PM
Labs
Apple Pay Lab 1 Frameworks Lab B Tuesday 4:00PM
Apple Pay Lab 2 Frameworks Lab D Wednesday 9:00AM