Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apple Walletでパスを作るお話
Search
Ryotaro Onoue
July 12, 2024
Technology
270
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
150
FlutterKaigi 2025 システム裏側
yumnumm
0
2.2k
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
270
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
110
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
140
私がやってきたアウトプット集
yumnumm
0
230
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
160
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
240
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
320
Other Decks in Technology
See All in Technology
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
870
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.3k
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
3
560
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
130
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.8k
データ_AIの事業の勝敗をわけるもの
nek0128
1
460
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
120
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
400
事業課題から技術的負債に向き合う
sansantech
PRO
2
2k
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.7k
AIは推し活である。
kurazuuuuuu
1
860
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
Paper Plane
katiecoart
PRO
4
53k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
550
Ruling the World: When Life Gets Gamed
codingconduct
0
340
GitHub's CSS Performance
jonrohan
1033
470k
Tell your own story through comics
letsgokoyo
1
1.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
460
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
For a Future-Friendly Web
brad_frost
183
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Designing for Performance
lara
611
70k
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