Я внедряю приложение для 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(){
...
}
}