このバージョンのアプリケーションは、Google Playを介した請求用に設定されていません


269

アプリ内課金でアプリケーションを実行しようとすると、「このバージョンのアプリケーションは、Google Playからの課金用に設定されていません。詳細については、ヘルプセンターを確認してください」というエラーが表示されます。

既にマニフェストファイルに請求権限があり、署名済みの.apkをドラフトとしてGoogle Playにアップロードし、同じ署名済みapkを携帯電話にインストールしました。

この問題を解決する方法について何か助けはありますか?

回答:


339

このエラーは、いくつかの理由で発生する可能性があります。

これは、Google IABテストの要件のリストです。

前提条件:

  1. AndroidManifestには、「com.android.vending.BILLING」権限を含める必要があります。
  2. APKはリリースモードで組み込まれています
  3. APKはリリース証明書で署名されています。(重要:「Google Playによるアプリ署名」では、GooglePlayStoreから直接ダウンロードした場合にのみ機能します!)
  4. APKは、アルファ版またはベータ版の配布チャネル(以前はドラフトとして)に少なくとも1回は開発者コンソールにアップロードされます。(時間がかかる〜2h-24h)。
  5. IAB 製品が公開され、そのステータスがアクティブに設定されます。
  6. テストアカウントが開発者コンソールに追加されます。

テスト要件:

  1. テストAPKには、開発者コンソールにアップロードされたものと同じversionCodeがあります。
  2. 試験APKはされ署名された同じ証明書(複数可) dev.consoleにアップロードとして。
  3. テストアカウント(開発者ではない)- デバイスのメインアカウントです。(メインアカウントは必要ないかもしれません- @MinosLコメントによると)
  4. テストアカウントはテスターとしてオプトインされており、有効な支払い方法にリンクされています。(@Kyone

PS:リリース証明書を使用したデバッグhttps ://stackoverflow.com/a/15754187/1321401(Thnx @dipp for the link)

PPS:すでにこのリストを長い間作りたかったのです。

Thnx @ zlgdev@Kyone@MinosL(更新用)


5
ビルドのアップロード後に生成される「オプトインURL」を使用して、 IABのテストに使用しているアカウントがテスターとしてオプトインされていることを確認することを忘れないでください。また、有効な支払い方法にリンクされている
京根2015年

3
IAPをテストする方が簡単ではないですか?または、一般的なものをテストするために..
ファン

1
また、注目に値します。テストアカウントを開発者アカウントにリンクするべきではありません(APKをアップロードするためのアクセス権を持たないでください)
guness

2
また、注目に値します。「アプリ署名証明書」が有効になっている場合、署名証明書で署名できないため、ローカルAPKを使用して実際の購入をテストすることはできません。(調べるために私を3時間のように連れて行った)
ガネス、

1
私は1)署名されたデバッグアプリで2)デバイスのメインアカウントではなくテストに成功しているため、Google IABテストのプロセスは上記のように厳格ではないようです。
MinosL 2019

194

数時間試してみて、解決策を見つけました。

  1. Googleはアプリケーションを処理してサーバーに更新するのにしばらく時間がかかります。私にとっては約半日かかります。したがって、APKをGoogle Playでドラフトとして保存した後、アプリ内アイテムが正常に応答し、定期的な購入が可能になるまで数時間待つ必要があります。
  2. APKをエクスポートして署名します。署名のないAPKで購入しようとすると、エラーが発生します。

71
うわー、これは深刻なことですか?同じ問題が発生しました。アプリ内課金をテストするためにGoogleが要求するすべてのことを行いましたが、それでも同じ回避エラーメッセージが表示されました。私は待って見なければならないでしょうね。しかし、Googleはアプリ内課金を実装するためにアプリを更新する必要があるたびに開発者が何時間も待つことを本当に期待していますか?控えめに言っても、私にはかなり不適切なようです。
Simon

6
Android Studioに接続している間、またはデバッガーに接続している間に実行してテストできますか?または、USB経由でリリースAPKをインストールする必要がありますか?
Alfie Hanssen 2013

