iOSアプリのサブスク検証にはサンドボックスアカウントを使おう!【完全ガイド】
iOSアプリ開発でサブスクリプション機能を検証する際に必須のサンドボックスアカウント作成方法と使い方を、実際の開発現場で使える形で詳しく解説します。
※当記事にはアフィリエイトリンクが含まれる場合があります。
💭 iOSアプリのサブスクリプションを検証したいけど、自分のApple IDで課金するのは避けたい...
そんな方向けの記事になっています。
▼記事の内容
- サンドボックスアカウントとは何か
- サンドボックスアカウントの作成方法
- 利用規約への同意手順(重要)
- 実際の検証方法と注意点
- よくあるトラブルと解決法
iOSアプリでサブスクリプション機能を実装する際、本番のApple IDで課金テストをすることは絶対に避けるべきです。そのために用意されているのが「サンドボックスアカウント」という検証専用のアカウントです。
実際にアプリを開発して気づいたんですが、この手順を知らないと本番アカウントでうっかり課金してしまうリスクがあります。この記事でサクッと把握しておいてください。
🤔 サンドボックスアカウントとは
サンドボックスアカウントは、App Store Connectで作成できる検証専用のテストアカウントです。
実際の課金は発生せず、アプリ内課金やサブスクリプションの動作を安全にテストできます。
サンドボックスアカウントの特徴
- 課金が発生しない(テスト環境専用なので実際のお金は使わない)
- サブスクリプションの期間が短縮される(例: 1ヶ月 → 5分)
- 何度でも購入・キャンセル・復元のテストができる
- 本番のApp Storeには影響しない
なぜ必要なのか?
iOSアプリのサブスクリプション機能を実装する際、以下のような検証が必要になります。
- サブスクリプションの購入フロー
- 購読状態の確認
- 自動更新の動作
- サブスクリプションのキャンセル
- 購入の復元機能
これらを自分のメインのApple IDでテストするのは危険です。誤って課金してしまったり、テストデータが本番アカウントに残ってしまう可能性があります。
📋 サンドボックスアカウントの作成方法
STEP1: App Store Connectにアクセス
- App Store Connectにアクセス
- デベロッパーアカウントでログイン
STEP2: サンドボックステスターの作成
Webブラウザから作成
- App Store Connectのトップページで「ユーザーとアクセス」をクリック
- 上部タブから「Sandbox」を選択
- 「+」ボタンまたは「テスターを追加」をクリック
- 以下の情報を入力します
入力項目は以下の通りです:
- メールアドレス(実在しなくてOK。例:
test-sandbox@example.com) - パスワード(8文字以上、英数字と記号を含む)
- 名・姓(テスト用の適当な名前でOK)
- 国または地域(日本、またはテストしたい地域)
- 「保存」をクリック
STEP3: 作成完了の確認
サンドボックステスターの一覧に、作成したアカウントが表示されていればOKです。
メールアドレスは実在しなくて大丈夫ですが、後で使うので覚えやすいものにしておくのがおすすめです。パスワードも必ずメモしておいてください。
✅ 利用規約への同意(超重要!)
サンドボックスアカウントを作成しただけでは使えません。利用規約への同意が必要です。
この手順を忘れると、アプリ内課金のテスト時に「このApple IDはまだApp Storeで使用されたことがありません」というエラーが出ます。
STEP1: Apple IDサイトでログイン
- ブラウザで https://account.apple.com/ にアクセス
- 作成したサンドボックスアカウントのメールアドレスとパスワードでログイン
- 利用規約が表示されるので、すべて同意してください
必ずサンドボックスアカウントでログインしてください。メインのApple IDでログインしないように注意。
STEP2: iCloud.comでも同意
続いて、iCloud.comでも利用規約に同意します。
- ブラウザで https://www.icloud.com/ にアクセス
- サンドボックスアカウントでログイン
- ここでも利用規約が表示されるので、同意してください
これで、サンドボックスアカウントの準備が完了しました。
なぜ2箇所で同意が必要なのか?
Apple IDとiCloudは密接に連携しており、それぞれで利用規約への同意が必要になります。両方で同意しないと、アプリ内課金のテスト時にエラーが発生する可能性があります。
🧪 実際の検証方法
サンドボックスアカウントの準備ができたら、実際にアプリで検証してみましょう。
事前準備: デバイスからサインアウト
重要: テストを開始する前に、iOSデバイスのApp Storeから一度サインアウトしてください。
- iOSデバイスの「設定」アプリを開く
- 一番上の自分の名前をタップ
- 「メディアと購入」をタップ
- 「サインアウト」をタップ
注意: ここではApp Storeからのみサインアウトします。iCloudからサインアウトする必要はありません。
テスト手順
STEP1: アプリをビルドして実機にインストール
開発中のアプリを実機にインストールします。
Xcode 12以降はStoreKit設定ファイル(.storekit)でシミュレータでも基本テストができますが、最終確認は実機でやるのが無難です。ビルド方法はフレームワーク(ネイティブiOS、React Native、Flutterなど)によって変わります。
STEP2: サンドボックスアカウントでサインイン
アプリを起動し、サブスクリプション購入画面に移動します。プランを選択して「購入」をタップすると、Apple IDのサインイン画面が表示されます。
ここで作成したサンドボックスアカウントのメールアドレスとパスワードを入力してください。メインのApple IDでサインインしないこと、また「設定」アプリから事前にサインインするのではなく、購入時にその場でサインインするのがポイントです。
STEP3: 購入フローの確認
サインインすると、購入確認ダイアログが表示されます。
- 「環境: Sandbox」という表示があることを確認
- 「購入」をタップ
- 実際の課金は発生しません
STEP4: 購入完了を確認
アプリ側で購入完了の処理が実行されることを確認します。
- 購読状態が「有効」になっているか
- プレミアム機能が使えるようになっているか
- レシート検証が正しく動作しているか
⏱️ サンドボックス環境の期間短縮
サンドボックス環境では、サブスクリプションの期間が大幅に短縮されます。
| 本番環境 | サンドボックス環境 |
|---|---|
| 1週間 | 3分 |
| 1ヶ月 | 5分 |
| 2ヶ月 | 10分 |
| 3ヶ月 | 15分 |
| 6ヶ月 | 30分 |
| 1年 | 1時間 |
5分待つだけで自動更新・期限切れ・再購読の動作を一通り確認できます。
なお、サンドボックスでは最大6回まで自動更新され、それ以降は自動的にキャンセルされます。
⚠️ よくあるトラブルと解決法
エラー1: 「このApple IDはまだApp Storeで使用されたことがありません」
利用規約に同意していないのが原因です。
- https://account.apple.com/ でサンドボックスアカウントでログイン
- https://www.icloud.com/ でもログインして利用規約に同意
- デバイスを再起動して再テスト
エラー2: 購入ができない・エラーが出る
メインのApple IDでサインインしている場合は「設定」→「App Store」からサインアウトして、購入時のダイアログでサンドボックスアカウントを入力してください。
サブスクリプション商品IDの設定ミスの可能性もあります:
- App Store Connectでサブスクリプション商品を確認
- XcodeのプロダクトIDと一致しているか確認
- 商品のステータスが「Ready to Submit」または「承認済み」になっているか確認
エラー3: 「Cannot connect to iTunes Store」
ネットワークか接続の問題です。
- Wi-Fi接続を確認(モバイルデータではなくWi-Fi推奨)
- デバイスを再起動
- Appleのシステム状況ページで障害がないか確認
エラー4: レシート検証が失敗する
サンドボックス環境用の検証URLを使っていないのが原因です。
解決法
レシート検証では、環境に応じて異なるURLを使用する必要があります。
// 本番環境
let productionURL = "https://buy.itunes.apple.com/verifyReceipt"
// サンドボックス環境
let sandboxURL = "https://sandbox.itunes.apple.com/verifyReceipt"
推奨実装: まず本番URLで検証を試み、ステータスコード21007が返ってきたらサンドボックスURLで再試行する方法(StoreKit 1)
func verifyReceipt(receiptData: Data) {
// まず本番環境で検証
verifyWithURL(productionURL, receiptData: receiptData) { result in
if result.status == 21007 {
// サンドボックス環境のレシートの場合
verifyWithURL(sandboxURL, receiptData: receiptData) { sandboxResult in
// サンドボックス環境での検証結果を処理
}
}
}
}
StoreKit 2について
上記のコード例は従来のStoreKit 1に基づくものです。Appleは現在、よりモダンで安全なStoreKit 2の使用を推奨しています。
StoreKit 2は async/await ベースでAPIがシンプルになり、JWS形式のトランザクション情報でサーバー実装も楽になります。新規プロジェクトであればStoreKit 2を使うのが無難です。詳細はApple公式ドキュメントをご確認ください。
🔄 サンドボックスアカウントの管理
複数アカウントの作成
異なる地域や条件でテストしたい場合、複数のサンドボックスアカウントを作成できます。
用途例
- 日本のユーザー用テストアカウント
- 米国のユーザー用テストアカウント
- 異なる価格帯をテストするアカウント
アカウントの削除
不要になったサンドボックスアカウントは削除できます。
- App Store Connect → ユーザーとアクセス → Sandbox
- 削除したいアカウントを選択
- 「削除」をクリック
パスワードのリセット
パスワードを忘れた場合は、App Store Connectから再設定できます。
- Sandboxテスター一覧でアカウントを選択
- 「パスワードを編集」
- 新しいパスワードを入力して保存
💡 開発効率を上げるTips
Tip1: 専用のテストアカウント表を作成
複数のサンドボックスアカウントを管理する場合、スプレッドシートなどで管理すると便利です。
| メールアドレス | パスワード | 国/地域 | 用途 |
|---|---|---|---|
| test-jp@example.com | Pass1234! | 日本 | 通常検証 |
| test-us@example.com | Pass1234! | アメリカ | 米国価格検証 |
| test-trial@example.com | Pass1234! | 日本 | トライアル検証 |
Tip2: Xcodeのログで購入フローを確認
Xcodeのコンソールログを確認することで、購入処理の詳細を把握できます。
// StoreKitのトランザクションログを出力
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print("Transaction state: \(transaction.transactionState.rawValue)")
print("Product ID: \(transaction.payment.productIdentifier)")
}
}
Tip3: TestFlightでのテスト
App Store Connectの「Sandbox」タブでサンドボックステスターを作成すると、TestFlightでもそのアカウントを使用できます。
より本番に近い環境でサブスクリプションをテストできます。
🎯 まとめ
ハマりやすいのは利用規約への同意を忘れることです。account.apple.comとicloud.comの両方で同意しないと購入時にエラーになります。ここさえ押さえておけば、あとは手順通りに進めるだけです。
サブスクリプション機能はApp Store審査でも確認される箇所なので、リリース前にサンドボックスでしっかり動作確認しておきましょう。
それでは、今回はこの辺で。
📚 参考リンク
最後まで読んでいただきありがとうございました!てば(@basabasa8770)でした!