[英]Android in-app subscription: Inventory call returns purchase as null even if purchase exists
此問題非常類似於庫存和Android結算中 未返回的已購買訂閱 - 您擁有此項目時出錯,但其中提供的答案並未解決我的問題。
我有來自https://code.google.com/p/marketbilling/的最新代碼。 我簽名的apk已安裝在設備上,並作為草稿上傳到Play商店。 我的訂閱購買存在於Google電子錢包商戶中心,並顯示在queryPurchases和queryInventoryAsync中,但在我的PurchaseActivity中顯示為null。
此代碼來自IabHelper.java中的queryPurchases方法,並顯示購買信息:
for (int i = 0; i < purchaseDataList.size(); ++i) {
String purchaseData = purchaseDataList.get(i);
String signature = signatureList.get(i);
String sku = ownedSkus.get(i);
logDebug("Purchase Data: "+purchaseData);
if (Security.verifyPurchase(mSignatureBase64, purchaseData, signature)) {
logDebug("Sku is owned: " + sku);
Purchase purchase = new Purchase(itemType, purchaseData, signature);
logDebug("Purchase Data: "+purchase);
if (TextUtils.isEmpty(purchase.getToken())) {
logWarn("BUG: empty/null token!");
logDebug("Purchase data: " + purchaseData);
}
// Record ownership and token
inv.addPurchase(purchase);
logDebug("Get Purchase Data: "+ inv.getPurchase(sku));
}
else {
logWarn("Purchase signature verification **FAILED**. Not adding item.");
logDebug(" Purchase data: " + purchaseData);
logDebug(" Signature: " + signature);
verificationFailed = true;
}
}
此方法“queryInventoryAsync”來自IabHelper.java類並返回庫存信息:
public void queryInventoryAsync(final boolean querySkuDetails,
final List<String> moreSkus,
final QueryInventoryFinishedListener listener) {
final Handler handler = new Handler();
checkNotDisposed();
checkSetupDone("queryInventory");
flagStartAsync("refresh inventory");
(new Thread(new Runnable() {
public void run() {
IabResult result = new IabResult(BILLING_RESPONSE_RESULT_OK, "Inventory refresh successful.");
Inventory inv = null;
try {
inv = queryInventory(querySkuDetails, moreSkus);
}
catch (IabException ex) {
result = ex.getResult();
}
flagEndAsync();
final IabResult result_f = result;
final Inventory inv_f = inv;
if (!mDisposed && listener != null) {
handler.post(new Runnable() {
public void run() {
listener.onQueryInventoryFinished(result_f, inv_f);
logDebug("Result: "+ result_f.getResponse() + " inventory: "+ inv_f.getAllOwnedSkus().get(0));
}
});
}
}
})).start();
}
這來自我的PurchaseActivity:
IabHelper.QueryInventoryFinishedListener mInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
// Is it a failure?
if (result.isFailure()) {
Log.i(TAG, "Failed to query inventory: " + result);
return;
}else{
//This returns false
Log.i(TAG, "Query inventory was successful: " + inventory.hasPurchase(sku));
}
// Do we have the premium upgrade?
//This returns null
Purchase premiumPurchase = inventory.getPurchase(sku);
雖然queryPurchases和queryInventoryAsync顯示我的設備和電子郵件帳戶存在購買,但getPurchase(sku)將Purchase顯示為null並且hasPurchase(sku)返回false。
有沒有人有任何想法為什么會這樣? 謝謝!
我有同樣的問題並以這種方式解決了它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.