概要
AndroidアプリのIAP(In-App Purchase)・サブスクリプション機能をテストするための手順と環境をまとめたドキュメントです。
テスト環境の全体像
| 環境 | インストール元 | 課金環境 | Googleサーバー接続 | 実機必要 |
| Android Studioエミュレータ | Android Studio | ローカル完結 | 不要 | 不要 |
| ライセンステスター(実機) | Google Play(内部テスト) | Sandbox(無課金) | 必要 | 必要 |
| 内部テストトラック | Google Play(内部テスト) | Sandbox(無課金) | 必要 | 必要 |
| 本番 | Google Play Store | 本番(実費) | 必要 | 必要 |
テスト進行のフロー
stateDiagram-v2
direction TB
state "Android Studio エミュレータ" as Local {
direction LR
Rapid: ローカル完結 (static responses)
Fast: 最速・ロジック検証
}
state "ライセンステスター + 内部テスト" as Internal {
direction LR
Console: Play Consoleに商品登録
Server: Googleサーバー接続
Free: 実際の決済なしでテスト可
}
state "クローズド / オープンテスト" as Closed {
direction LR
Final: リリース直前の最終確認
Group: 特定/不特定多数のユーザー
}
state "本番リリース (製品版)" as Prod {
direction LR
Live: 全ユーザー公開
Real: 実際の課金発生
}
[*] --> Local : 開発初期・UI/UX確認
Local --> Internal : aabをアップロード / テスター登録
Internal --> Closed : テスト範囲の拡大
Closed --> Prod : 製品版へ昇格
Prod --> [*]
iOSとの主な違い
| 項目 | iOS | Android |
| サンドボックスの分離 | 設定の専用欄で完全分離 | アカウント切り替えが必要でやや複雑 |
| ローカルテスト | StoreKit Testing(シミュレータOK) | エミュレータ+Play Billing Library |
| テスト用アカウント | Sandboxテスターアカウント | ライセンステスター登録 |
| 確実性 | 普段使い端末でも安全 | 専用端末 or エミュレータ推奨 |
⚠️ AndroidはiOSほどアカウントの分離構造がきれいではないため、専用端末またはAndroid Studioエミュレータの使用が安全。
1. Android Studioエミュレータによるテスト
概要
Android Studio上のエミュレータでGoogleサーバーに接続せずIAPをテストできる仕組み。実装の初期段階に最適。
メリット
- Google Play Consoleへの商品登録が不要 → 実装の最初の段階から使える
- 実機不要
- ネット環境不要
- 購入失敗・ネットワークエラーなど再現しにくいシナリオを強制的に起こせる
セットアップ手順
1. Android Studio → AVD Manager で仮想デバイスを作成(Google Playストア対応イメージを選択)
2. Play Billing Library をアプリに追加
// build.gradle dependencies { implementation ‘com.android.billingclient:billing:7.x.x’ }
// build.gradle
dependencies {
implementation 'com.android.billingclient:billing:7.x.x'
}
3. テスト用のSkuDetailsをローカルで定義して動作確認
テスト用レスポンスの制御
BillingClientのテストでは以下のレスポンスコードを任意に返せる:
| レスポンスコード | 内容 |
| BillingResponseCode.OK | 購入成功 |
| BillingResponseCode.USER_CANCELED | ユーザーキャンセ |
| BillingResponseCode.BILLING_UNAVAILABLE | 課金機能利用不可 |
| BillingResponseCode.ITEM_ALREADY_OWNED | 購入済み |
| BillingResponseCode.ITEM_NOT_OWNED | 未購入(復元時) |
2. ライセンステスター+内部テストトラック(実機)
概要
Google Playが提供するSandbox環境を使い、実機でIAPをテストする方法。実際の購入操作を行っても課金は発生しない。
事前準備(1回だけ)
Step 1:アプリをGoogle Play Consoleにアップロード
AndroidはiOSのXcode Runと異なり、ライセンステストを使うために少なくとも一度Google Play Consoleにビルドをアップロードする必要がある。
graph TD
subgraph Local_PC ["Android Studio (ローカル)"]
A[Android Studio] --> B{Build メニュー}
B --> C[Generate Signed Bundle / APK]
C --> D[Android App Bundle 'AAB' を選択]
D --> E[KeyStore / 署名鍵の入力]
E --> F[AABファイルの生成完了]
end
F -- "ブラウザでアップロード" --> G
subgraph Google_Play_Console ["Google Play Console (クラウド)"]
G[内部テスト / Internal Testing] --> H[新しいリリースを作成]
H --> I[AABファイルをアップロード]
I --> J[リリースノートの入力]
J --> K[リリースの確認と保存]
K --> L[内部テストとして公開]
end
style F fill:#f96,stroke:#333,stroke-width:2px
style L fill:#00c853,stroke:#333,stroke-width:2px
Step 2:ライセンステスターを登録
Google Play Console
→ 設定(左メニュー)
→ ライセンステスト
→ テスターのGoogleアカウントを追加
✅ 自分のGoogleアカウントをここに追加すれば、購入操作をしても実費ゼロ。
Step 3:内部テストトラックにテスターを追加
Google Play Console
→ 内部テスト
→ テスター → リストを作成 → メールアドレスを追加
→ テスターへの招待リンクを発行
Step 4:実機でテスト用ビルドをインストール
1. テスター招待リンクをブラウザで開く
2. 「テスターになる」をタップ
3. Google Playからアプリをインストール
テスト手順
1. テスト用ビルドをGoogle Playからインストール
2. アプリ内で「購入」ボタンをタップ
3. Googleの標準購入ダイアログが表示される
4. 「テスト注文」と表示されることを確認 ← Sandbox環境の証拠
5. 購入完了(実費ゼロ)
サブスクリプションの更新間隔(Sandbox)
| 実際の期間 | Sandboxでの短縮期間 |
| 1週間 | 5分 |
| 1ヶ月 | 5分 |
| 3ヶ月 | 10分 |
| 6ヶ月 | 15分 |
| 1年 | 30分 |
アカウントの注意点
| 状況 | 推奨対応 |
| 普段使い端末でテストしたい | ライセンステスターに普段使いのGoogleアカウントを登録 |
| より確実にしたい | 専用のGoogleアカウントを作成して専用端末に設定 |
| 本番購入との混在を避けたい | 専用端末を用意するのが最も安全 |
⚠️ AndroidはPlay Storeのデフォルトアカウントによって挙動が変わることがある。複数アカウントを使う場合はデフォルトアカウントがライセンステスター登録済みのアカウントになっているかを確認。
よくある躓きポイント
| 症状 | 原因 | 対処 |
| 「テスト注文」が表示されず本番になる | ライセンステスター未登録 or デフォルトアカウントが別 | Play ConsoleでGoogleアカウント登録を確認 |
| 購入ダイアログが出ない | 内部テストトラックからインストールしていない | 招待リンク経由でインストールし直す |
| 商品が見つからないエラー | Play Consoleでの商品設定が未完了 | Play Console → 収益化 → 商品を有効化 |
| 購入後に権限が付与されない | レシート検証のバックエンド処理の問題 | Google Play Developer APIのレスポンスを確認 |
—
3. Google Play Consoleのテストトラック
トラックの種類
| トラック | 対象 | 人数上限 | Play審査 | 用途 |
| 内部テスト | 招待制 | 100名 | 不要(数分で反映) | 開発者・QA向け |
| クローズドテスト(アルファ) | 招待制 | 無制限 | 必要 | 限定ベータ |
| オープンテスト(ベータ) | 公開 | 無制限 | 必要 | 広範なベータ |
| 製品版 | 全ユーザー | 無制限 | 必要 | 本番リリース |
自分1人でテストする場合は内部テストトラックのみでOK。
iOSのTestFlightとの対応関係
| iOS | Android | 備考 |
| TestFlight(内部テスター) | 内部テストトラック | 審査不要・即時反映 |
| TestFlight(外部テスター) | クローズドテスト | 初回審査あり |
| App Store本番 | 製品版 | 本番リリース |
環境別まとめ
| フェーズ | 推奨環境 | 理由 |
| IAP実装の初期開発 | Android Studioエミュレータ | Play Console登録前でも開発できる |
| 実機での動作確認 | ライセンステスター+内部テストトラック | 実際の購入フロー確認 |
| リリース直前の最終確認 | 内部テストトラック(クローズドテスト) | 本番に最も近い環境 |
最小構成(個人開発)
- Android Studioエミュレータで実装初期の動作確認
- 自分のGoogleアカウントをライセンステスター登録 → 普段使い端末でもSandboxテスト可能
- ただし確実性を求めるなら旧Androidスマホ1台を専用テスト機として確保するのが理想
iOS試験手順との比較まとめ
| 項目 | iOS | Android |
| ローカルテスト | StoreKit Testing(Xcode) | Play Billing Library(Android Studio) |
| テスト用アカウント設定箇所 | 設定 → App Store → Sandboxアカウント | Play Console → ライセンステスト |
| 普段使い端末での安全性 | ◎(完全分離) | △(デフォルトアカウント依存) |
| 初回アップロードの要否 | 不要(Xcode RunでOK) | 必要(Play Consoleへの登録が前提) |
| ベータ配布ツール | TestFlight | 内部テストトラック |
| サブスク短縮間隔 | 1ヶ月→5分 | 1ヶ月→5分(同じ) |