3
Androidツール>署名済みプロジェクトのエクスポート...など以外に購入プロセスをテストする簡単な方法はありますか?次に、手動でAPKをデバイスにコピーし、テストします...繰り返しますか?私は何かを逃しているに違いありませんか?
Wired00 2013

4
真剣に、私はデバッグ証明書でアプリケーションを使用してアプリ内課金をテストできませんか?
TacB0sS 2013

8
IDEから直接、デバッグビルドを使用できます。デバッグキーストアをリリースストアに一致するものに変更するだけです。:方法の詳細については、この記事を参照してくださいstackoverflow.com/questions/10886814/...
cottonBallPaws

137

公開されたバージョンが携帯電話でテストしているバージョンと同じでない場合も同じことが起こります。

たとえば、アップロードされたバージョンはでandroid:versionCode="1"、携帯電話でテストしているバージョンはandroid:versionCode="2"


3
アップロードされたバージョンがandroid:versionCode="1"あり、電話がandroid:versionCode="2"用量である場合、それが問題ないか、apkのGoogle Playを変更する必要があるか教えてください。
Youddh

1
あなたがする必要があるのは、ローカルバージョンを「1」に下げることです。それにより、少なくとも一時的にテストのために、それが現在のライブバージョンと一致します。
ロメイン

2
状況に応じて、このエラーには2つの一般的な修正があるようです。私の場合はこれでした。
マット

ありがとう、これが問題でした。接続しているデバイスでリリース署名されたapkで問題なくデバッグしていました。次に、バージョンコードを変更すると、1005エラーが発生し始めました。ふew!
アンナビルストロム2014

@Annaは、iabHelperを使用する場合、-1005もUSER_CANCELLEDであることに注意してください
JacksOnF1re

47

ライブ証明書でAPKに署名する必要があります。次に、それをテストデバイスにインストールします。その後、InAppBillingをテストできます。Eclipseからデバイスへ直接実行してアプリケーションをテストしている場合(デバッグモード)、このエラーが発生します。

android.test.purchasedSKUとして使用している場合、それは完全に機能しますが、最終応答にdeveloperPayloadは含まれません。

アプリアイテムで独自のドラフトを使用している場合は、ずっとテストできますが、料金が発生するため、後で自分で返金する必要があります。

Google Play開発コンソールで使用しているのと同じGmailアカウントでアイテムを購入することはできません。


1
+1デバッガから実行すると、デバッグ証明書が使用されます。アプリをエクスポートして新しい公開鍵を作成(および開発者コンソールにインストール)したら、apkをメールで送信し、Gmailの受信トレイからインストールします。
cdavidyoung

「android.test.purchased」を試してみたい場合、コードと開発者コンソールの両方でSKUを変更しますか?
Rocologo 2014年

26

開発者コンソールで:

Settings-> Account details-> License Testing->テストアクセスが可能なGmailアカウント

アカウントをここに入力してください


魅力のように機能します。
ヨルダン

17

2018年からここにいる場合は、Playストアから直接APKをダウンロードして、「派生」APKをインストールする必要があります。GoogleのPlayストアに「Google Playによるアプリ署名」という機能があるためかもしれません。


1
どのAPKですか?AIDLを使用していますが、それでも必要ですか?
Zhen Liu

@ZhenLiu必要ないと思います
法律Gimenez

さらに、アプリを別の方法(Android Studioなど)でデバイスにインストールすることはできません。Playストアからのインストール/アップデートは機能しますが、IAPは機能しません-OPエラーが発生します。
JDune

これをどのようにデバッグしますか?
Oliver Dixon

3

これは、Google Playのものとは異なるバージョンのAPKを使用している場合に発生します。


3

私に起こったことを追加させてください、誰かを助けるかもしれません。

それは主に署名によるものでした。

プロジェクト構造に署名の詳細を追加したので、実行するたびに、予期された署名済みapkがインストールされると考えていました。ただし、ビルドタイプ「デバッグ」が選択されました。

以下の修正で問題が解決しました。

  • ビルドタイプ「リリース」の署名済みAPKを生成しました。
  • apkを手動でインストールした。

2

私の場合、インストールされたapkとアップロードされたapkの署名が異なるため、同じメッセージが表示されました。


2

