我正在關注一個教程來編寫應用內結算項目,並且我設法使所有的都很好,但是當我想知道用戶是否購買了一個項目時,它總是虛假的,甚至當我測試它與其他設備有beta測試者帳戶。Android應用內結算購買的項目
這是我用什麼來獲得該項目購買:
mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
IabHelper.QueryInventoryFinishedListener mGotInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
// handle error here
}
else {
// does the user have the premium upgrade?
boolean mIsPremium = inventory.hasPurchase(ITEM_SKU);
// update UI accordingly
Toast.makeText(getApplicationContext(), "" + mIsPremium, Toast.LENGTH_LONG).show();
if(mIsPremium){
buy.setVisibility(View.INVISIBLE);
}
}
}
};
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
而這是購買該項目的代碼:當我測試的應用程序在真實設備
buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001,
new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
return;
} else if (purchase.getSku().equals(ITEM_SKU)) {
mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
buy.setVisibility(View.GONE);
} else {
}
}
});
}
}
});
}
}
}, "mypurchasetoken");
}
});
在我的測試版測試人員帳戶中,代碼在購買商品時工作正常,但是當我關閉應用並再次打開時,第一個代碼是帳戶沒有購買該商品。
儘管這可能是答案,但是這不是一個請求額外信息的評論?你正在回答一個問題。 – Bonatti
我可以修改爲「您可能正在使用這些產品......」,那會更好嗎? – marmor
我相信這樣。基本上,檢查這個答案的另一個用戶可以看到他們可能遇到的「最可能」類型的問題。消耗品不會顯示爲代碼錯誤,但會顯示相同的行爲。 – Bonatti