восстановить функциональность в InApp android

Я реализовал Inapp Billing в своем приложении. Для этого я использовал кнопки. когда я нажимаю кнопку, он переходит к покупке и покупает продукт. как только он купит продукт, кнопка станет невидимой. и другая кнопка будет видна, что позволит пользователю открыть продукт. Все происходит отлично. Но когда я снова открываю приложение, видна кнопка покупки. Я не хочу, чтобы кнопка была видна после ее покупки. как сделать кнопку невидимой после ее использования для успешной покупки.

StartUpActivity.java

public class StartUpActivity extends PurchaseActivity implements   OnIabSetupFinishedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   Log.d("App started");
}
@Override
public void onIabSetupFinished(IabResult result) {
    if (result.isSuccess()) {
        Log.d("In-app Billing set up" + result);
        dealWithIabSetupSuccess();
    } else {
        Log.d("Problem setting up In-app Billing: " + result);
        dealWithIabSetupFailure();
    }
}
@Override
protected void dealWithIabSetupSuccess() {
    navigate().toMainActivity();
    finish();
}
@Override
protected void dealWithIabSetupFailure() {
    popBurntToast("Sorry In App Billing isn't available on your device");
}
}

MainActivity.java

public class MainActivity extends BlundellActivity implements MainMenu {
public Button topicsbutton;
public Button mediabutton;
public Button purchasetopicsbutton;
public Button purchasemediabutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    topicsbutton = (Button) findViewById(R.id.button1a);
    mediabutton = (Button) findViewById(R.id.button2a);
    purchasetopicsbutton = (Button) findViewById(R.id.button1);
    purchasemediabutton = (Button) findViewById(R.id.button2);
}
@Override
public void onTopicsPurchaseItemClick(View v) {
    navigate().toPurchaseTopicsActivityForResult();
}
@Override
public void onMediaPurchaseItemClick(View v) {
    navigate().toPurchaseMediaActivityForResult();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (Navigator.REQUEST_TOPICS_PURCHASE == requestCode) {
        if (RESULT_OK == resultCode) {
            dealWithSuccessfulTopicsPurchase();
        } else {
            dealWithFailedTopicsPurchase();
        }
    }        else if (Navigator.REQUEST_MEDIA_PURCHASE == requestCode) {
        if (RESULT_OK == resultCode) {
            dealWithSuccessfulMediaPurchase();
        } else {
            dealWithFailedMediaPurchase();
        }
    }
}
public void dealWithSuccessfulTopicsPurchase() {
    Log.d("Topics purchased");
    popToast("Topics purchased");
    topicsbutton.setVisibility(View.VISIBLE);
    purchasetopicsbutton.setVisibility(View.INVISIBLE);

}
private void dealWithSuccessfulMediaPurchase() {
    Log.d("Media purchased");
    popToast("Media purchased");
    mediabutton.setVisibility(View.VISIBLE);
    purchasemediabutton.setVisibility(View.INVISIBLE);

}
private void dealWithFailedTopicsPurchase() {
    Log.d("Topics purchase failed");
    popToast("Failed to purchase Topics");
}
private void dealWithFailedMediaPurchase() {
    Log.d("Media purchase failed");
    popToast("Failed to purchase Media");
}
public void TopicsOpen(View v) {
    navigate().toTopicsopen();
}
public void MediaOpen(View v) {
    navigate().toMediaopen();
}
}

