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
Unlock the Potential of Swift Code Generation
rockname
0
400
生成AIを活用したレシート読み取り機能のアプリ開発の裏側 / AI Receipt Scan App Development
rockname
0
92
ゼロから理解するDependency Injection / Understanding Dependency Injection from the Ground Up
rockname
2
4k
サブスクリプション機能制御の設計における勘所
rockname
0
1.1k
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
3
1.4k
モバイルアプリのリストUIにおける 理想的なState表示について / The ideal state display in a mobile app list UI
rockname
7
2.1k
オンデバイスで学習可能になったCreate MLで画像分類器を作ってみた💪 / Developing an app to train an image classifier on iOS Device using Create ML
rockname
4
510
Other Decks in Programming
See All in Programming
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
540
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
640
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.5k
より安全で効率的な Go コードへ: Protocol Buffers Opaque API の導入
shwatanap
2
750
為你自己學 Python - 冷知識篇
eddie
1
350
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.5k
スケールする組織の実現に向けた インナーソース育成術 - ISGT2025
teamlab
PRO
2
160
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
2
270
OSS開発者という働き方
andpad
5
1.7k
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
250
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
230
Featured
See All Featured
Code Review Best Practice
trishagee
71
19k
Embracing the Ebb and Flow
colly
87
4.8k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
A designer walks into a library…
pauljervisheath
207
24k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Balancing Empowerment & Direction
lara
3
620
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Docker and Python
trallard
46
3.6k
How GitHub (no longer) Works
holman
315
140k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
GitHub's CSS Performance
jonrohan
1032
460k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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!!!