Google Playの問題
0:10:00Google Playの設定に関する問題は、RevenueCatをAndroidアプリと連携する際に最もよく発生する問題のひとつです。このステップでは、商品の設定、サービス認証情報、テスト中によく直面する課題を取り上げます。
問題1:商品が見つからないエラー
エラーメッセージ
BillingClient: Product not found
Error: The item you were attempting to purchase could not be foundよくある原因
- 商品が未公開:商品は存在するものの、Google Play Consoleで公開されていない場合です。
- 商品IDの不一致:RevenueCatの商品IDがGoogle Playと一致していません。
- アプリが未公開:アプリが公開されていません(内部テスト向けにも公開されていない状態です)。
- パッケージ名の誤り:パッケージ名がアプリと一致していません。
解決手順
手順1:Google Play Consoleで商品のステータスを確認する
- Google Play Consoleに移動します。
- Monetize → Products → In-app productsまたはSubscriptionsに移動します。
- 商品のステータスが「Active」になっているか確認します。
- 「Inactive」または「Draft」と表示されている場合は、有効化する必要があります。
手順2:商品IDが一致しているか確認する
- Google Play Consoleから正確な商品IDをコピーします。
- RevenueCatダッシュボードに移動します。
- Product Catalog → Productsに移動します。
- Google Playの商品IDと完全に一致しているか確認します(大文字と小文字は区別されます)。
手順3:テスト用にアプリを公開する
- アプリは少なくとも内部テストトラックに公開されている必要があります。
- Google Play ConsoleでTesting → Internal testingに移動します。
- リリースを作成し、APK/AABをアップロードします。
- 自分自身をテスターとして追加します。
- Google Playがリリースを処理するまで1〜2時間ほど待ちます。
手順4:パッケージ名を確認する
- アプリの
build.gradleでapplicationIdを確認します。 - RevenueCatダッシュボードのApp → Google Playでパッケージ名が一致しているか確認します。
問題2:サービス認証情報 / APIアクセスの問題
エラーメッセージ
Error: Unable to fetch Google Play purchases
Google Play credentials are invalid or expiredよくある原因
- サービスアカウントが未作成:Google Cloudのサービスアカウントを設定していません。
- 権限の不足:サービスアカウントに必要な権限がありません。
- 認証情報の期限切れ:サービスアカウントキーの有効期限が切れています。
- 誤ったプロジェクトの連携:サービスアカウントが別のGoogle Cloudプロジェクトのものです。
解決手順
手順1:サービスアカウントを作成する(未作成の場合)
- Google Cloud Consoleに移動します。
- Google Play Consoleに連携されているプロジェクトを選択するか、新規作成します。
- IAM & Admin → Service Accountsに移動します。
- Create Service Accountをクリックします。
- 名前を「RevenueCat Service Account」にします。
- Create and Continueをクリックします。
- ロールの割り当てはスキップします(Google Play Console側で行います)。
- Doneをクリックします。
手順2:Google Play Consoleで権限を付与する
- Google Play Consoleに移動します。
- Setup → API accessに移動します。
- Google Cloudプロジェクトを連携します(まだ連携されていない場合)。
- サービスアカウントを見つけてGrant accessをクリックします。
- 次の権限を付与します。
- View financial data。
- Manage orders and subscriptions。
- Invite userをクリックします。
手順3:サービスアカウントキーを生成してアップロードする
- Google Cloud Consoleで作業します。
- IAM & Admin → Service Accountsに移動します。
- サービスアカウントをクリックします。
- Keysタブに移動します。
- Add Key → Create new keyをクリックします。
- JSON形式を選択します。
- キーファイルをダウンロードします。
- RevenueCatダッシュボードで次の手順を行います。
- プロジェクトに移動します。
- Apps & providers → Google Playに移動します。
- JSONキーファイルをアップロードします。
問題3:テストの問題とライセンステスター
エラーメッセージ
Error: This version of the application is not configured for billing through Google Playよくある原因
- ライセンステスターとして未登録:Googleアカウントがライセンステストのリストにありません。
- 誤ったGoogleアカウントの使用:ライセンステスターではないアカウントでテストしています。
- 適切な設定のないエミュレーターでのテスト:エミュレーターには別途設定が必要です。
- Playストアからダウンロードしていないアプリ:サイドロードしたアプリではテスト購入ができません。
解決手順
手順1:ライセンステスターを追加する
- Google Play Consoleに移動します。
- Setup → License testingに移動します。
- テスターのGmailアドレスを追加します。
- レスポンスをRESPOND_NORMALLYに設定します。
- 変更を保存します。
手順2:内部テストのユーザーを追加する
- Testing → Internal testingに移動します。
- Testersタブでリストを作成するか、メールアドレスを追加します。
- テスターはプログラムに参加するために、オプトインリンクを承認する必要があります。
手順3:アプリを正しくインストールする
- テスターはPlayストアのオプトインリンクからインストールする必要があります。
- 購入テストのためにAPKをサイドロードしないでください。
- デバイスがライセンステスターのGoogleアカウントでログインしているか確認します。
手順4:バージョンコードが一致しているか確認する
- アップロードしたAPK/AABのバージョンコードは、ローカルビルドと一致している必要があります。
build.gradleでversionCodeを確認します。- Google Play Consoleのバージョンと一致しているか確認します。
問題4:キャッシュと状態の問題
症状
- 正常に動作していた商品が突然利用できなくなります。
- 購入に成功しても購入状態が更新されません。
- 削除した古い商品が表示され続けます。
解決手順
手順1:Google Playストアのキャッシュを削除する
- デバイスのSettings → Appsに移動します。
- Google Play Storeを見つけます。
- Storage → Clear Cacheをタップします。
- デバイスを再起動します。
手順2:アプリのキャッシュを削除する
// 顧客情報を強制的に再取得する
Purchases.sharedInstance.invalidateCustomerInfoCache()手順3:アプリを再インストールする
- アプリを完全にアンインストールします。
- Playストアのオプトインリンクから再インストールします。
- これによりクリーンな状態が保証されます。
問題5:内部テスト中に実際の請求が発生する(テスト取引にならない)
症状
Google Playの内部テストトラックでサブスクリプションやアプリ内購入をテストしているのに、支払い方法(クレジットカード、UPI、Google Payなど)に実際の請求が発生します。Google Playの決済ダイアログに「Test card, always approves」オプションの代わりに実際の支払いオプションが表示され、取引が本番の購入として記録されます。
発生する理由
多くの開発者が見落とす非常に重要な区別があります。内部テストのテスターとライセンステスターは、Google Play Consoleにおいて完全に別の2つの設定です。
| 設定 | 場所 | 役割 |
|---|---|---|
| 内部テストのテスター | Testing → Internal testing → Testersタブ | テストトラックからアプリをダウンロードできる権限を付与します。 |
| ライセンステスター | Setup → License testing | 購入をテスト取引として処理します(実際の請求は発生しません)。 |
ユーザーを内部テストのテスターとして追加すると、アプリをダウンロードできるようになるだけです。これによって購入が無料になることはありません。購入をテスト取引として処理するには、License testingにも必ず該当のGmailアドレスを追加する必要があります。
解決手順
手順1:テスターをLicense testingに追加する(アカウントレベル)
最も見落とされやすい手順です。
- Google Play Consoleに移動します。
- Setup → License testingに移動します(アプリごとの設定ではなく、アカウントレベルの設定にあります)。
- 各テスターのGmailアドレスを追加します。
- ライセンスレスポンスをRESPOND_NORMALLYに設定します。
- Save changesをクリックします。
- 変更が反映されるまで15〜30分ほど待ちます。
手順2:デバイスで正しいGoogleアカウントを確認する
ライセンステストを設定していても、デバイスで誤ったアカウントを使用すると実際の請求が発生します。
- テストデバイスでGoogle Play Storeアプリを開きます。
- 右上のプロフィールアイコンをタップします。
- どのGoogleアカウントがアクティブになっているか確認します。
- このアカウントはLicense testingに登録したメールアドレスと同じである必要があります。
- 複数のアカウントを使用している場合は、購入する前に正しいアカウントに切り替えます。
手順3:オプトインリンクからアプリを再インストールする
アプリは正しいテストチャネルを通じてインストールする必要があります。
- デバイスからアプリをアンインストールします。
- Google Play Console → Testing → Internal testing → Testersタブに移動します。
- オプトインURL(「Join on the web」リンク)をコピーします。
- 正しいGoogleアカウントを使って、テストデバイスでこのリンクを開きます。
- 招待を承認し、Playストアからアプリをインストールします。
手順4:テストモードが機能しているか確認する
ライセンステストが正しく設定されていれば、決済ダイアログに次が表示されます。
- 上部に「Test card, always approves」という支払い方法が表示されます。
- 購入金額が$0.00と表示されるか、テスト注文として表示されます。
- 実際の支払い方法(クレジットカード、UPI、Google Pay)がデフォルトのオプションとして表示されないはずです。
すべての手順に従っても実際の支払いオプションが表示され続ける場合は、30分ほど待ってから再試行してください。ライセンステストの変更がGoogleのシステムに反映されるまで時間がかかることがあります。
誤って発生した実際の請求の返金を受ける
テスト中に実際にお金が請求された場合は、返金を行うことができます。
方法1:Google Play Console経由での返金(開発者向け)
- Google Play Consoleに移動します。
- Order management(Monetizeの下)に移動します。
- ユーザーのメールアドレスまたは注文IDで注文を探します。
- 注文をクリックしてRefundを選択します。
- 返金を選択し、必要であればアクセス権を取り消します。
方法2:Google Playサポート経由での申請(テスター向け)
- Google Playの注文履歴を開きます。
- 該当の請求を見つけてReport a problemをクリックします。
- 理由を選択して返金を申請します。
よくある問題のクイックリファレンス
| 問題 | 考えられる原因 | 解決方法 |
|---|---|---|
| RevenueCatで商品が見つからない | Google Play ConsoleとRevenueCatダッシュボード間の商品IDの不一致。 | Google Play Console → Monetize → Productsから正確な商品IDをコピーします。RevenueCat → Product Catalog → Productsに貼り付けます。IDは大文字と小文字を区別し、一字一句正確に一致している必要があります。 |
| RevenueCatで商品が見つからない | 商品がGoogle Play Consoleで「Draft」または「Inactive」状態になっています。 | Google Play Console → Monetize → Productsで各商品のステータスがActiveと表示されているか確認します。Draft状態の商品を有効化し、変更が反映されるまで数分待ちます。 |
| RevenueCatで商品が見つからない | アプリがどのテストトラックにも公開されていません。 | アプリは署名済みのAPK/AABとともに、少なくとも内部テストトラックに公開されている必要があります。Google Play Console → Testing → Internal testing → Create new releaseに移動します。 |
| 「Billing unavailable」エラー | Google Play開発者サービスのないエミュレーターでテストしています。 | 実機か、Google Playストアを含むエミュレーターイメージを使用してください(Google APIのみでは不十分です)。Android Studioで「Google Play」列が表示されているシステムイメージを選択します。 |
| 「Billing unavailable」エラー | アプリがPlayストアを経由せずサイドロードされています。 | テスターは内部テストトラックのPlayストアのオプトインリンクからアプリをインストールする必要があります。サイドロードしたAPKではテスト購入ができません。 |
| サービス認証情報エラー | サービスアカウントのJSONキーがアップロードされていないか、期限切れです。 | RevenueCatダッシュボード → Apps & providers → Google Playで有効なJSONキーファイルをアップロードします。必要であれば、Google Cloud Console → IAM & Admin → Service Accounts → Keysで新しいキーを生成します。 |
| サービス認証情報エラー | サービスアカウントに必要な権限がありません。 | Google Play Console → Setup → API accessで、サービスアカウントにView financial dataとManage orders and subscriptionsの権限を付与します。反映まで最大36時間かかることがあります。 |
| サービス認証情報エラー | Google CloudプロジェクトがPlay Consoleに連携されていません。 | Google Play Console → Setup → API accessで、サービスアカウントを含む正しいGoogle Cloudプロジェクトを連携します。一度に連携できるプロジェクトは1つだけです。 |
| 「This version is not configured for billing」 | ローカルビルドとPlayストア間のバージョンコードの不一致。 | build.gradleのversionCodeがテストトラックにアップロードされたバージョンと一致しているか確認します。異なる場合は新しいビルドをアップロードします。 |
| テスト購入で実際のお金が請求される | Googleアカウントがライセンステスターとして追加されていません(アカウントレベルの設定)。 | Google Play Console → Setup → License testing(アプリレベルのテスターではありません)に移動します。Gmailアドレスを追加します。レスポンスをRESPOND_NORMALLYに設定します。15〜30分ほど待ちます。内部テストのテスターとライセンステスターは別個の設定です。上記の詳細ガイドを参照してください。 |
| テスト購入で実際のお金が請求される | デバイスで誤ったGoogleアカウントがアクティブになっています。 | デバイスのメインのGoogleアカウント(Playストアからインストールする際に使用したアカウント)は、License testingのメールアドレスと一致している必要があります。Playストアを開き → プロフィールアイコンをタップしてアクティブなアカウントを確認します。複数のアカウントがある場合は正しいアカウントに切り替えます。 |
| テスト購入で実際のお金が請求される | ライセンステストの変更がまだ反映されていません。 | ライセンステスターを追加した後、テストする前に15〜30分ほど待ちます。Google Playストアのキャッシュを削除し(Settings → Apps → Google Play Store → Clear cache)、デバイスを再起動すると反映が早まることがあります。 |
| 商品に古いデータが表示され続ける | デバイスのGoogle Playストアのキャッシュが古くなっています。 | デバイスでSettings → Apps → Google Play Store → Storage → Clear Cacheに移動します。その後、Playストアを強制終了してアプリを再度開きます。 |
| 購入は成功するのにエンタイトルメントが付与されない | RevenueCatでエンタイトルメントが商品に紐付けられていません。 | RevenueCatダッシュボード → Product Catalog → Entitlementsで、エンタイトルメントが存在し、商品が紐付けられているか確認します。各商品は少なくとも1つのエンタイトルメントに紐付けられている必要があります。 |
| サブスクリプションの更新が検出されない | Googleのリアルタイムデベロッパー通知が設定されていません。 | Googleリアルタイムデベロッパー通知を設定し、RevenueCatがサブスクリプションの状態更新を即座に受け取れるようにします。 |
| サブスクリプションを取得できない(新しいPlayモデル) | 基本プランが「Backwards compatible」としてマークされていません。 | Google Play Consoleでサブスクリプションを開き、基本プランをクリックします。「Backwards compatible」タグが有効になっているか確認します。サブスクリプションごとにBackwards compatibleにできる基本プランは1つだけです。RevenueCatではsubscriptionId:basePlanId形式を使用します。コミュニティディスカッションを参照してください。 |
| 「You already own this item」 | 以前のテスト購入が消費も返金もされていません。 | 非消耗型商品の場合は、Google Play Consoleを通じて購入を返金して取り消します。RevenueCatダッシュボードでテストユーザーを削除し、サンドボックスの状態をリセットします。消耗型商品の場合は、SDKが購入を正しく消費するようにします。コミュニティディスカッションを参照してください。 |
| 「The item you requested is not available for purchase」 | アプリがflutter runでローカル実行されたか、サイドロードされています。 |
署名済みのアプリをGoogle Playのテストトラックにアップロードして承認を受けます。テスターはオプトインリンクからインストールする必要があります。Playストアでの配信なしに、ローカルのデバッグビルドでは購入をサポートできません。コミュニティディスカッションを参照してください。 |
| 商品取得時にSERVICE_UNAVAILABLEが発生する | BillingClientの接続がまだ完了していません。 | デバイスにGoogle Play開発者サービスがインストールされ、最新の状態であることを確認します。SDKは自動的に再試行します。configure()の直後にオファリングを取得しないでください。RevenueCat SDKを最新バージョンに更新します。コミュニティディスカッションを参照してください。 |
Google Play設定のクイックチェックリスト
このチェックリストでGoogle Playの設定を確認してください。
- ☐ Google Play Consoleで商品がActive状態になっています。
- ☐ Google PlayとRevenueCat間で商品IDが正確に一致しています。
- ☐ アプリが少なくとも内部テストトラックに公開されています。
- ☐
build.gradleとRevenueCatのパッケージ名が一致しています。 - ☐ サービスアカウントを作成し、JSONキーをRevenueCatにアップロードしました。
- ☐ Google Play Consoleでサービスアカウントに正しい権限があります。
- ☐ Google Play Consoleにライセンステスターを追加しました(Setup → License testing、アプリレベルのテスターではありません)。
- ☐ 実機で正しいGoogleアカウントを使ってテストしています。
- ☐ Playストアのオプトインリンクからアプリをインストールしました(サイドロードではありません)。