コンテンツへスキップ

iOSサンドボックステストの設定

iOSでアプリ内課金をテストするには、App Store Connectとテストデバイスでの適切な設定が必要です。このガイドでは、サンドボックステストを開始するために必要なすべてをカバーしています。

  • Apple Developer Program: 年次更新付きのアクティブなメンバーシップ
  • 契約: 銀行および税情報が完了した「有料アプリケーション契約」に署名済み
  • Xcodeプロジェクト: 適切なバンドル識別子と機能で設定済み
  1. 有料アプリケーション契約に署名

    App Store Connectで、契約、税金、銀行に移動し、以下を完了します:

    • 有料アプリケーション契約に署名
    • 銀行情報を追加
    • 税務フォームを完成

    Appleによる情報の承認を待ちます(24〜48時間かかることがあります)。

  2. サンドボックステストユーザーを作成

    App Store Connectで、ユーザーとアクセス > サンドボックステスターに移動します。

    **+**ボタンをクリックして新しいサンドボックステスターを作成します。

    重要: Apple IDに関連付けられていないメールアドレスを使用してください。メールエイリアスを使用できます:

    • Gmail: youremail+test@gmail.com
    • iCloud: youremail+test@icloud.com

    Create sandbox tester

  3. テストデバイスを設定(iOS 12以降)

    iOS 12以降では、購入をテストするためにiTunesアカウントからサインアウトする必要がなくなりました。

    iOSデバイスで:

    1. 設定を開く
    2. App Storeをタップ
    3. 下部までスクロール
    4. サンドボックスアカウントをタップ
    5. サンドボックステストアカウントでサインイン
  4. Xcodeプロジェクトを設定

    Xcodeプロジェクトに以下があることを確認します:

    バンドル識別子

    • Developer Centerの識別子と一致する必要があります
    • App Store Connectの識別子と一致する必要があります

    アプリ内課金機能

    1. Xcodeでプロジェクトを選択
    2. 署名と機能に移動
    3. + 機能をクリック
    4. アプリ内課金を追加
  5. アプリ内課金製品を作成

    App Store Connectでアプリに移動し、アプリ内課金製品(サブスクリプション、消費型など)を作成します。

    サンドボックステストには、製品が少なくとも「提出準備完了」ステータスである必要があります。

  6. 実装をテスト

    テストデバイスでアプリをビルドして実行します。購入を試みると、次のように表示されます:

    [環境:サンドボックス]

    この確認は、サンドボックス環境にいることを示し、実際のお金が請求されないことを意味します。

  • 実際の請求なし: サンドボックスモードではすべての購入が無料です
  • 短縮されたサブスクリプション: テストを高速化するためにサブスクリプション期間が短縮されます
    • 1週間のサブスクリプション = 3分
    • 1ヶ月のサブスクリプション = 5分
    • 2ヶ月のサブスクリプション = 10分
    • 3ヶ月のサブスクリプション = 15分
    • 6ヶ月のサブスクリプション = 30分
    • 1年のサブスクリプション = 1時間
  • 自動更新制限: サンドボックスでサブスクリプションは最大6回自動更新されます
  • 即時キャンセル: キャンセルされたサブスクリプションは即座に期限切れになります

サンドボックスアカウント管理

Section titled “サンドボックスアカウント管理”
  • 異なるシナリオ用に複数のテストアカウントを作成
  • テストデバイスでのみテストアカウントを使用
  • サンドボックステストには個人のApple IDを使用しない
  • テストアカウントは地域に関係なく任意の製品を購入できます
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
const { isBillingSupported } = await NativePurchases.isBillingSupported();
if (!isBillingSupported) {
throw new Error('StoreKit not supported on this device');
}
// Fetch products (automatically uses sandbox when available)
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Make test purchase
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'premium_monthly',
productType: PURCHASE_TYPE.SUBS,
});
console.log('Test purchase successful!', transaction.transactionId);

適切に設定されている場合、以下が観察されるはずです:

  1. 購入中のサンドボックスバナー: “[環境:サンドボックス]”
  2. 製品が正常にロードされる
  3. 購入が実際の請求なしで完了する
  4. レシートが正しく検証される
  5. サブスクリプションが自動更新される(短縮されたレートで)

製品がロードされない:

  • バンドル識別子がApp Store Connectと一致するか確認
  • 契約が署名され承認されているか確認
  • 製品が少なくとも「提出準備完了」ステータスであることを確認
  • 製品作成後2〜3時間待つ

“iTunes Storeに接続できません”:

  • サンドボックスアカウントが正しく設定されているか確認
  • デバイスがインターネットに接続されているか確認
  • サンドボックスアカウントからサインアウトして再度サインインを試す
  • アプリを再起動

購入が静かに失敗:

  • Xcodeコンソールのエラーメッセージを確認
  • アプリ内課金機能が有効になっているか確認
  • サンドボックスアカウントのメールが実際のApple IDでないことを確認
  • 新しいサンドボックステストアカウントの作成を試す

レシート検証エラー:

  • テストではサンドボックスレシート検証エンドポイントを使用
  • 本番エンドポイント:https://buy.itunes.apple.com/verifyReceipt
  • サンドボックスエンドポイント:https://sandbox.itunes.apple.com/verifyReceipt
  • native-purchasesプラグインはこれを自動的に処理します

誤ったサブスクリプション期間:

  • サンドボックスではサブスクリプションが短縮されることを覚えておく
  • 予想期間については上記の変換表を使用
  • サンドボックスではサブスクリプションは最大6回自動更新

“このApple IDはまだiTunes Storeで使用されていません”:

  • これは新しいサンドボックスアカウントでは正常です
  • アカウントをアクティブにするために購入を続行
  • 初回使用時のみ発生
  1. 異なるテストシナリオ用に複数のテストアカウントを作成
  2. 動作を検証するためにすべてのサブスクリプション期間をテスト
  3. キャンセルと更新フローをテスト
  4. レシート検証が正しく機能するか検証
  5. 購入の復元機能をテスト
  6. サブスクリプションのアップグレード/ダウングレード動作をテスト
  7. 不良なネットワーク条件でテスト
機能サンドボックス本番
実際の請求なしあり
サブスクリプション期間短縮通常
自動更新制限6回無制限
キャンセル効果即時期間終了時
レシートエンドポイントサンドボックスURL本番URL
テストアカウントのみはいいいえ

詳細については、サンドボックステストに関する公式AppleのStoreKitドキュメントを参照してください。