web-dev-qa-db-ja.com

アプリ内課金Android製品にサブスクライブする際には認証を返す必要があります

Android 1)API v3を使用しています2)アプリのアルファ版をアップロードしてからテストできるようにするため、アプリ内課金に対処するのは初めてです

enter image description here

3)サブスクライブ製品を作成しました

enter image description here

4)これは製品でサブスクライブするための私のコードです

mSubscribeButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            try {

                Bundle subscribeIntentBundle = mService.getBuyIntent(3, getPackageName(), "my_product_id", "subs", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
                PendingIntent pendingIntent = subscribeIntentBundle.getParcelable("BUY_INTENT");

                if (subscribeIntentBundle.getInt("RESPONSE_CODE") == 0) {

                    startIntentSenderForResult(pendingIntent.getIntentSender(), 4002, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
                } else {
                    Toast.makeText(MainActivity.this, "Error Code: " + subscribeIntentBundle.getInt("RESPONSE_CODE"), Toast.LENGTH_SHORT).show();
                }
            } catch (RemoteException e) {
                e.printStackTrace();
            } catch (SendIntentException e) {
                e.printStackTrace();
            }
        }
    });

5)次のエラーが表示されます

enter image description here

  • 別のデバイスを使用しようとしましたが、すべて同じエラーが発生しました。また、Googleアカウントでログインし、Google Playストアを開いてアプリを表示できます。

  • また、アプリマネージャーからGoogle Playストアのデータを消去しようとしました

誰でも助けてくれますか??

45

以前にも同じ問題があります。 Google開発者コンソールにアクセスして、アプリが[〜#〜] published [〜#〜]のいずれかのバージョン(アルファ版、ベータ版、または製品版)であることを確認します。次に、アプリ内購入が機能します:)

40
mmw5610

恐ろしいメッセージで同じ問題が発生しました:

認証が必要です。 Googleアカウントにサインインする必要があります。

私には2つの問題がありました。

  1. コードで識別子"com.argonnetech.wordswriting.noads"を使用して製品を購入しようとしましたが、Google Play Developer(GPD)コンソールで構成されたアプリ内製品は単に「noads」という名前でした
  2. GPDコンソールでアプリ内製品の名前を変更した後、「アクティブ」モードに切り替える必要がありました

それは働いた。エラーメッセージは誤解を招くものであり、「アプリ内アイテムが存在しない」のようなエラーの方が良いでしょう。

19
a.dibacco

アプリ内購入アカウントのAndroidデベロッパーテストは、このキーに従う必要があります。

Base64EncodedPublicKey

// base64EncodedPublicKeyのテスト

public static final String base64EncodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg" +
 "KCAQEAhNe2XQ70DceAwE6uyYJGK1dIBbZcPdlER/9EEzylr6RDU6tnGj0Tk7kceN03GKvRf/ucT+ERLL3O" +
 "aHR22PXRXLZ17NZ81x6oS2vGmLyXBnjrU/I+asl8cNuLGySaoCdXxPAV+A9g6OG13dk+KY9i0O1roGpFH" +
 "fsAFyKCgSqR0PMJZ1bS+wFFBYf3M4IxgBcxuuZKDmR+MztCgm5N4zc6w2CwFZn3mXeDoTg15mWDU3sZO" +
 "WeRwFeynhV+FCYdDp8DpAkLk1b5IiXYFQ53wxCh/GxiKqBB6uQMmAixFjAcZV1QWfcBABae9vxiV5" +
 "VAEJvOOnhPxnaT9HYadW0pQ/UbJwIDAQAB";

そして、アイテムはそのようなキーを購入しました

ITEM_PURCHASED

// ITEM_PURCHASEDのテスト

public static final String ITEM_PURCHASED = "Android.test.purchased";

そして、このコードonCreate()を初期化するために開始しますIabHelperアプリ内購入のクラス、

IabHelper helper = new IabHelper(this, Constants.base64EncodedPublicKey);
helper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                Log.d("#InAppStartSetup#", "In-app Billing setup failed: " + result);
            } else {
                Log.d("#InAppStartSetup#", "In-app Billing setup successful.");
            }
        }
    });

そして最後に、このコードハンドルの時間をここで購入しました。

helper.launchPurchaseFlow(YOUR_ACTIVITY, Constants.ITEM_PURCHASED,
                YOUR_REQUEST_CODE, mPurchaseFinishedListener, "");

君たちありがとう...

Developer.Android.comのドキュメントは古くなっているようです。

アプリ内課金を公開せずにテストする場合は、Googleグループを作成し、テスターのアルファリストを追加する必要があります。こちらをご覧ください: https://support.google.com/googleplay/Android-developer/answer/3131213?hl=en

[〜#〜] update [〜#〜]

2015年半ばの時点で、これはもはや必要ありません。 Google Play開発者コンソールでテストするための新しいオプションがいくつかあります。

2
lenooh

上記のソリューションのほとんどは機能しますが、まだこの問題を抱えている人は、これを試してください:

  • In Android Studioはリリースキーでアプリに署名します(これにより、署名された app-release.apk ファイル)
  • それから 確認してください を使用して物理デバイスにインストールします adb install path/to/your/app-release.apk (アルファ/ベータ経由ではありません

screenshot


2
herveweb

以下は私のために働く:

  • ドラフトアプリケーションをアルファまたはベータとして、何らかのバージョンコードとともにアップロードします。
  • 有効なサブスクリプションを持つアカウントでデバイスにログインします。
  • Alpha/betaリリースと同じバージョンのこのデバイスに署名済みアプリケーションをインストールします。
1
Shanki Bansal

私の場合、versionCodeversionName、およびapplicationIdは、デベロッパーコンソール上のアプリの現在のバージョンと同期していませんでした。 build.gradleファイルでこれらを変更しました。 EclipseのAndroid studioでアプリを書き直したため、両者は異なっていました。この後、アプリの請求は機能しました。

1
Pete