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
In-App Purchasesの 実装前に知っておきたい ハマりポイント / Points ...
Search
rockname
May 20, 2019
Programming
0
1.8k
In-App Purchasesの 実装前に知っておきたい ハマりポイント / Points to be aware of when implementing In-App Purchases
rockname
May 20, 2019
Tweet
Share
More Decks by rockname
See All by rockname
AIを活用したレシート読み取り機能の開発から得られた実践知 / AI Receipt Scan Practice
rockname
2
4.1k
Unlock the Potential of Swift Code Generation
rockname
0
490
生成AIを活用したレシート読み取り機能のアプリ開発の裏側 / AI Receipt Scan App Development
rockname
0
130
ゼロから理解するDependency Injection / Understanding Dependency Injection from the Ground Up
rockname
2
4.3k
サブスクリプション機能制御の設計における勘所
rockname
0
1.2k
Anatomy of Dynamic color
rockname
1
1.2k
キャッシュによる状態管理のアーキテクチャ / Cache-based state management architecture
rockname
10
20k
Optimistic Updatesで UXを向上させる / Improve UX with Optimistic Updates
rockname
2
1.5k
モバイルアプリのリストUIにおける 理想的なState表示について / The ideal state display in a mobile app list UI
rockname
6
2.2k
Other Decks in Programming
See All in Programming
2026年 エンジニアリング自己学習法
yumechi
0
140
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
MUSUBIXとは
nahisaho
0
140
Fluid Templating in TYPO3 14
s2b
0
130
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
AI巻き込み型コードレビューのススメ
nealle
2
1.3k
CSC307 Lecture 07
javiergs
PRO
1
560
Gemini for developers
meteatamel
0
100
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
97
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Designing for Timeless Needs
cassininazir
0
130
Believing is Seeing
oripsolob
1
58
Building Adaptive Systems
keathley
44
2.9k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
Evolving SEO for Evolving Search Engines
ryanjones
0
130
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
65
The browser strikes back
jonoalderson
0
400
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
In-App Purchasesͷ ࣮લʹ͓͖͍ͬͯͨ ϋϚΓϙΠϯτ ΈͯͶͷMeetup #5 ܾࡁΛࢧ͑Δٕज़ 2019/05/20 גࣜձࣾϛΫγΟ ΈͯͶࣄۀ෦
ϩΫωϜ@rockname
ϩΫωϜ@rockname • גࣜձࣾϛΫγΟ 2018৽ଔೖࣾ • ՈΞϧόϜΈͯͶ • ΞϓϦ։ൃάϧʔϓ iOS(Swift, objc)
> Android(Kotlin, Java) == Rails(ruby) • झຯ: VTuberؑ • WWDC 2019 ࢀՃ͠·͢ ✈ ࣗݾհ
ΞδΣϯμ ͢͜ͱ • In-App PurchasesͱԿ͔ • ΈͯͶʹ͓͚ΔIn-App Purchasesͷେ·͔ͳ࣮ • In-App
PurchasesͰϋϚͬͨ͜ͱͱͦͷճආࡦ ͞ͳ͍͜ͱ • αʔόʔαΠυͷ࣮ • iOSͷࡉ͔͍࣮
In-App Purchasesͱʁ
In-App Purchases • iOSʹ͓͚ΔΞϓϦ՝ۚͷ໊শ • ΞϓϦͷػೳΛఏڙ͢Δࡍʹ༻ ͢Δඞཁ͕͋Δ • ࠷ۙApple͕αϒεΫϦϓγϣϯΛ ਪͯ͠Δײ͕͋͡Δ
ΞϓϦ՝͕ۚ ө͞ΕΔ·ͰͷྲྀΕ
1. AppStoreͷtransactionΛࢹ
2. ՝ۚΞΠςϜΛදࣔ
3. AppStoreͰߪೖॲཧ
4. ϨγʔτͷόϦσʔγϣϯ
ࣗಈߋ৽αϒεΫϦϓγϣϯ ͷ߹͞Βʹ…
ঢ়ଶߋ৽௨ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕ΓସΘͬͨ͜ͱΛ௨ "QQ4UPSF
ঢ়ଶߋ৽௨ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕ΓସΘͬͨ͜ͱΛ௨ αϒεΫϦϓγϣϯΛΩϟϯηϧ "QQ4UPSF
ঢ়ଶߋ৽௨ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕ΓସΘͬͨ͜ͱΛ௨ αϒεΫϦϓγϣϯΛΩϟϯηϧ 5ZQF$"/$&- "QQ4UPSF
ঢ়ଶߋ৽௨ • ࣗಈߋ৽αϒεΫϦϓγϣϯͷঢ়ଶ͕ΓସΘͬͨ͜ͱΛ௨ αϒεΫϦϓγϣϯΛΩϟϯηϧ Ϣʔβʔσʔλͷߋ৽ 5ZQF$"/$&- "QQ4UPSF
ຊ
In-App Purchasesͷ࣮Ͱ ϋϚͬͨ5ͭͷপ
1. SandboxͰ͔͠ ߪೖͷಈ࡞֬ೝ͕Ͱ͖ͳ͍
ΞϓϦ՝ۚͷςετ • App Store ConnectͰSandboxςελʔ Λ࡞ • SandboxςελʔͰߪೖ͢Δ͜ͱͰ AppleͷςεταʔόʔͰϨγʔτ͕ॲཧ ͞ΕΔ
• SandboxڥͷϨγʔτ͕͍ग़͞ΕΔ
ΞϓϦ՝ۚͷਃ • ΞϓϦͷϨϏϡʔAppleͷ SandboxͰϨγʔτ͕ॲཧ ͞ΕΔ • ຊ൪Ͱॲཧ͞ΕΔͷΞϓϦ ΛϦϦʔε͔ͯ͠Β͚ͩ…
αʔόʔଆͰͷຊ൪Ϩγʔτ ॲཧͷಈ࡞֬ೝ͕Ͱ͖ͳ͍
ϓϩϞίʔυ
ϓϩϞʔγϣϯίʔυͱ • ਃͷ௨ͬͨΞϓϦͳͲΛެ։લͰ͢ Δ͜ͱ͕Ͱ͖Δ • ެࣜυΩϡϝϯτతʹʮજࡏސ٬Ϩ Ϗϡʔهࣄͷ࡞ऀͷͳͲϓϩϞʔ γϣϯͷͨΊͷ༻ʯ͕ఆ͞Ε͍ͯΔ
ϓϩϞʔγϣϯίʔυͷ͓͔͛Ͱ ແࣄʹϦϦʔεલʹຊ൪Ͱͷ ಈ࡞֬ೝ͕Ͱ͖ͨ
2. Ϩγʔτ͕ ͷ͘͘͢͝ͳΔ
SandboxςελʔͰಈ࡞֬ೝ͍ͯͨ͋͠Δ • Կ՝ࣦۚͯ͠ഊ͢Δ • αʔόʔʹೖͬͯϩάΛݟΔͱݪҼ͕Θ͔ͬͨ…
SandboxςελʔͰಈ࡞֬ೝ͍ͯͨ͋͠Δ • Կ՝ࣦۚͯ͠ഊ͢Δ • αʔόʔʹೖͬͯϩάΛݟΔͱݪҼ͕Θ͔ͬͨ…
ফܕϓϩμΫτҎ֎ͷ ϓϩμΫτߪೖใϨγʔτʹΓଓ͚Δ • ͭ ެࣜυΩϡϝϯτ w ফܕϓϩμΫτͷใɺࢧ͍͕ߦΘΕΔͱγʔτʹՃ͞Εɺ τϥϯβΫγϣϯΛऴྃ͢Δ·ͰϨγʔτ্ʹΓ·͢ɻτϥϯβΫ γϣϯͷऴྃޙɺ͜ͷใϨγʔτ͕࣍ʹߋ৽͞ΕΔͱ͖ɺͨͱ͑ Ϣʔβʔ͕࣍ʹߪೖΛߦͬͨͱ͖ʹআ͞Ε·͢ɻ
͜ΕҎ֎ͷछྨͷϓϩμΫτߪೖͷใɺࢧ͍͕ߦΘΕΔͱϨ γʔτʹՃ͞ΕɺϨγʔτʹΓଓ͚·͢ɻ • DBʹอଘ͢Δͱ͖ʹҰඞཁͦ͏
FYDMVEFPME USBOTBDUJPOT
Key: exclude-old-transactions • ϨγʔτͷόϦσʔγϣϯΛߦ͏ࡍʹ `exclude-old-transactions` Λࢦఆ͢Δ͜ͱͰ αϒεΫϦϓγϣϯͷ࠷৽ͷtransactionͷΈΛऔಘͰ͖Δʂʂʂ
3. υΩϡϝϯτʹͳ͍ Τϥʔίʔυ͕ฦͬͯ͘Δ
ΤϥʔϋϯυϦϯά • ΞϓϦͷ՝ۚʹࣦഊͨ͠߹ʹదͳΤϥʔϝοηʔδΛ Ϣʔβʔʹݟͤͯ͋͛Δඞཁ͕͋Δ • StoreKitͰͷΤϥʔίʔυ `SKErrorDomain` ͱͳΔ
ߪೖ్தͰͷΩϟϯηϧΤϥʔѻ͍ • ߪೖ్தग़ͯ͘ΔΞϥʔτͷΩϟϯηϧΛબ͢ΔͱɺͦΕΤ ϥʔͱͯ͠ྲྀΕͯ͘Δ • Τϥʔίʔυ `SKErrorDomain.paymentCancelled` ͱͳΔ • Ωϟϯηϧͷ߹͚ͩ
guard ͯ͋͛͠Δඞཁ͕͋Δ guard error.code != SKError.paymentCancelled.rawValue else { return }
෮ݩ్தͰͷΩϟϯηϧ…? • In-App PurchasesͰߪೖͨ͠ϓϩμΫτΛ෮ݩ͢ΔखஈΛఏڙ ͢Δඞཁ͕͋Δ (rejectҊ݅) • ͦͷࡍʹߦ͏ɺAppϨγʔτͷߋ৽ॲཧͷ్தग़ͯ͘ΔΞϥʔτ ͷΩϟϯηϧΛબ͢ΔͱɺͦΕΤϥʔͱͯ͠ྲྀΕͯ͘Δ •
Τϥʔίʔυ `SSErrorDomain` …
෮ݩ్தͰͷΩϟϯηϧ…? • In-App PurchasesͰߪೖͨ͠ϓϩμΫτΛ෮ݩ͢ΔखஈΛఏڙ ͢Δඞཁ͕͋Δ (rejectҊ݅) • ͦͷࡍʹߦ͏ɺAppϨγʔτͷߋ৽ॲཧͷ్தग़ͯ͘ΔΞϥʔτ ͷΩϟϯηϧΛબ͢Δͱ… •
Τϥʔίʔυ `SSErrorDomain` …
υΩϡϝϯτʹࡌͬͯΔ Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ Τϥʔίʔυ SSErrorDomain
υΩϡϝϯτʹࡌͬͯΔ Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ Τϥʔίʔυ SSErrorDomain
υΩϡϝϯτʹࡌͬͯΔ Τϥʔίʔυ SKErrorDomain ෮ݩΩϟϯηϧ࣌ʹฦ͖ͬͯͨ Τϥʔίʔυ SSErrorDomain ͳΜ͔ͪΐͬͱҧ͏
SSErrorDomain • StoreKit෦Ͱൃੜ͢ΔΤϥʔͷίʔυ͕࿙ΕͨΑ͏ • Open Radar: https://openradar.appspot.com/25502597 • υΩϡϝϯτԽ͞Ε͍ͯͳ͍ͷͰϋϯυϦϯάͷ͠Α͏͕ͳ͍ •
ݱঢ়ΈͯͶͰͪ͜ΒͷΤϥʔίʔυguardจͰ return ͯ͠ ରॲ͍ͯ͠Δ
4. υΩϡϝϯτʹͳ͍ ௨λΠϓ͕ฦͬͯ͘Δ
͋ΔͷSlack • ϨγʔτॲཧपΓͷΤϥʔ͕ྲྀΕͯ͘ΔSlackͷνϟϯωϧʹͯ ෆԺͳϝοηʔδ͕දࣔ͞ΕΔ
͋ΔͷSlack • ϨγʔτॲཧपΓͷΤϥʔ͕ྲྀΕͯ͘ΔSlackͷνϟϯωϧʹͯ ෆԺͳϝοηʔδ͕දࣔ͞ΕΔ
͋ΔͷSlack
Ṗͷঢ়ଶߋ৽௨λΠϓ DID_CHANGE_RENEWAL_STATUS
࣍ͷͷSlack
Subscription Offers • iOS 12.2͔Βར༻ՄೳʹͳΔɺαϒεΫϦϓγϣϯΛղͨ͠Ϣʔβʔʹର͠ ͯఏڙͰ͖ΔDiscountͷ৽͍͠ϓϩϞʔγϣϯϓϥϯ • `DID_CHANGE_RENEWAL_STATUS` ͦΕʹਵͯ͠ఏڙ͞Εͨ৽͍͠௨ λΠϓ
• ΈͯͶهࣄެ։લʹ͜ͷ௨λΠϓͷଘࡏʹ͍ͭͯͬͨগͳ͍νʔϜ ࠓޙෆ༻ҙʹ৽͍͠௨λΠϓΛ͞ΕΔՄೳੑ͕͋ΔͷͰɺ ߟྀͯ͠αʔόʔαΠυ࣮͠Α͏
5. ਃͨ͠ߪೖΞΠςϜ औΓԼ͛Δ͜ͱ͕Ͱ͖ͳ͍
rejectͷόοϑΝͱͯ͠Ծਃ • Կճ͔reject͞ΕΔ͜ͱΛݟӽͯ͠ΈͯͶiOSΞϓϦΛ2݄Լ० ʹԾਃ͍ͯͨ͠ • ҊͷఆԿ͔ϦδΣΫτΛ͘Βͬͨ ❌ ͕ɺແࣄʹ৹͕ࠪ௨Δʂʂʂ
ޙ… • ϓϨϛΞϜެ։લʹόάϑΟοΫεͷࠩΛผϦϦʔεͱͯ͠ग़͢ ͜ͱʹ • ;ͱAppStoreΛͷ͍͍ͧͯΔͱ…
None
None
None
ϓϨϛΞϜ͕ϦϦʔε͞Ε͍ͯΔ
ΞϓϦ՝ۚͷਃ • ΞϓϦ՝ۚͷ࠷ॳͷਃରԠ͢Δipa(όΠφϦ)ʹඥ͚ͮͯਃ ͢Δඞཁ͕͋Δ • ࣍ճҎ߱ͷΞϓϦ՝ۚͷਃͦΕࣗͷΈͰՄೳ
Կ͕μϝͩͬͨʁ • ΞϓϦ՝ۚͷਃ࣌ʹAppStoreConnect্Ͱʮ৴Մೳʯͷ νΣοΫϘοΫεΛ unchecked ʹ͢Δ͖ͩͬͨʁ
ޙ͔Β֎ͤͳ͍ͷʁ • `disabled` ʹͳ͍ͬͯͯ֎ͤͳ͔ͬͨ • ެࣜυΩϡϝϯτతʹݖݶ͕͋Εૢ࡞Ͱ͖Δͣͳͷʹ • https://help.apple.com/app-store-connect/#/ dev360aba524 •
AppleʹԿ͍߹Θ͕ͤͨͪ͜Βͷ༧ظ͢ΔճಘΒΕͳ ͔ͬͨ…
Έͳ͞ΜؾΛ͚͍ͭͯͩ͘͞
WWDCͰ৭ʑฉ͍͖ͯ·͢ ✈
Thank you!!!