Test Store はゴールではありません

開発中はすでに RevenueCat の Test Store で購入をテストしているはずです。速く、結果が決定的で、Google Play のセットアップが不要なので、開発段階に適したツールです。しかし Test Store は、RevenueCat が裏側で運用している store です。実際の Google Play 認証情報、実際の公開 API キー、実際の商品と基本プランの構成、端末上の実際の Google Play Billing フローは検証しません。

リリース前には、実際の経路が最初から最後まで動くことを確認する必要があります。サービスアカウントの認証情報が正しく接続されているか、Google Play で作成した商品がユーザーに見える Offering に対応しているか、実機での実際の購入が期待どおりに動くか、という点です。この検証は Google Play のサンドボックスで、Closed testing トラックとライセンステスターのアカウントを使って行います。これは Test Store とは別の作業で、連携が本当にリリース可能かを見極める工程です。

このコードラボでは次のことを行います。

  • Test Store を使う場面と Google Play サンドボックスを使う場面を見分けます。
  • ライセンステスターを追加し、Closed testing トラックを作成します。
  • 実機で、実際の課金なしにサンドボックス購入を行います。
  • RevenueCat でサンドボックスデータとして取引を確認します。
  • 高速化されたサンドボックスのスケジュールでサブスクリプションの更新をテストします。
  • 「Something went wrong」の支払いエラーをはじめ、よくある失敗を解決します。
ツールは二つ、役割も二つ。 Test Store はコードを書いている間に速く反復するためのツール、Google Play サンドボックスはリリース前に実際の store 連携を検証するためのツールです。両方を、この順で使ってください。

Test Store vs Google Play サンドボックス: どちらをいつ

どちらも実際のお金を使わずに購入をテストできますが、答える問いが違います。

項目RevenueCat Test StoreGoogle Play サンドボックス
何をテストするかSDK ロジック、ペイウォール、Entitlement を単独で実際の認証情報、実際の商品、端末上の実際の Billing フロー
必要なセットアップなし、すべてのプロジェクトに内蔵Closed testing トラック、ライセンステスター、アップロード済みの署名ビルド
速さ即座、決定的な結果実機フローとストアの処理時間
実際のキーを使うかいいえ、抽象化された storeはい、公開 API キーとサービスアカウント
API キーtest_ キー本番の公開キー
適した用途初期開発、単体テスト、CIリリース前の検証

おすすめの流れは、Test Store で作って反復し、リリースを Closed testing、Open testing、Production へ昇格させる前に Google Play サンドボックスで実際の連携を検証することです。サンドボックス購入が成功し、RevenueCat に表示されれば、連携が正しくつながっていると確信できます。

Test Store が初めてなら? まず Android 用 Test Store のセットアップ コードラボから始め、実際の store の検証のためにここへ戻ってきてください。

前提条件

実際の購入をテストする前に、連携が整っている必要があります。大半は RevenueCat Google Play 連携 コードラボで扱います。

  • RevenueCat SDK が連携され、公開 Google API キーで構成されています(test_ キーではありません)。
  • サービスアカウントの認証情報が RevenueCat に接続され、検証されています。
  • 商品と基本プランが Google Play にあり Active 状態で、RevenueCat にインポートして Offering と Entitlement に紐付けてあります。
  • 署名済みの Android App Bundle または APK があります。ビルドには Google Play Billing Library が含まれている必要があり、これは RevenueCat SDK に同梱されています。
  • 実機を推奨します。エミュレーターは Google Play サービスを搭載している場合のみ動作し、その場合も実機より不安定です。

RevenueCat SDK はすでに billing 権限を宣言しているので、通常は手動で追加する必要はありません。カスタムのマニフェストを管理している場合は、この権限があるか確認してください。

xml
<uses-permission android:name="com.android.vending.BILLING" />

ライセンステスターを追加する

ライセンステスターは、Google Play がサンドボックスの購入者として扱う Google アカウントです。ライセンステスターの購入はテスト用の支払い方法を使い、決して課金されません。

  1. Play Console > Settings > License testing を開きます。
  2. テスト端末でサインインする Google アカウントのメールを追加します。
  3. サンドボックスが本番のように動くよう、ライセンス応答を RESPOND_NORMALLY のままにします。
  4. 変更を保存します。
Google Play Console の License testing 設定
端末ごとにテスターアカウントは一つ。 テスト端末には、ただ一つのライセンステスターアカウントだけでサインインしてください。複数の Google アカウントがサインインしていると、サンドボックス購入が失敗することがあります。

アカウントがライセンステスターになると、Google Play は実際の方法で課金する代わりに、常に承認するカードなどのテストカードを提示します。

Closed testing トラックを作って opt-in する

商品を読み込んで購入するには、ビルドがテストトラック経由で端末に届き、アカウントがそのトラックに opt-in している必要があります。購入のテストには Closed testing トラックが適しています。

  1. Play Console > Testing > Closed testing へ移動し、新しい closed トラックを作成します。
  2. テスターリストを作成して名前を付け(例:「Testers」)、ライセンステスターのメールを追加します。
  3. 署名済みの App Bundle または APK をトラックにアップロードして保存します。リリースを完全に公開(ロールアウト)する必要はありませんが、ビルドは処理されて利用可能になっている必要があります。
  4. トラックの opt-in URL をコピーし、テストアカウントでサインインした状態で開き、テスターになるボタンを押します。
