Slide 1

Slide 1 text

Developing Apple Pay In-App Provisioning in merpay Kentaro Matsumae (@kenmaz) merpay #merpay_techtalk merpay Tech Talk for iOS/Android Engineer, Mar 27th

Slide 2

Slide 2 text

"HFOEB w "QQMF1BZ w "QQMF1BZ*O"QQ1SPWJTJPOJOH w .FSDBSJBSDIJUFDUVSFPWFSWJFX w %FWFMPQJOHXJUITBOECPYBQQ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

"QQMF1BZ

Slide 5

Slide 5 text

$SFEJU$BSE .BHOFUJDTUSJQF w .BHOFUJDTUSJQF w 4JHO 1IPUPTCZ೔ຊΫϨδοτڠձIUUQTXXXKDSFEJUPSKQTFDVSJUZJDIUNM

Slide 6

Slide 6 text

$SFEJU$BSE *$ w *$DIJQSFBEFS w EJHJUT1*/OVNCFS 1IPUPTCZ೔ຊΫϨδοτڠձIUUQTXXXKDSFEJUPSKQTFDVSJUZJDIUNM

Slide 7

Slide 7 text

"QQMF1BZ w "EE1MBTUJD$SFEJU$BSET JOUP8BMMFUBQQ w 4FDVSF&MFNFOU w 'BDF*%1BTTDPEF BVUIFOUJDBUJPO w /'$DPOUBDUMFTTQBZNFOU

Slide 8

Slide 8 text

"QQMF1BZ3FHJTUSBUJPO'MPX J04%FWJDF "QQMF 1BZNFOU /FUXPSL w $BSEIPMEFSOBNF w $BSE/VNCFS '1"/ w 4FDVSJUZ$PEF 5PLFO %1"/ 4FDVSF &MFNFOU '1"/TV⒏Y IUUQTTVQQPSUBQQMFDPNKBKQ)5 '1"/ˠ%1"/

Slide 9

Slide 9 text

"QQMF1BZ1BZNFOU'MPX J04%FWJDF /'$$BSE 3FBEFS 1BZNFOU /FUXPSL "VUI ✅ %1"/ 4FDVSF &MFNFOU %1"/ˠ'1"/ *TTVFS

Slide 10

Slide 10 text

w '1"/ 'VOEJOH1SJNBSZ"DDPVOU/VNCFS w %1"/ %FWJDF1SJNBSZ"DDPVOU/VNCFS w 1BZNFOUQSPDFTTVTFTFODSZQUFE%1"/POMZ OPU'1"/ w &ODSZQUFEBOETUPSFEJO4FDVSF&MFNFOU w %1"/DIBOHFTFWFSZUJNFZPVSFHJTUFS w l5PLFOJ[BUJPOzl5PLFO1BZNFOUz '1"/%1"/

Slide 11

Slide 11 text

%1"/ TV⒏Y '1"/ TV⒏Y &YQFSJNFOU3FTFUUJOH"QQMF1BZ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH 'SPNJTTVJOHWJSUVBMDBSEUPBEEJOHJUJOUP"QQMF8BMMFU "MMQSPDFTTBSFEPOFJO"QQ

Slide 14

Slide 14 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH *TTVFS "QQMF

Slide 15

Slide 15 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH *TTVFS "QQMF *TTVFSFRVFTUGPSBWJSUVBM QSFQBJEDBSE

Slide 16

Slide 16 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH *TTVFS "QQMF *TTVFBWJSUVBMQSFQBJEDBSE '1"/ %1"/

Slide 17

Slide 17 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH *TTVFS "QQMF 3FRVFTUUPSFHJTUFSDBSEUISPVHI1BTT,JU"1* PassKit - PKAddPaymentPassViewController - PKPassLibrary %1"/

Slide 18

Slide 18 text

"QQMF1BZ*O"QQ1SPWJTJPOJOH *TTVFS "QQMF 3FHJTUFSDBSEJOUP8BMMFUBQQ 4FDVSF &MFNFOU

Slide 19

