Slide 1

Slide 1 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE MPWF@TXJGU ू·Ε4XJGU޷͖ʂ4XJGUѪ޷ձεϐϯΦϑ88%$ηογϣϯཁ໿ձ!0OMJOF+VMZ $PSF/'$ʹؔ͢Δ৽ػೳ 8IBUTOFXJO$PSF/'$ USFBTUSBJO5BOBLB3ZPHB !USFBTUSBJO

Slide 2

Slide 2 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE USFBTUSBJO5BOBLB3ZPHB 4XJGU J04 XBUDI04 $PSF/'$ 044 ɹɹɹɹɹɹɹɹɹɹ!USFBTUSBJOɹIUUQTUSFUKQ ߴઐʢʣ‎େֶʢʣ‎৽ଔʢʣ ੜ·Εͯ͸͡Ίͯຊ֨తʹऔΓ૊Μͩ ϓϩάϥϛϯάݴޠ4XJGU ࣗݾ঺հ

Slide 3

Slide 3 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE +BQBO/'$3FBEFS J1IPOFͰిࢠϚωʔͷ ࢒ߴɾར༻ཤྺͷಡΈऔΓ J1IPOFͰಡΈऔͬͨཤྺΛ J$MPVEܦ༝ͰଞͷσόΠε͔Β֬ೝͰ͖Δ ೥݄ϦϦʔεɹμ΢ϯϩʔυ਺, !+BQBO/'$3FBEFS J1IPOFͰిࢠϚωʔͷ࢒ߴΛνΣοΫ J04"QQ

Slide 4

Slide 4 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE IUUQTHJUIVCDPNUSFBTUSBJO53&5+BQBO/'$3FBEFS +BQBO/'$3FBEFSͷίΞ෦෼Λ044Խͨ͠ϥΠϒϥϦ ӡస໔ڐূ΍ϚΠφϯόʔΧʔυͷҰ෦಺༰ͷಡΈऔΓ΋ *OJUJBMDPNNJU೥݄೔ɹ4UBST!೥݄೔࣌఺ 53&5+BQBO/'$3FBEFS .*5-JDFODF 044-JCSBSZ

Slide 5

Slide 5 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE /FBS'JFME$PNNVOJDBUJPO ۙڑ཭ແઢ௨৴

Slide 6

Slide 6 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE ೔ৗʹ༹͚ࠐΉ/'$ ͋ͳͨͷपΓʹ΋/'$ w ඇ઀৮ܾࡁ ‎ΫϨδοτΧʔυͷίϯλΫτϨεܾࡁ ‎ϓϦϖΠυܕͷిࢠϚωʔʢަ௨ܥɺҰൠతͳফඅܥʣ w ຊਓ֬ೝ ‎ݸਓ൪߸ʢϚΠφϯόʔʣΧʔυɹɹӡస໔ڐূɹɹύεϙʔτ ‎ֶੜূɹɹࣾһূ w σʔλͷަ׵ ‎"OESPJE#FBN "OESPJE*$4d1JF

Slide 7

Slide 7 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE J1IPOFͰ/'$Λ࢖͏ ‎$PSF/'$

Slide 8

Slide 8 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE "QQ$MJQTͰ$PSF/'$͸࢖Θͳ͍ J04Ͱ࢖͑ΔίϯύΫτͳ"QQ w "QQ$MJQTΛ։͘ w /'$ w 23ίʔυ w Ϛοϓʢ෇ۙͷݕࡧʣ w 4JSJ͔ΒͷఏҊ w 4BGBSJ w ϝοηʔδ w "QQ$MJQίʔυ w /'$ɾ23ίʔυͷத਎͸ 6OJWFSTBM-JOLT w J04ଆ͕ಡΈऔͬͯॲཧ͢Δ ‎$PSF/'$ͷ࣮૷͸ඞཁͳ͠

Slide 9

Slide 9 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE $PSF/'$ʹؔ͢Δ৽ػೳ 8IBUTOFXJO$PSF/'$ XXED w $PSF/'$ͷ֓ཁ 0WFSWJFX w 4XJGUͰͷߏจͷมߋ 4ZOUBYDIBOHFT w *40λά޲͚ͷϝιουΛ௥Ճ *40BEEJUJPOT

Slide 10

Slide 10 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE $PSF/'$ʹؔ͢Δ৽ػೳ 8IBUTOFXJO$PSF/'$ XXED w $PSF/'$ͷ֓ཁ 0WFSWJFX w 4XJGUͰͷߏจͷมߋ 4ZOUBYDIBOHFT w *40λά޲͚ͷϝιουΛ௥Ճ *40BEEJUJPOT

Slide 11

