0

だから私はアンドロイド課金ライブラリを使用していて、この小さなセットアップを持っています:

    BillingController.setConfiguration(new BillingController.IConfiguration() {

                    public byte[] getObfuscationSalt() {
//Havent changed this
                        return new byte[] { 41, -90, -116, -41, 66, -53, 122,
                                -110, -127, -96, -88, 77, 127, 115, 1, 73, 57,
                                110, 48, -116 };
                    }

                    public String getPublicKey() {
                        return "The key (yes this is set correctly)";
                    }
                });

        BillingController.setDebug(true);

        mBillingObserver = new AbstractBillingObserver(this) {

            public void onBillingChecked(boolean supported) {
                BuyCoins.this.onBillingChecked(supported);
            }

            public void onPurchaseStateChanged(String itemId,
                    PurchaseState state) {
                BuyCoins.this.onPurchaseStateChanged(itemId, state);
            }

            public void onRequestPurchaseResponse(String itemId,
                    ResponseCode response) {
                BuyCoins.this.onRequestPurchaseResponse(itemId,
                        response);
            }

            public void onSubscriptionChecked(boolean supported) {
                BuyCoins.this.onSubscriptionChecked(supported);
            }

        };

        BillingController.registerObserver(mBillingObserver);
        BillingController.checkBillingSupported(this);
        BillingController.checkSubscriptionSupported(this);

    }

そして簡単に:

public void onSubscriptionChecked(boolean supported) {
    if (supported) {
        Toast.makeText(this, "Subscription is supported", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(this, "Subscription is NOT supported", Toast.LENGTH_SHORT)
                .show();

    }
}

public void onRequestPurchaseResponse(String itemId, ResponseCode response) {
    if (response == ResponseCode.RESULT_OK) {
        Toast.makeText(this, "Purchase Response OK", Toast.LENGTH_LONG)
                .show();
    } else if (response == ResponseCode.RESULT_USER_CANCELED) {
        Toast.makeText(this, "Purchase Response Canceled",
                Toast.LENGTH_LONG).show();
    } else if (response == ResponseCode.RESULT_SERVICE_UNAVAILABLE) {
        Toast.makeText(this, "Purchase Response Unavailable",
                Toast.LENGTH_LONG).show();
    } else if (response == ResponseCode.RESULT_ERROR) {
        Toast.makeText(this, "Purchase Response Error", Toast.LENGTH_LONG)
                .show();
    } else {
        Toast.makeText(this, "UNKNOWN RESPONSE", Toast.LENGTH_LONG)
        .show();        }
}

public void onPurchaseStateChanged(String itemId, PurchaseState state) {
    Toast.makeText(this,
            "Purchase State: " + state.toString() + " for item " + itemId,
            Toast.LENGTH_LONG).show();

    purchaseList();
}

public void onBillingChecked(boolean supported) {
    if (supported) {
        Toast.makeText(this, "Billing is supported", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(this, "Billing is NOT supported", Toast.LENGTH_SHORT)
                .show();

    }
}

そして、アイテムは次のように呼び出されます:

public void onClick(View v) {

    switch (v.getId()) {
    case R.id.buy_coins_button_one:
        BillingController.requestPurchase(this, "coins",true /* confirm */, null);
        break;
    case R.id.buy_coins_button_two:
        BillingController.requestPurchase(this, "android.test.purchased",true /* confirm */, null);
        break;

    }

}

ボタン 1 (コイン) を押すと、タイトルに記載されているエラーが表示されます (「エラー処理購入: [DF-BPA-13] 「同意して購入」を押す前に」

どこでもチェックしましたが、このエラーが発生する理由について決定的な答えはないようです。

ボタン 2 (予約済みの Android のボタン) を押すと、購入を押すことができますが、次のようになります。

サーバーから情報を取得中にエラーが発生しました。【DF-DFERH-01】

したがって、このナンセンスと戦うために講じられたいくつかの手順を次に示します。

  • 公開鍵が正しい
  • アプリ内アイテムが 1 日間公開されました
  • 請求オブザーバーでデバッグが true に設定されている
  • アプリはエクスポートされ、キーストアで署名され、apk がインストールされています
  • テスト ユーザーは公開ユーザーではありません
  • テスト ユーザーはテスト アカウントのリストにあります
  • 同じ問題でデバッグがオフに設定されました
  • メインの電話ユーザーが別のテスト ユーザーに変更されました (ファクトリー リセット)
  • さまざまなユーザーのさまざまなデバイスでテスト済み
  • APK と Market のバージョンとバージョン コードは同じです

私はここで完全に迷っています。おそらく、別のエラーがあることに注意する価値があります (他のエラーのような1とは対照的に [27] ):[27] FileBasedKeyValueStore.delete: Attempt to delete 'paramsnMy695NrbaHSHjK0hNnMgg' failed!

私はどこかで何かを逃していますか?それはすべて非常に簡単に思えました。

私は見ました:

アプリ内購入の問題

【DF-BPA-13】

アプリ内課金が機能しない

定期的な問題のようですので、私はそれをどのように理解するかについてあなたに最新情報を提供します

編集:開発コンソールからアプリを削除できないため、削除/追加が機能しませんでした。

4

2 に答える 2

1

は、わかりました。これは奇妙でした。まぐれだったのかもしれませんが、これは私にとってはうまくいきました:

チェックアウト時に、テスト アカウントとパブリッシャー アカウントが同じクレジット カードに関連付けられていたことが判明しました。テストアカウントで変更すると修正されました。ぐらぐら。

于 2012-10-12T15:38:47.647 に答える
0

基本的には、Google が製品リストを同期するのに時間がかかるためです。したがって、製品に変更を加えたり、新しいアイテムを追加したりした場合は、しばらく (1 時間程度) 待つと自動的に修正されます。

于 2012-10-16T13:51:10.150 に答える