Slide 19 text

%1"/ "QQMF1BZ1BZNFOU'MPX J04%FWJDF /'$$BSE 3FBEFS 1BZNFOU /FUXPSL 4FDVSF &MFNFOU %1"/ˠ'1"/ "VUI ✅ NFSQBZ

Slide 20

Slide 20 text

%1"/ TV⒏Y '1"/ TV⒏Y &YQFSJNFOU3FTFUUJOH"QQMF1BZ " HBJO

Slide 21

Slide 21 text

1,"EE1BZNFOU1BTT7JFX$POUSPMMFS open class PKAddPaymentPassViewController : UIViewController { public init?( requestConfiguration configuration: PKAddPaymentPassRequestConfiguration, delegate: PKAddPaymentPassViewControllerDelegate?) } public protocol PKAddPaymentPassViewControllerDelegate : NSObjectProtocol { public func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController, generateRequestWithCertificateChain certificates: [Data], nonce: Data, nonceSignature: Data, completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void) public func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController, didFinishAdding pass: PKPaymentPass?, error: Error?) }

Slide 22

Slide 22 text

1,1BZNFOU1BTT1,1BTT-JCSBSZ open class PKPaymentPass : PKPass { open var primaryAccountIdentifier: String { get } open var primaryAccountNumberSuffix: String { get } weak open var deviceAccountIdentifier: NSString? { get } weak open var deviceAccountNumberSuffix: NSString? { get } } open class PKPassLibrary : NSObject { open func passes() -> [PKPass] open func remotePaymentPasses() -> [PKPaymentPass] open func present(_ pass: PKPaymentPass) open func canAddPaymentPass(withPrimaryAccountIdentifier primaryAccountIdentifier: String) -> Bool open func canAddFelicaPass() -> Bool }

Slide 23

Slide 23 text

.FSDBSJ "SDIJUFDUVSF0WFSWJFX

Slide 24

Slide 24 text

GSBNFXPSLT 'SBNFXPSLT

Slide 25

Slide 25 text

w .FSDBSJ&OUJUZ w .FSDBSJ,JU w ʜ 'SBNFXPSLT

Slide 26

Slide 26 text

NFSQBZGSBNFXPSL

Slide 27

Slide 27 text

4BOECPY"QQT 4BOECPY"QQ

Slide 28

Slide 28 text

4FFNPSF w .FSDBSJ5FDI$POG w IUUQTUFDIDPOGNFSDBSJDPNTFTTJPO w J04%$+BQBO w IUUQTGPSUFFKQJPTEDKBQBOQSPQPTBMFGDE EEDBFEFECBB

Slide 29

Slide 29 text

%FWFMPQJOH "QQMF1BZ*O"QQ1SPWJTJPOJOH 8JUI4BOECPY"QQ

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

130#-&. w .645UPJOTUBMMUIFBQQWJB5FTU'MJHIUGPS EFCVHHJOH w &WFSZUJNFZPVEFCVH ZPVOFFEUPSFCVJME BOEVQMPBEUIF"QQUP5FTU'MJHIU #VJME 6QMPBE 5FTU'MJHIU1SPDFTTJOH NJO

Slide 32

Slide 32 text

w 5FTU'MJHIUQSPDFTTJOHUJNFEFQFOETPOCJOBSZTJ[F w .JOJNJ[FUIFDPEFUPSFEVDFCVJMEJOHBOE5'QSPDFTTJOH UJNF w 4BOECPY"QQJTVTFGVMUPEPJU 3&40-65*0/

Slide 33

Slide 33 text