Slide 11 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE 3FTVMUΛ࢖ͬͨ4XJGUߏจ .PEFSO4XJGUTZOUBYXJUI3FTVMU w J04ҎલͷNFCFeliCaTagͷྫ &YBNQMFPGNFCFeliCaTagCFGPSFJ04 detectedFeliCaTag.readWithoutEncryption( serviceCodeList: serviceCodeList, blockList: blockList) { ( statusFlag1: Int, statusFlag2: Int, blockData: [Data], error: Error?) in if let error = error { // Handle error. return } // Handle status flag 1, status flag 2 and block data }

Slide 12

Slide 12 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE 3FTVMUΛ࢖ͬͨ4XJGUߏจ .PEFSO4XJGUTZOUBYXJUI3FTVMU w J04Ҏ߱ͷNFCFeliCaTagͷྫ &YBNQMFPGNFCFeliCaTagBGUFSJ04 detectedFeliCaTag.readWithoutEncryption( serviceCodeList: serviceCodeList, blockList: blockList) { ( response: Result<(NFCFeliCaStatusFlag, [Data]), Error>) in switch response { case .success((let statusFlag, let blockData)): // Handle NFCFeliCaStatusFlag object and block data case .failure(let error): // Handle Error object. } }

Slide 13

Slide 13 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE detectedFeliCaTag.readWithoutEncryption( serviceCodeList: serviceCodeList, blockList: blockList) { ( statusFlag1: Int, statusFlag2: Int, blockData: [Data], error: Error?) in if let error = error { session.invalidate(errorMessage: error.localizedDescription) } guard statusFlag1 == 0x00, statusFlag2 == 0x00 else { session.invalidate( errorMessage: "εςʔλεϑϥά͕ΤϥʔΛ͍ࣔͯ͠·͢ɻ\(statusFlag1), \(statusFlag2)") return } let data = blockData.first! let balance = Int(data[11]) + Int(data[12]) << 8 session.alertMessage = "࢒ߴ: ¥\(balance)" session.invalidate() } ަ௨ܥ*$Χʔυͷ࢒ߴΛಡΈऔΔ J04Ҏલͷ৔߹ɹcompletionHandler

Slide 14

Slide 14 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE detectedFeliCaTag.readWithoutEncryption( serviceCodeList: serviceCodeList, blockList: blockList) { ( response: Result<(NFCFeliCaStatusFlag, [Data]), Error>) in switch response { case .success((let statusFlag, let blockData)): guard statusFlag.statusFlag1 == 0x00, statusFlag.statusFlag2 == 0x00 else { session.invalidate(errorMessage: "εςʔλεϑϥά͕ΤϥʔΛ͍ࣔͯ͠·͢ɻ\(statusFlag)") return } let data = blockData.first! let balance = Int(data[11]) + Int(data[12]) << 8 session.alertMessage = "࢒ߴ: ¥\(balance)" session.invalidate() case .failure(let error): session.invalidate(errorMessage: error.localizedDescription) } } ަ௨ܥ*$Χʔυͷ࢒ߴΛಡΈऔΔ J04Ҏલͷ৔߹ɹresultHandler

Slide 15

Slide 15 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE Մಡੑ޲্ͷͨΊͷFOVNͷมߋ .PSFEFTDSJQUJWFFOVNT w FOVNͷ໊শมߋ 3FOBNFTPGUIFTFFOVNT w PollingRequestCode‎NFCFeliCaPollingRequestCode w PollingTimeSlot ‎NFCFeliCaPollingTimeSlot w EncryptionId ‎NFCFeliCaEncryptionId w NFCISO15693ɺNFCISO7816޲͚ʹ΋໊শมߋɾ௥Ճ͋Γ 0UIFSOFXFOVNT

Slide 16

Slide 16 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE ࠓ೥͸ΠϯύΫτগͳΊ J04Ͱͷ$PSF/'$ͷϝιου௥Ճͱൺֱͯ͠ w J04Ͱͷ$PSF/'$ʮωΠςΟϒλάΞΫηεͷ௥Ճʯ ‎J04·Ͱ͸ܾΊΒΕͨϑΥʔϚοτʢ/%&'ʣͷΈ ‎ωΠςΟϒϓϩτίϧʢ*40ɺ'FMJ$Bɺ.*'"3&ͳͲʣ͕࢖͑ΔΑ͏ʹ ɹ‎ిࢠϚωʔͷಡΈऔΓɺνϟʔδ ɹ‎ϚΠφϯόʔΧʔυͷಡΈऔΓɺॻ͖ࠐΈ w J04Ͱ͸4XJGUͰͷߏจมߋͱ*40λά޲͚ͷػೳ௥Ճ ‎*40*&$ʹରԠ ‎ਤॻؗͷຊͷλάͳͲ

Slide 17

Slide 17 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE ئ͍׎Θͣ "QQMF8BUDIͰ$PSF/'$͕࢖͑ΔΑ͏ʹʜͳΒͳ͔ͬͨ USFBTUSBJO5BOBLB3ZPHB !USFBTUSBJO ͬͪ͜͸͍ͭͰ΋େৎ෉Ͱ͢Αʜʁ"QQMF͞Μʜʜʁ 88%$ΑΖ͓͘͠ئ͍͠·͢Ͷʜʜʜʁ ޕޙu೥݄೔u5XFFU%FDL

Slide 18

Slide 18 text

$PQZSJHIU˜USFBTUSBJO5BOBLB3ZPHBɹ"MMSJHIUTSFTFSWFE ࢀߟ৘ใ ͋Γ͕ͱ͏͍͟͝·ͨ͠ w ຊεϥΠυ͸4QFBLFS%FDLʹͯӾཡͰ͖·͢ IUUQTTQFBLFSEFDLDPNUSFBTUSBJO w ຊεϥΠυͰͷαϯϓϧίʔυΛ(JU)VC(JTUͰެ։͍ͯ͠·͢ IUUQTHJTUHJUIVCDPNUSFBTUSBJOGFDFGBCFFD w 88%$7JEFPT w $PSF/'$&OIBODFNFOUT88%$ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w 8IBUTOFXJO$PSF/'$88%$ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED