2014-11-11 3 views
0

Я внедряю приложение для Google Play. Я использую тестовый элемент: android.test.purchased и описал этот элемент как NONConsumable (не потребляя его в любом месте кода с помощью mHelper.consumeAsync). Во время запуска приложения после некоторых «перезапусков» и «принудительного закрытия», «переходя в автономный режим» и «офлайн в онлайн» где-то посередине, предмет снова становится потребляемым, и я могу купить товар. Это расходные материалы иногда и неиспользованные другие времена! Я ценю любое предложение. Мой код ниже:Неиспользуемый продукт для выставления счетов в приложениях иногда становится расходным - Google Play

... общественного класс Home расширяет активность {

... статической окончательной Строка ITEM_SKU = "android.test.purchased"; IabHelper mHelper;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 

} 
@Override 
protected void onStart() { 
    super.onStart(); 

    mHelper = new IabHelper(this, key); 

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener(){ 
     public void onIabSetupFinished(IabResult result){ 
      if (!result.isSuccess()){ 
       Log.d("setup", "NOT OK"); 
      } 
      else{ 
       Log.d("setup", "OK"); 
       List SKU_List = new ArrayList(); 
       SKU_List.add(ITEM_SKU); 
       mHelper.queryInventoryAsync(false, SKU_List, mQueryFinishedListener); 
      } 
     } 
    }); 
} 

IabHelper.QueryInventoryFinishedListener mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener(){ 
    @Override 
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 

     if (result.isFailure()) { 

      return; 
     } 

     try { 
      if (inventory.hasPurchase(ITEM_SKU)) { 

       buttonsInPremiumMode(); 

      } else { 

       buttonsNOTPremiumMode(); 
       String itemPrice = inventory.getSkuDetails(ITEM_SKU).getPrice(); 
       buyPremiumButton.setText(getResources().getString(R.string.buyPremiumButton) + itemPrice); 

      } 
     } 
     catch(Exception e){ 

     } 
    } 
}; 

private void purchase(){ 
    if (mHelper != null){ 
     mHelper.flagEndAsync(); 
     mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, mPurchaseFinishedListener, "payloadercode"); 
    } 
} 

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener(){ 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase){ 
     if (result.isFailure()){ 

     } 
     else if (purchase.getSku().equals(ITEM_SKU)){ 
      buttonsInPremiumMode(); 
     } 
     else { 
     } 
    } 
}; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) { 
     mHelper.dispose(); 
    } 
    mHelper=null; 
} 
private void buttonsNOTPremiumMode(){ 
    ... 
} 

private void buttonsInPremiumMode(){ 
    ... 
} 

}

ответ

0

Ввод mHelper.flagEndAsync() непосредственно перед mHelper.launchPurchaseFlow фиксированная моя проблема.