Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Apple Walletでパスを作るお話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryotaro Onoue
July 12, 2024
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apple Walletでパスを作るお話
Ryotaro Onoue
July 12, 2024
More Decks by Ryotaro Onoue
See All by Ryotaro Onoue
FlutterKaigi 2025 公式アプリ&WebサイトのCDについて
yumnumm
0
130
FlutterKaigi 2025 システム裏側
yumnumm
0
2.1k
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
250
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
110
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
130
私がやってきたアウトプット集
yumnumm
0
210
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
150
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
200
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
320
Other Decks in Technology
See All in Technology
20分でわかるセキュアAPI
nwiizo
1
200
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
170
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
460
ラジオの科学
frievea
0
280
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
140
第3回しろおびセキュリティスポンサーセッション
log0417
0
160
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
230
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
6.9k
TypeScript入門 2026
recruitengineers
PRO
3
500
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Six Lessons from altMBA
skipperchong
29
4.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
850
Deep Space Network (abreviated)
tonyrice
0
250
Joys of Absence: A Defence of Solitary Play
codingconduct
1
430
Navigating Weather and Climate Data
rabernat
0
460
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
210
Documentation Writing (for coders)
carmenintech
77
5.4k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Accessibility Awareness
sabderemane
1
170
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
2024.07.12 Apple WalletͰύεΛ࡞Δ͓ YUMEMI Inc. Flutter Engineer - Ryotaro Onoue
1 Money Forward×YUMEMI.grow ࣗশएखϞόΠϧΤϯδχΞLTձ
0. ࣗݾհ ɾגࣜձࣾΏΊΈ FlutterΤϯδχΞ 20234݄ʙ ɾFlutterKaigi 2023 (ڞಉ)ొஃ&ελοϑ ɾDart BFF(Backend
for Frontend)ͷΛ͠·ͨ͠ ɾFlutterKaigi 2024 WebαΠτνʔϜ&σʔλνʔϜ ɾTwitter @YumNumm(͙͙) Ͱ͍ͬͯ·͢ ɾࠓ9݄Ͱ20ࡀʹͳΓ·͢ ࠓ19Ͱ͢ 2
None
ࠓͷτϐοΫ ❌ FlutterΤϯδχΞͰ͕͢ɺFlutterͷ͠·ͤΜ ࠓɺAppleϓϥοτϑΥʔϜʹدͬͨΛ͠·͢ (ݩʑAndroidʹ৮Δ༧ఆͩͬͨͷͰ͕͢ɺ͕࣌ؒ͋·ΓऔΕͣ...🙏) 4
ࠓͷτϐοΫ ❌ FlutterΤϯδχΞͰ͕͢ɺFlutterͷ͠·ͤΜ ࠓɺAndroidͱiOS ͦΕͧΕϓϥοτϑΥʔϜʹدͬͨΛ͠Α͏ͱࢥ͍·͢ 5
ࠓͷτϐοΫ 6 ΥϨοτ App Έͳ͞Μ͍ͬͯ·͔͢?
ͳΜͰ͜ͷ? ɾ@ۙॴͷΠτʔϤʔΧυʔ ɾηϧϑϨδͰొΛͨ͠ޙͷϙΠϯτΧʔυొʹͯ ɾΠτʔϤʔΧυʔͷWiFiʹଓ͞Ε͍ͯͯ ΞϓϦ͕ىಈ͠ͳ͍ ɾϞόΠϧσʔλ༰ྔ͕ऴΘ͍ͬͯͯ ىಈʹ10ඵ͘Β͍ͨ͞ΕΔ ɾͭͷΠϠ͕ͩ ϙΠϯτ͕͔ͳ͍ͷ൵͍͠ ɾ݁Ռ:
ڏແͷ͕࣌ؒྲྀΕΔ 7
ͳΜͰ͜ͷ? ɾۙॴͷΠτʔϤʔΧυʔʹͯ ɾηϧϑϨδͰొΛͨ͠ޙͷϙΠϯτΧʔυొʹͯ ɾ΅͘ʮ͋ͬɺϙΠϯτΧʔυొ͠ͳ͍ͱ... εϚϗͷΞϓϦͬͱʯ ɾiPhoneʮΠτʔϤʔΧυʔͷWiFiܨ͕͍ͬͯΔ͔Βೝূͯ͠Ͷʯ(ΩϟϓςΟϒWiFi) ɾ΅͘ʮ͍ɺࠓ͍ΒΜʯ ɾΞϓϦʮ(10ඵ΄Ͳػ)ωοτଓͰ͖·ͤΜʯ ɾ΅͘ʮWiFiΦϑʹͯ͠ΞϓϦ࠶ىಈ...ʯ ɾΞϓϦʮ(5ඵ΄Ͳػ)͍ɺϙΠϯτΧʔυͷόʔίʔυʯ
ɾ΅͘ʮͬͱܾࡁͷͱ͜Ζ·ͰདྷͨΘʯ 8 ɾSuicaܾࡁɾΫϨδοτΧʔυܾࡁͰ͢Β Apple Watch୯ମͰࡁ·ͤΒΕΔ͜ͷ࣌ ʹͲ͏ͯ͠ʮΞϓϦΛ։͍ͯͭʯͱ͍͏ΊΜͲ͍͘͞ίτΛ͠ͳ͍ͱ͍͚ͳ͍ͷ ͔? ɾ͜͜Ұͭ ٕज़Ͱղܾ͍ͨ͠ɻ -> ύεΛ࡞ͬͨΔ!
2. Apple WalletͷΈ 9
1. ύεͷσʔλΛ༻ҙ͢Δ - pass.json: ύεʹදࣔ͢ΔจࣈྻϝλσʔλΛ֨ೲ - ֤छը૾ϑΝΠϧ: ϩΰΞΠίϯͳͲ - (optional)
ϩʔΧϦθʔγϣϯใ 2. Apple WalletͷΈ 10
1. ύεͷσʔλΛ༻ҙ͢Δ - pass.json: ύεʹදࣔ͢ΔจࣈྻϝλσʔλΛ֨ೲ - ֤छը૾ϑΝΠϧ: ϩΰΞΠίϯͳͲ - (optional)
ϩʔΧϦθʔγϣϯใ 2. ύεͷσʔλͦΕͧΕʹରͯ͠ॺ໊Λ͢Δ - ͍͔ͭ͘ͷσʔλΛ༻ҙͯ͠ॺ໊ 3. σʔλͱॺ໊ΛؚΊͯZIPѹॖ 4. ֦ுࢠΛ.pkpassʹม͑ͯ - Webܦ༝ͰϝʔϧͰAirDropͰʙ 2. Apple WalletͷΈ 11
- Apple WalletΛܦ༝ͯ͠ύεΛ৴ɾ͢ΔͨΊʹॺ໊͕ඞཁ - ύε͕࡞+ॺ໊͞Ε͔ͯΒɺѱҙͷ͋ΔϢʔβʹΑͬͯվม͞Ε͍ͯͳ͍͜ͱΛ ݕূͰ͖ΔΑ͏ʹͳΔ - Pass Type IdentifierͱTeam
IDΛ༻ҙ͢Δ - Identifier(ࣝผࢠ)Λొͨ͠ΒɺCertificate(ূ໌ॻ)ΛDL͢Δ - Identifier pass. ͔Β࢝·ΔҙͷٯDNSจࣈྻ 2-0. ֤छূ໌ॻͷ༻ҙ 12
- ύεͷσʔλ pass.json ʹهड़͢Δ - description, formatVersion: “1”, organizationName(Team ID),
passTypeIdentifier, serialNumber ඞਢ - barcodesbackgroundColor, associatedStoreIdentifiers, locationsهड़Ͱ͖Δ - associatedStoreIdentifiers: ύεʹඥͮ͘ΞϓϦ ͷAppStoreࣝผࢠྻɻύε͔ΒΞϓϦΛىಈͰ͖Δ - locations: ύεʹඥͮ͘ҢܦྻɻͦͷҐஔʹߦ͘ ͱɺϩοΫը໘ʹύεͷީิ͕ग़ͯ͘Δ - ৄࡉͳύεͷจࣈྻPass Type͝ͱʹهड़(࣍ϖʔδ) 2-1. ύεͷσʔλΛ༻ҙ͢Δ 13
- ύεʹେ͖͘5छྨ͋ΜͶΜ: ͦΕͧΕͰදࣔͰ͖Δ߲͕ҧ͏ 2-1. ύεͷσʔλΛ༻ҙ͢Δ 14 Boarding pass Coupon Generic
Event ticket Store card https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Creating.html#//apple_ref/doc/uid/TP40012195-CH4-SW1 ΑΓҾ༻
- ύεʹେ͖͘5छྨ͋ΜͶΜ: ͦΕͧΕͰදࣔͰ͖Δ߲͕ҧ͏ 2-1. ύεͷσʔλΛ༻ҙ͢Δ 15 Boarding pass Coupon Generic
Event ticket Store card https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/YourFirst.html ΑΓύεσʔλΛҾ༻
- ֤छը૾ͷ༻ҙ - എܠը૾ΞΠίϯɾϩΰͳͲΛஔ Ͱ͖Δ - ύεͷλΠϓʹԠͯ͡දࣔͰ͖Δը૾ ͕ҟͳΔͷͰɺ֬ೝ͢͠ 2-1. ύεͷσʔλΛ༻ҙ͢Δ
16
- ॺ໊ɾѹॖsignpassίϚϯυͰָʹ࣮Ͱ͖Δ - signpassπʔϧApple Developer͔ΒDLͰ͖Δ - signpass -p hoge Ͱѹॖʙॺ໊·Ͱͬͯ͘ΕΔ
- hoge.pkpass͕Ͱ͖ΔͷͰɺAirDropͰૹΕOK 2-2. ύεͷσʔλΛॺ໊͢Δ 17 https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/index.html ΑΓDLՄೳ
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 18
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 19
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 20
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 3. σʔλ+ॺ໊ΛZIPѹॖ -> ֦ுࢠΛ.pkpassʹมߋ Ϥγ👌 2-2. ύεͷσʔλΛॺ໊͢Δ 21
3. ࣮ࡍʹύεΛߏங͢Δ 22
- ࠓճΠτʔϤʔΧυʔͷϙΠϯτΧʔυΛApple WalletʹೖΕ͍ͨ - ͪͳΈʹɺར༻ن֬ೝࡁΈ(ϙΠϯτΧʔυͷόʔίʔυෳʹؔ͢Δهड़ͳ͍) - όʔίʔυ࣌ؒʹΑͬͯมԽ͠ͳ͍ - े࣮ݱՄೳͳ͜ͱݕূࡁΈ 3.
࣮ࡍʹύεΛߏங͢Δɹ 23
3. ࣮ࡍʹύεΛߏங͢Δɹ 24
25 ͬͯ͜ͱͰ!
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system 4. [͓·͚]
ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 26
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system - νέοτੜCloudflare
Workers(αʔόϨεJS࣮ߦڥ)Ͱ࣮ߦ - TypeScriptͰهड़ - ແྉͰࢼͤΔͷͰؾ͕͍ͨΒݟͯΈ͍ͯͩ͘͞ 4. [͓·͚] ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 27
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system - νέοτੜCloudflare
Workers(αʔόϨεJS࣮ߦڥ)Ͱ࣮ߦ - TypeScriptͰهड़ - αϯϓϧύε https://api.ticket.yumnumm.dev/sample/wallet ͔Β DLͰ͖·͢! 4. [͓·͚] ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 28 ͍͔ͭ͘᠘͕͋ΔͷͷɺTSͷܕʹैͬͯຒΊ ͍͚ͯͩ͘ͳͷͰɺׂͱָʹߏஙͰ͖·͢
- Apple WalletͰͷύεੜׂͱָʹͰ͖Δ - ΞϓϦαʔϏεʹΈࠐΉ͚ͩͰͳ͘ɺࣗ༻ʹύεΛΉͷΞϦ(Ex. ϙ ΠϯτΧʔυɾֶੜূ) - نϧʔϧʹؾΛ͚ͭͯ -
ಈతʹੜ͢Δ͜ͱՄೳ - ຊLTͰѻ͍·ͤΜͰ͕ͨ͠ɺApple Push Notification Service(APNs)Λ ར༻ͯ͠ αʔό͔Βಈతʹ༰Λॻ͖͑Δ͜ͱͰ͖·͢ - ௨ΛૹͬͨΓͰ͖Δ 5. ·ͱΊ 29
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠! 30 Follow me on Twitter: @YumNumm νέοτཧγεςϜ Twitter