web-dev-qa-db-ja.com

Android inapp課金responseListが空です

アプリ内のいくつかのアプリ内製品を定義しました。 APKをGooglePlayにアップロードし、アプリ内購入商品をGooglePlayに追加しました。

ServiceConnectionを次のように定義しました。

_ServiceConnection mServiceConn = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService = null;
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mService = IInAppBillingService.Stub.asInterface(service);
            connect();
        }
    };
_

onServiceConnected関数が呼び出され、bindServiceはtrueを返します。

次はconnect関数です。

_public void connect() {
        new Thread(new Runnable() {
            public void run() {
                try {

                    // Purchase type is "inapp", as required by  API v3
                    Bundle skuDetails = mService.getSkuDetails(3, PACKET, "inapp", querySkus);

                    }

                    int response = skuDetails.getInt("RESPONSE_CODE");

                    Log.e("IAP connect", response + "");


                    if (response == 0) {
                        ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
                        Log.e("size list", responseList.size()+"");
                        ...
                      }
                    }
            } catch (RemoteException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }).start();
}
_

ここでのPACKETはgetPackageName()に設定されています。応答コードは0ですが、ログにはリストのサイズが0であると出力されます。GooglePlayに合計5つのアイテムを入力し、それぞれがアクティブであるため、リストが空である理由がわかりません。 2日間待って、3つのデバイスでテストしましたが、まだアイテムが通過しません。

私は考えられるすべてのことをほとんど試したので、どんな提案も歓迎します。

21
Gooey

アプリ内課金機能にアクセスするには、アプリケーションをベータ版/アルファ版に公開する必要があります。最近変更されましたが、発表されていません:)

http://developer.Android.com/google/play/billing/billing_testing.html#draft_apps

テストできるようにするために、すべての新しいビルドをアップロードする必要はないことを言及する価値があります。同じversionCodeとversionNameを使用するだけで、アプリが公開されていれば機能します。

38
kupsef

あなたのコードは大丈夫そうです。

必ず適切なSKUを照会してください。 querySkusの単一のアイテムは、アプリ内製品のIDと正確に一致する必要があります。

次に、アイテムの場合は正しいタイプをクエリしてください。 「アプリ内製品」を開発者コンソールで購入する車として構成した場合は、「アプリ内製品」を使用します。サブスクリプションをお持ちの場合は、GooglePlayに対するクエリのタイプとして「subs」を使用してください。

お役に立てれば。

21

古いデバイスで問題が発生しました。 Play開発者サービスのアプリデータを削除すると、問題が修正されました。

だから私たちは単に悪いレビューの準備をする必要があります...

1
Tim Autin