だから私はアンドロイド課金ライブラリを使用していて、この小さなセットアップを持っています:
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!
私はどこかで何かを逃していますか?それはすべて非常に簡単に思えました。
私は見ました:
定期的な問題のようですので、私はそれをどのように理解するかについてあなたに最新情報を提供します
編集:開発コンソールからアプリを削除できないため、削除/追加が機能しませんでした。