Android Google应用内计费V2测试还原事务
我正在为黑莓应用内计费开发Android运行时,他们支持谷歌应用内计费版本2,所以我需要使用版本2,而不是版本3 管理矿山项目 我一直在测试恢复事务部分 1) 如何测试它 2) 我们可以用“android.test.purchased”进行测试吗?如果可以,如何测试 3) 恢复事务(已购买项目)的流程如何 4) 根据我的理解,当我们请求购买和恢复购买的物品时,会调用onPurchaseStateChange一次。我的理解正确吗 我已经查看了官方开发者网站,但我有点困惑 这里是我被卡住的主要代码部分Android Google应用内计费V2测试还原事务,android,in-app-purchase,in-app-billing,blackberry-android,Android,In App Purchase,In App Billing,Blackberry Android,我正在为黑莓应用内计费开发Android运行时,他们支持谷歌应用内计费版本2,所以我需要使用版本2,而不是版本3 管理矿山项目 我一直在测试恢复事务部分 1) 如何测试它 2) 我们可以用“android.test.purchased”进行测试吗?如果可以,如何测试 3) 恢复事务(已购买项目)的流程如何 4) 根据我的理解,当我们请求购买和恢复购买的物品时,会调用onPurchaseStateChange一次。我的理解正确吗 我已经查看了官方开发者网站,但我有点困惑 这里是我被卡住的主要代码部
private class DungeonsPurchaseObserver extends PurchaseObserver {
public DungeonsPurchaseObserver(Handler handler) {
super(BlackBerryInAppPurchaseActivity.this, handler);
}
@Override
public void onBillingSupported(boolean supported, String type) {
if (Consts.DEBUG) {
Log.i(TAG, "supported: " + supported);
}
Toast.makeText(getApplicationContext(), " billing supported: " + supported, 2000).show();
if (type == null || type.equals(Consts.ITEM_TYPE_INAPP)) {
if (supported) {
restoreDatabase();
} else {
showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
}
} else {
showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
}
}
@Override
public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, int quantity, long purchaseTime, String developerPayload) {
if (Consts.DEBUG) {
Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState);
}
Toast.makeText(getApplicationContext(), "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState, 2000).show();
if (purchaseState == PurchaseState.PURCHASED) {
//Update the UI -unlock app
updateUI();
Toast.makeText(getApplicationContext(), "Purchased Update the Ui " + purchaseState, 2000).show();
mOwnedItems.add(itemId);
//Toast.makeText(getApplicationContext(), "Hiding the button as the item is purchased " + itemId + " " + purchaseState, 2000).show();
}
//mOwnedItemsCursor.requery();
Toast.makeText(getApplicationContext(), "SKU IS " + mSku, 2000).show();
if (itemId.equals(mSku)) {
switch (purchaseState) {
case PURCHASED:
Toast.makeText(getApplicationContext(), " Purchased itemId: " + itemId + " " + purchaseState, 2000).show();
break;
default:
Toast.makeText(getApplicationContext(), " Item NOT Purchased itemId: " + itemId + " " + purchaseState, 2000).show();
break;
}
}
}
@Override
public void onRequestPurchaseResponse(RequestPurchase request, ResponseCode responseCode) {
if (Consts.DEBUG) {
Log.d(TAG, request.mProductId + ": " + responseCode);
}
// Toast.makeText(getApplicationContext(), "request.mProductId " + responseCode, 2000).show();
if (responseCode == ResponseCode.RESULT_OK) {
if (Consts.DEBUG) {
Log.i(TAG, "purchase was successfully sent to server");
}
Toast.makeText(getApplicationContext(), "purchase was successfully sent to server" + responseCode, 2000).show();
logProductActivity(request.mProductId, "sending purchase request");
} else if (responseCode == ResponseCode.RESULT_USER_CANCELED) {
if (Consts.DEBUG) {
Log.i(TAG, "user canceled purchase");
}
logProductActivity(request.mProductId, "dismissed purchase dialog");
} else {
if (Consts.DEBUG) {
Log.i(TAG, "purchase failed");
}
Toast.makeText(getApplicationContext(), "purchase failed" + responseCode, 2000).show();
logProductActivity(request.mProductId, "request purchase returned " + responseCode);
}
}
@Override
public void onRestoreTransactionsResponse(RestoreTransactions request, ResponseCode responseCode) {
if (responseCode == ResponseCode.RESULT_OK) {
if (Consts.DEBUG) {
Log.d(TAG, "completed RestoreTransactions request");
}
Toast.makeText(getApplicationContext(), "completed RestoreTransactions request " + responseCode, 2000).show();
// Update the shared preferences so that we don't perform
// a RestoreTransactions again.
SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(DB_INITIALIZED, true);
edit.commit();
} else {
if (Consts.DEBUG) {
Log.d(TAG, "RestoreTransactions error: " + responseCode);
}
Toast.makeText(getApplicationContext(), "RestoreTransactions error: " + responseCode, 2000).show();
}
}
}
编辑:
这是android开发者的官方网站:
/**
* Request type is RESTORE_TRANSACTIONS
*/
Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS");
request.putLong(REQUEST_NONCE, mNonce);
Bundle response = mService.sendBillingRequest(request);
// Do something with this response.
}
您应该阅读标题“还原事务信息(还原\u事务)”下的文档,您可以在此处找到:
所以你的意思是我需要将此作为SKU发送,而不是“android.test.purchased”?是的!;)这是测试SKU,如果您的应用内购买将被退款。但我不想要退款,我想还原我购买的物品抱歉,我以为您是指使用还原进行退款。我更新了我的代码,我想这就是你要找的,你给的代码是第3版的,我正在做的是第2版的,