SOや他のサイトでの多くの回答やコメントに反して、Google Playからテストデバイスにダウンロードされた製品のアルファ/ベータバージョンを使用して予備テストを実行する必要はありません(アルファ/ベータ公開プロセスは、多くの場合、負荷がかかります。半日)。また、署名済みリリースAPKをデベロッパースタジオからテストデバイスに読み込んだり、再度読み込んだりする必要もありません。

開発者スタジオからADB経由でテストデバイスに直接読み込まれたデバッグアプリを使用して、アプリの課金サービスで予備のGoogle Playをデバッグできます。これを妨げるエラーが発生している場合は、コードに問題がある可能性があります。SKUのCASE(製品ID)とその形式に特に注意してください(たとえば、APKをcom.mydomain.my_product_idとしてロードする場合は、必ず同じ方法で同じケースとドメインを提供して、この方法で購入してください)。 。また、itemTypeには特に注意を払ってください。これは、アプリの購入またはサブスクリプションでの管理対象/管理対象外のそれぞれに対して、「inapp」または「subs」のいずれかである必要があります。

Chirag Patelが提案したように、請求コードが適切に設定されている場合は、予備テスト中にandroid.test.purchased Sku(製品ID)を使用してすべてのテストを実行します。このデータはGoogleテストシステムから提供されないため、署名、トークン、およびペイロードのチェックを通過するように、課金処理全体でこのIDを確認してください。さらに、テスト製品の1つにこのIDを与えて、スキーマを介して購入、ロック解除/ロード、およびプレゼンテーションをテストします。購入をクリアするには、それを消費し、同じSkuとこのようにフォーマットされたトークン文字列を渡します-他のフィールドは関係ありません:

    "inapp:"+appContext.getAppContext().getPackageName()+":android.test.purchased";

テストのこのフェーズが完了したら、アルファ/ベータ製品を使用したセミライブテストに移行します。Googleグループ(基本的にはメーリングリスト)を作成し、テストユーザーのメールをグループに追加し、このグループを追加/招待して、このフェーズでデバイスをテストします(アプリのGoogleデベロッパーリストの「APK」部分で実行されます)。購入はシミュレーションされますが、実際には請求されません。ただし、購入をクリアして再テストするため、Googleウォレットから返金する必要があることを示しています。これは、アルファ/ベータロードを使用してユーザーをテストする時間のかかるプロセスを必要とするテストの唯一のフェーズです。



1

同じ問題があり、DZDomiから投稿を読む前に解決されませんでした。突然、Google Developer Consoleに有効にする必要のある設定があることがわかりました。[アプリ内購入]セクションには、製品の行があり、右端にステータスがあります。それはアクティブでなければなりません!


0

私の問題は、debug.keystoreで確認しようとしたこと、つまりeclipseで実行することでした。アルファモードで公開したキーストアでエクスポートしました(テストする前に公開する必要があります)。私の電話と私はそれを普通にテストすることができました。


0

この問題は、APKをアップロードした後にアプリ内購入を追加したが、Playストア(アルファ、ベータ、プロダクション)でアプリケーションを公開していない場合にも発生します。

つまり、基本的には、Playストア(アルファ版、ベータ版、製品版)でapkを公開した後にアプリ内購入を追加する必要があります。そうしないと、アプリ内購入を購入したり、クエリを実行したりできません。


0

ここで言及されていないもう1つの理由は、実際のデバイスでテストする必要があることです。エミュレーターが本当に良くなったので、それは簡単な間違いです。


0

最近グーグルは彼らのシステムに変更を実装しました、そしてあなたがコンソールに少なくとも一つのAPKをアップロードしたので、あなたはどんなバージョンコード/番号であなたのアプリでアプリ内リクエストをテストすることができます。

相互参照リンク

gradleデバッグ用にデバッグビルドに署名するように構成します。

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.release
            ...
        }
    }
}

0

解決

グーグルはアプリのバージョンを更新するのに時間がかかるので、プレイストアにアプリをアップロードした後しばらく待つだけです。


0

私はmoto c2 +で同じ問題を抱えていますが、再起動するとデバイスの問題が発生し、完全に実行されます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.