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
Androidアプリ内課金のテスト
Search
takuaraki
March 01, 2019
Technology
490
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Androidアプリ内課金のテスト
takuaraki
March 01, 2019
More Decks by takuaraki
See All by takuaraki
2021/02/03 発覚の COCOA Android版 不具合について
takuaraki
0
65
GASでSlackBot
takuaraki
1
570
Material Design Guideline: Dialogs, Dividers
takuaraki
0
450
Material Design Guideline: Bottom components
takuaraki
0
530
App Shortcuts
takuaraki
0
400
[関モバ#18] SQLBrite&SQLDelight
takuaraki
0
500
A/B testing GTM&GA vs Firebase
takuaraki
1
3k
【関モバ#12】Google Tag ManagerでモバイルアプリのABテストをする
takuaraki
1
680
Other Decks in Technology
See All in Technology
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
230
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
190
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.2k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.6k
インシデントレスポンス演習 I / Incident Response Exercise I
ks91
PRO
0
100
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
9
1.4k
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
260
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
140
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
130
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
260
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.2k
Building Adaptive Systems
keathley
44
3.1k
Prompt Engineering for Job Search
mfonobong
0
350
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
Everyday Curiosity
cassininazir
0
230
My Coaching Mixtape
mlcsv
0
150
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
340
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
Paper Plane
katiecoart
PRO
1
51k
Transcript
ΞϓϦ՝ۚͷςετ 2019/03/01 @ara_tack
ʢߥʣ !BSB@UBDL '63:6$PSQPSBUJPO
͜ͷൃදʹ͍ͭͯ • Androidͷ՝ۚͷجૅ • ՝ۚͷಓͷΓ • ্ख͘՝͕ۚͰ͖ͳ͍ͱ͖ʁ • Play StoreΛΘͣʹಈ࡞֬ೝ
(billingx) • ৄࡉͳ՝ۚͷ࣮ʹ͍ͭͯ͞ͳ͍
AndroidΞϓϦ՝ۚ Google Play ΞϓϦͱΓऔΓ͍ͯ͠Δ (PPHMF1MBZ "QQ .Z"QQ 8SBQQFS 1MBZ#JMMJOH-JCSBSZ *O"QQ#JMMJOH"1*
ߪೖͰ͖Δͷछྨ • One-time products: 1ճ͚ͩߪೖͰ͖Δ • Subscriptions: ఆظߪೖ
One-time products • 1ճ͚ͩߪೖͰ͖Δ • ΞΠςϜػೳΛߪೖ͢Δͷʹ͍͍ͯΔ
Subscriptions • ఆظߪೖΞΠςϜ • Ұఆظؒ͝ͱʹࢧ͍͕ൃੜ͢Δ • ձһαʔϏεͳͲʹΘΕΔ
՝ۚͷಓͷΓ • Developerొ • ΞϓϦΛPlay ConsoleʹΞοϓϩʔυ͢Δ • Play ConsoleͰΞΠςϜͷొΛ͢Δ
Developerొ • GoogleΞΧϯτΛ༻ҙ͢Δ • $25͏ • Google Play Console͕͑ΔΑ͏ʹͳΔ
ΞϓϦΛPlay Consoleʹ্͛Δ • ϦϦʔεϏϧυͷΞϓϦ͕ඞཁ • ূ໌ॻϦϦʔε࣌ͷͷΛར༻ • Billingͷύʔϛογϣϯ͕ඞཁ • ެ։͕ඞཁʢΫϩʔζ൛ͰΑ͍ʣ
ΞϓϦΛPlay Consoleʹ্͛Δ ςετ༻ͷΞϓϦʹ͍ͭͯ • ΞϓϦέʔγϣϯIDূ໌ॻΛϦϦʔε༻ͱ ߹ΘͤΔ • ςετ༻ͷผΞϓϦͱͯ͠Play Consoleʹ͋ ͛ΔͷOK
ΞϓϦΛPlay Consoleʹ্͛Δ // flavorDimensionsলུ productFlavors { product { applicationId =
APPLICATION_ID_PRODUCT } billingTest { applicationId = APPLICATION_ID_PRODUCT } develop { applicationId = APPLICATION_ID_STAGING } } sourceSets { // resΛςετܥͷͷʹ͢Δ!ςετܥͷAPIΛ͑ΔΑ͏ʹ͢Δ billingTest.res.srcDirs = ["src/develop/res"] }
ͷొΛ͢Δ
ͷొΛ͢Δ • ID: มߋෆՄ • λΠτϧͱઆ໌จɿมߋՄೳ • Ձ֨ɿมߋՄೳ • ٻରظؒɿSubscriptionsͷΈɻมߋෆՄɻि
ؒɺ݄ผɺ3͔݄ɺ6͔݄ɺؒ • εςʔλεɿ༗ޮʹ͢ΔͱআͰ͖ͳ͘ͳΔ
None
ςετΞΧϯτ • Google Play ConsoleͰςετΞΧϯτ͕ొ Ͱ͖Δ • ςετΞΧϯτͰແྉͰ՝ۚͰ͖Δ • ࣮ࡍͷPlay
StoreͰͷߪೖͱѻ͍Ұॹɻߪೖ ใಉ͡ɻஈͱߪಡظ͚͕ؒͩҟͳΔɻ
ςετΞΧϯτ Subscriptions ͷߪಡظؒ https://developer.android.com/google/play/billing/billing_testing ΑΓҾ༻
ςετΞΧϯτ
্ख͘՝͕ۚͰ͖ͳ͍ͱ͖ʁ • ΞϓϦʹBillingͷύʔϛογϣϯ͕ͳ͍ • Play Consoleʹ্͕͍ͬͯͳ͍ • ΞϓϦͷূ໌ॻ͕Play Consoleʹ্͍͛ͯΔͷͱ ҟͳΔ
• ͕༗ޮʹͳ͍ͬͯͳ͍ • σϕϩούʔΞΧϯτͳͷͰ՝ۚͰ͖ͳ͍
Play StoreΛΘͣʹςετ Play StoreͷϞοΫϨεϙϯεΛఏڙ͢Δ ϥΠϒϥϦ • pixiteapps/billingx • NYTimes/Register
billingx • Play Billing LibraryΛϞοΫԽͰ͖Δ • DebugBillingClientΛBillingClientͱͯ͠͏
billingx ༻ྫʣBillingClientFactoryΛ࡞ͬͯDI͢Δ // BillingClient ͷϑΝΫτϦΛఆٛ interface BillingClientFactory { fun createBillingClient(activity:
Activity, updateListener: PurchasesUpdatedListener): BillingClient }
billingx ༻ྫʣBillingClientFactoryΛ࡞ͬͯDI͢Δ // ຊ൪༻ Play Billing Library ͷ BillingClient Λฦ͢
class ReleaseBillingClientFactory : BillingClientFactory { override fun createBillingClient(activity: Activity, updateListener: PurchasesUpdatedListener): BillingClient { return BillingClient .newBuilder(activity) .setListener(updateListener) .build() } }
billingx ༻ྫʣBillingClientFactoryΛ࡞ͬͯDI͢Δ // σόοά༻ DebugBillingClient Λฦ͢ class DebugBillingClientFactory : BillingClientFactory
{ override fun createBillingClient(activity: Activity, updateListener: PurchasesUpdatedListener): BillingClient { initializeData(activity) return DebugBillingClient(activity, updateListener) } } private fun initializeData(activity: Activity) { // ϞοΫσʔλΛ४උʢ࣍εϥΠυࢀরʣ }
billingx ༻ྫʣBillingClientFactoryΛ࡞ͬͯDI͢Δ private fun initializeData(activity: Activity) { BillingStore.defaultStore(activity) .clearProducts() .addProduct(
SkuDetailsBuilder( sku = BillingManager.SKU_SUBS, type = BillingClient.SkuType.SUBS, price = "$9.99", priceAmountMicros = 9990000, priceCurrencyCode = "USD", title = "Premium Access", description = "Get all the super cool features.", subscriptionPeriod = "p1m", freeTrialPeriod = "p1w" ).build() ) }
billingx ༻ྫʣBillingClientFactoryΛ࡞ͬͯDI͢Δ @Module class BillingClientFactoryModule { @Provides fun provideBillingClientFactory(): BillingClientFactory
{ return if (BuildConfig.DEBUG) { DebugBillingClientFactory() } else { ReleaseBillingClientFactory() } } }
·ͱΊ • ՝ۚͷͨΊʹPlay Consoleͷઃఆ͕ඞཁ • ՝ۚςετ࣌ʹϋϚΓϙΠϯτ͕ଟ͍ • Play Storeແ͠Ͱಈ࡞֬ೝ͢Δํ๏͋Δ