13

アプリ内課金の手順に従いました。

  1. インストールされたデモアプリ
  2. アプリ内アイテムを公開
  3. アプリ自体を公開していない

アイテムを購入することはできますが、「アイテムが見つかりません」という奇妙な警告が表示され、購入画面に進む前に無視する必要があります。

およびこのログ エラー:

E/Volley(1384): [157] BasicNetwork.performRequest: Unexpected response code 500 for https://android.clients.google.com/fdfe/details?doc=subs:com.testorooney.testo:sword_001
4

5 に答える 5

31

これはサーバー側のバグではありません。バグは、サンプルアプリケーションのDungeonsクラスのonClickforthePurchaseボタンにあります。

提供されたメソッドには、if {} else if {}ステートメントにバグがあり、選択したアイテムがサブスクリプションアイテムではない場合(mManagedType!= Managed.SUBSCRIPTION)、mBillingService.requestPurchaseが2回呼び出されます。したがって、同じアイテムが2回リクエストされます。1回はアイテムタイプが「inapp」(これは有効なリクエストです)で、その直後はアイテムタイプが「subs」(これは正しくなく、「アイテムが見つかりません」と表示されます)です。 。

バグのあるコードは次のとおりです。

if (mManagedType != Managed.SUBSCRIPTION &&
                    !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
            } else if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
                // Note: mManagedType == Managed.SUBSCRIPTION
                showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
            }

これを修正するには、上記の場合、mManagedType==Managed.SUBSCRIPTIONをelseに追加します。

関数は次のようになります。

@Override
    public void onClick(View v) {
        if (v == mBuyButton) {
            if (Consts.DEBUG) {
                Log.d(TAG, "buying: " + mItemName + " sku: " + mSku);
            }

            if (mManagedType != Managed.SUBSCRIPTION &&
                    !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
            } else if (mManagedType == Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
                // Note: mManagedType == Managed.SUBSCRIPTION
                showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
            }
        } else if (v == mEditPayloadButton) {
            showPayloadEditDialog();
        } else if (v == mEditSubscriptionsButton) {
            editSubscriptions();
        }
    }
于 2012-07-07T03:03:12.627 に答える
3

ダンジョンの例をインストールするときと、コード サンプルをプロジェクトに適用するときに、同じエラーが発生します。makerequestbundle に移動して API_VERSION を 1 に変更すると、このエラーなしでアプリ内購入を実行できることに気付きました。

私が気づいたもう1つのことは、API_VERSION 2のままにしておくと、このエラーなしでサブスクリプションが実行されることです.

コードを見て問題が見つからないため、これがサーバー側のバグであるかどうか疑問に思っています。私の製品IDはすべて一致しています。

于 2012-06-03T01:28:03.410 に答える
0

残念ながら、API を 1 に変更すると、サブスクリプションが無効になるようです。したがって、これにより実際には「アイテムが見つかりません」というエラーは解消されますが、サブスクリプションは機能しなくなります (サブスクリプションは API 2 でのみ使用可能でなければなりません)。

それで、製図板に戻ります。コードをリファクタリングして、サブスクリプション以外のリクエストに対して API 1 を返し、その他すべてに対して API 2 を返すようにします。ややエレガントなソリューションのようです。

于 2012-06-05T13:03:48.540 に答える
0

私はそれと同じ行動を経験しました。私が読んだ多くの投稿では、これは単にサーバー側のエラーであり、それに対してできることは何もないと述べています。

InApp Billing sample codeしかし、友人からの古いコピーを入手することにしたのでitem not found error、購入画面を表示する前に が発生しなくなりました。

これにより、サーバー要求が の最新のコピーで組み立てられている方法に何か問題があると思われますInApp Billing sample code

古いサンプル コードと新しいサンプル コードの違いを分析する機会がありませんでした。

しかし、私が言えることは、サンプル コードの古いコピーを入手できれば、発生している問題は発生しなくなるということだけです。

于 2012-05-29T14:11:18.877 に答える
0

アイテムが見つかりません 商品 ID (apk ファイル内) が商品 ID (マーケット アカウントの商品リストに記載) と一致しない場合、エラーが発生します。

「android.test.purchased」を使用している場合は、apk をアップロードする必要はありません。

最も重要なことの 1 つは、コードに「公開鍵」を追加する必要があることです。このステップでは、Android の例または独自のアプリ コードを使用する必要があります。

公開鍵については、次のリンクを参照してください:
http://developer.android.com/guide/market/billing/billing_integrate.html

于 2012-05-30T14:33:43.520 に答える