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
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
140
FlutterKaigi 2025 システム裏側
yumnumm
0
2.2k
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
260
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
110
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
130
私がやってきたアウトプット集
yumnumm
0
220
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
150
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
230
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
320
Other Decks in Technology
See All in Technology
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
130
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
480
エージェント化するAI:現在地とその先に起きる変化 / AI as Agents: The Current State and the Changes Ahead
ks91
PRO
0
160
dbt と Snowflake と tag
kevinrobot34
2
290
Claude Codeの体系的な理解と知識のフック
oikon48
8
6k
Distributed Transactions Under Fire: Building a Zero-Oversell Flash Sale Platform with Amazon Aurora DSQL
yama3133
1
110
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
Digitization部 紹介資料
sansan33
PRO
2
7.8k
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
5
1k
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
360
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
230
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
3
910
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
290
How STYLIGHT went responsive
nonsquared
100
6.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
Automating Front-end Workflow
addyosmani
1369
210k
A designer walks into a library…
pauljervisheath
211
24k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
220
The Cost Of JavaScript in 2023
addyosmani
55
10k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Leo the Paperboy
mayatellez
8
2.2k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
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