PurchaseActivity.java

 public abstract class PurchaseActivity extends BlundellActivity implements OnIabSetupFinishedListener, OnIabPurchaseFinishedListener {
private IabHelper billingHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_purchase);
    setResult(RESULT_CANCELED);
    billingHelper = new IabHelper(this, AppProperties.BASE_64_KEY);
    billingHelper.startSetup(this);
}
@Override
public void onIabSetupFinished(IabResult result) {
    if (result.isSuccess()) {
        Log.d("In-app Billing set up" + result);
        dealWithIabSetupSuccess();
    } else {
        Log.d("Problem setting up In-app Billing: " + result);
        dealWithIabSetupFailure();
    }
}
protected abstract void dealWithIabSetupSuccess();
protected abstract void dealWithIabSetupFailure();
protected void purchaseItem(String sku) {
    billingHelper.launchPurchaseFlow(this, sku, 123, this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    billingHelper.handleActivityResult(requestCode, resultCode, data);
}
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
    if (result.isFailure()) {
        dealWithPurchaseFailed(result);
    } else if (Items.SKU1.equals(info.getSku())) {
        dealWithTopicsPurchaseSuccess(result, info);
    }
    else if (Items.SKU2.equals(info.getSku())) {
        dealWithMediaPurchaseSuccess(result, info);
    }
    finish();
}
protected void dealWithPurchaseFailed(IabResult result) {
    Log.d("Error purchasing: " + result);
}
protected void dealWithTopicsPurchaseSuccess(IabResult result, Purchase info) {
    Log.d("Item purchased: " + result);
}
protected void dealWithMediaPurchaseSuccess(IabResult result, Purchase info) {
    Log.d("Item purchased: " + result);
    billingHelper.consumeAsync(info, null);
}
@Override
protected void onDestroy() {
    disposeBillingHelper();
    super.onDestroy();
}
private void disposeBillingHelper() {
    if (billingHelper != null) {
        billingHelper.dispose();
    }
    billingHelper = null;
}
}

person user1903270    schedule 20.06.2013    source источник
comment
Какую версию биллинга в приложении вы используете?   -  person yugidroid    schedule 21.06.2013


Ответы (1)


Если вы используете API версии 3, вы можете вызвать getPurchases() метод на onCreate().

Этот метод возвращает текущие неиспользованные продукты, принадлежащие пользователю.

Это означает, что если ваш продукт не является расходуемым, т. Е. Пользователь купит его только один раз, тогда у вас будет необходимая информация прямо здесь.

Не могу объяснить, как это сделать лучше, чем в официальной документации. Ознакомьтесь с разделом Запрос приобретенных товаров, чтобы получить пример кода.

По сути, вы получите список ownedSkus (собственных идентификаторов продуктов), и все, что вам нужно сделать, это прокрутить этот список и сделать ваши кнопки невидимыми/видимыми.

Дайте мне знать, если это то, что вы искали :)

person yugidroid    schedule 20.06.2013
comment
Спасибо за объяснение. попробую как вы объяснили. Я использую IAB 3 - person user1903270; 21.06.2013
comment
Да, я использую API версии 3. у меня есть две кнопки для двух продуктов. как навсегда отключить эти две кнопки после покупки предмета. Но я не уверен, как реализовать метод getPurchase(). когда я пытаюсь использовать код, указанный в разделе «Запрос на покупку». я получаю сообщение об ошибке в mservice, так как mService не может быть разрешен. Не могли бы вы помочь мне с некоторыми деталями. В каком классе Java мне нужно вызвать этот метод. можешь помочь мне с кодом - person user1903270; 26.06.2013
comment
@ user1903270, я думаю, чего-то не хватает! Как вы сделали, чтобы купить контент, я имею в виду, куда вы поместили весь код, который позволяет вам что-то покупать? - person yugidroid; 26.06.2013
comment
Остальной код такой же, как и в примере кода из Google. - person user1903270; 27.06.2013
comment
Хм, взгляните лучше на метод onCreate() из примера кода. Там будет строка mHelper.queryInventoryAsync(mGotInventoryListener); и этот параметр является ответственным слушателем, чтобы вернуть вам всю необходимую информацию... Очень легко понять механизм, глядя на образец. Дайте мне знать, как вы идете! - person yugidroid; 27.06.2013
comment
Спасибо всем . Я решил проблему, используя пример кода из Google. - person user1903270; 04.07.2013