704 What's New With Wallet & Apple Pay 05 FINAL · Not just Apple Pay Wallet There's...

Preview:

Citation preview

© 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

- apple-pay-provisioning@apple.com

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

Recommended