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.7k
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 App Development
rockname
0
33
ゼロから理解するDependency Injection / Understanding Dependency Injection from the Ground Up
rockname
2
3.7k
サブスクリプション機能制御の設計における勘所
rockname
0
980
Anatomy of Dynamic color
rockname
1
1.1k
キャッシュによる状態管理のアーキテクチャ / Cache-based state management architecture
rockname
10
19k
Optimistic Updatesで UXを向上させる / Improve UX with Optimistic Updates
rockname
3
1.3k
モバイルアプリのリストUIにおける 理想的なState表示について / The ideal state display in a mobile app list UI
rockname
7
1.9k
オンデバイスで学習可能になったCreate MLで画像分類器を作ってみた💪 / Developing an app to train an image classifier on iOS Device using Create ML
rockname
4
480
The practice of inclusive design -WWDC21-
rockname
1
1.2k
Other Decks in Programming
See All in Programming
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
990
JAWS Days 2025のインフラ
komakichi
1
120
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
760
Honoとフロントエンドの 型安全性について
yodaka
7
1.5k
CloudNativePGを布教したい
nnaka2992
0
120
ML.NETで始める機械学習
ymd65536
0
240
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
120
Drawing Heighway’s Dragon- Recursive Function Rewrite- From Imperative Style in Pascal 64 To Functional Style in Scala 3
philipschwarz
PRO
0
100
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
240
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Code Reviewing Like a Champion
maltzj
521
39k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Agile that works and the tools we love
rasmusluckow
328
21k
Scaling GitHub
holman
459
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
650
How STYLIGHT went responsive
nonsquared
99
5.4k
Thoughts on Productivity
jonyablonski
69
4.5k
A better future with KSS
kneath
238
17k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
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!!!