0SHBOJ[FQSPWJTJPOJOHSFMBUFE DPEFJOUPPOFDPNQPOFOU 1SPWJTJPOJOH $PSF 1SPWJTJPOJOH 6* .FSQBZGSBNFXPSL

Slide 34

Slide 34 text

4BOECPY"QQXJUI$PSFDPNQPOFOU 1SPWJTJPOJOH $PSF 1SPWJTJPOJOH 6* .FSQBZGSBNFXPSL 4BOECPY "QQ

Slide 35

Slide 35 text

3&46-54 1SPWJTJPOJOH $PSFDPNQPOFOUT ,# 4BOECPY"QQ #VJME 6QMPBE 5FTU'MJHIU1SPDFTTJOH NJO Y'BTUFS

Slide 36

Slide 36 text

6*JNQMFNFOUBUJPO VTJOH4BOECPY"QQ

Slide 37

Slide 37 text

1SPWJTJPOJOH'MPX

Slide 38

Slide 38 text

1SPWJTJPOJOH'MPX

Slide 39

Slide 39 text

1SPWJTJPOJOH'MPX 4BOECPY "QQ 4UBSU

Slide 40

Slide 40 text

1SPWJTJPOJOH$PSF 1SPWJTJPOJOH'MPX 4BOECPY "QQ 4UBSU

Slide 41

Slide 41 text

%FQFOEFODZ*OKFDUJPO public protocol DependencyRegistry { var service: ServiceType { get } var mercariViewControllerFactory: MercariViewControllerFactoryType { get } var mercariExperimentProvider: MercariExperimentsProviderType { get } var nfcClient: NFCClientType { get } … 1SPWJEFTBMMFYUFSOBMFOWJSPONFOUEFQFOEFOUPCKFDUT 1SPWJTJPOJOH $PSF 1SPUPDPM

Slide 42

Slide 42 text

%FQFOEFODZ3FHJTUSZ %FQFOEFODZ 3FHJTUSZ "MM7JFX$POUSPMMFSTBSFJOJUJBMJ[FEXJUI%FQFOEFODZ3FHJTUSZ

Slide 43

Slide 43 text

6*VTFT$PSFDPNQPOFOUUISPVHI %FQFOEFODZ3FHJTUSZ %FQFOEFODZ 3FHJTUSZ 1SPWJTJPOJOH $PSF 1SPWJTJPOJOH 6* .FSQBZGSBNFXPSL 1SPEVDUJPO "QQ

Slide 44

Slide 44 text

.FSQBZGSBNFXPSL 4BOECPY "QQ %FQFOEFODZ 3FHJTUSZ 1SPWJTJPOJOH $PSF .PDL 1SPWJTJPOJOH 6* 6*VTFT$PSFDPNQPOFOUUISPVHI %FQFOEFODZ3FHJTUSZ

Slide 45

Slide 45 text

1SPWJTJPOJOH$PSF 1SPWJTJPOJOH'MPX 4BOECPY "QQ 4UBSU

Slide 46

Slide 46 text

1SPWJTJPOJOH'MPX 4BOECPY "QQ 4UBSU %VNNZ /FYU

Slide 47

Slide 47 text

0UIFSVTFDBTFTPG 4BOECPY"QQ

Slide 48

Slide 48 text

&BTZUPUFTUWBSJPVTFSSPSDBTFT

Slide 49

Slide 49 text

&BTZUPBDDFTTUPBOZTDSFFO %VNNZ /FYU %VNNZ /FYU 5BQT

Slide 50

Slide 50 text

&BTZUPBDDFTTUPBOZTDSFFO 4BOECPY "QQ 1BHF 1BHF 1BHF 1BHF 1BHF 1BHF 5BQ

Slide 51

Slide 51 text

3FDBQ w *OUSPEVDFE"QQMF1BZBOE*O"QQ1SPWJTJPOJOH w 4BOECPY"QQIFMQTUPJNQSPWFEFWFMPQNFOUF⒏DJFODZ w 6TFGVMGPSEFWFMPQJOHGFBUVSFTUIBUBSFIJHIMZEFQFOEFOUPOUIF FYUFSOBMFOWJSPONFOU w *NQPSUBOUUIBU7JFX$POUSPMMFSTIBWFBMPPTFMZDPVQMFEEFTJHO w 4BOECPY"QQNBZIFMQTZPVSDPEFNPSFMPPTFMZDPVQMFE

Slide 52

Slide 52 text

5IBOLZPV