Google Play Console で Closed testing トラックを作成 テスターリストの作成 テスターのメール追加とリストの保存 Closed testing トラックの opt-in URL テスターとして登録された確認
opt-in は任意ではありません。 opt-in URL を開くと、Play アカウントがテスト対象として登録されます。これを飛ばすと、アプリで商品が読み込まれません。

アプリが完全に新規の場合は、商品が表示される前に closed トラックの設定で国や地域に対して配信可能にする必要があるかもしれません。

Internal と Closed。 ビルドをアップロードするだけで(Internal testing でも)商品を作成するには十分です。テスターの opt-in で購入をテストするには、ここで説明する Closed testing トラックを使ってください。

サンドボックス購入を行う

実機にライセンステスターとしてサインインした状態で、closed トラックからアプリをインストールします。そのうえでペイウォールを表示し、商品を購入します。

  1. アプリを起動し、Offering が表示される画面に到達します。
  2. 購入を開始します。Google Play のシートが、実際のカードではなく テスト用の支払い方法とともに表示されます。
  3. 購入を完了します。Google はこれを Test order として表示し、実際のお金は動きません。
課金されないことを示す端末上のサンドボックステスト購入

買い切り商品は対応する Entitlement をすぐにアンロックします。サブスクリプションは、後のステップで扱う高速化された更新スケジュールで始まります。

RevenueCat で購入を確認する

サンドボックス購入は、RevenueCat が受け取って初めて意味を持ちます。ダッシュボードで確認してください。

  1. RevenueCat ダッシュボードで該当の顧客を開きます。
  2. View Sandbox Data トグルをオンにします。オンにするまで、サンドボックスの取引は隠れています。
  3. その顧客に取引とアクティブな Entitlement が表示されるか確認します。
なければ、追跡されていません。 サンドボックスデータをオンにしても RevenueCat に購入が表示されない場合は記録されておらず、これは表示の不具合ではなく認証情報や商品マッピングの問題を示します。サービスアカウントの接続と、購入した商品が RevenueCat にインポートされているかを再確認してください。

高速化スケジュールで更新をテストする

サブスクリプションが更新される様子を見るのに 1 か月待つ必要はありません。サンドボックスでは Google Play が更新周期を圧縮するので、ライフサイクル全体を数分で確認できます。

本番の期間サンドボックスの更新
1 週間5 分
1 か月5 分
3 か月10 分
6 か月15 分
1 年30 分

サンドボックスのサブスクリプションは最大 6 回更新されてから期限切れになり、更新処理、期限切れ、猶予期間や支払い再試行のロジックをテストするのに十分です。すべての更新が RevenueCat の顧客ダッシュボードに常に反映されるわけではないので、個々の更新行を数えるより Entitlement の状態を信頼できる唯一の情報源としてください。

トラブルシューティング

サンドボックスの失敗の多くは、コードではなくアカウントやビルドの構成に起因します。次を順に確認してください。

購入中の「Something went wrong」

これはアプリの問題であることはほとんどありません。Google Play が支払いを処理できなかったという意味で、たいていは支払い方法か、その背後の Google Pay アカウントに問題があるためです。テスターとしてサインインした状態で pay.google.com を開き、表示された問題を片付け、支払い方法を追加または修正し、アカウントが確認を求める項目を解決してください。そのうえで購入を再試行します。

商品が読み込まれない

  • opt-in URL を開いていない、またはアカウントがテスターリストにありません。
  • アカウントが Settings > License testing のライセンステスターではありません。
  • ビルドの applicationId が、商品を所有するパッケージと一致していません。
  • リリースがまだ処理中、またはアプリがその地域で利用できません。

テストカードではなく実際のカードが表示される

アクティブなアカウントがライセンステスターでないか、誤ったアカウントでサインインしています。Settings > License testing でアカウントを確認し、端末にそのアカウントだけがサインインしているか確認してください。

サブスクリプション購入がブロックされる

画面ロックや PIN がない端末では、サブスクリプション購入が失敗することがあります。端末の PIN を設定して再試行してください。

購入が RevenueCat に表示されない

まず View Sandbox Data をオンにします。それでも表示されない場合は、サービスアカウントの認証情報と、商品がインポートされて Entitlement に紐付いているかを再確認してください。

まとめと次のステップ

抽象化ではなく、実際の Google Play 連携を検証しました。ライセンステスターを追加し、Closed testing トラックを作り、opt-in し、テストカードで商品を購入し、サンドボックスデータをオンにして RevenueCat で確認し、高速化スケジュールで更新を動かしました。

両方のツールをワークフローに残してください。コードを書いている間は Test Store で速く決定的に確認し、リリース前には Google Play サンドボックスで実際の経路を最初から最後まで検証します。サンドボックス購入が動き、RevenueCat に表示されたら、ビルドを Closed testing、次に Open testing、次に Production へ昇格させてください。

続けて読む資料です。