InApp android中的恢复功能
我已经在我的应用程序中实现了Inapp计费。为此,我使用了按钮。当我点击按钮时,它进入购买活动并购买产品。一旦购买了产品,按钮将不可见。另一个按钮将可见,允许用户打开产品。这一切都在完美地发生。但当我再次打开应用程序时,购买按钮是可见的。我不希望按钮一经购买就可见。如何使按钮在用于成功购买后不可见 StartUpActivity.javaInApp android中的恢复功能,android,in-app-purchase,in-app-billing,restore,Android,In App Purchase,In App Billing,Restore,我已经在我的应用程序中实现了Inapp计费。为此,我使用了按钮。当我点击按钮时,它进入购买活动并购买产品。一旦购买了产品,按钮将不可见。另一个按钮将可见,允许用户打开产品。这一切都在完美地发生。但当我再次打开应用程序时,购买按钮是可见的。我不希望按钮一经购买就可见。如何使按钮在用于成功购买后不可见 StartUpActivity.java public class StartUpActivity extends PurchaseActivity implements OnIabSetupFi
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");
}
}
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();
}
}
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;
}
}
MainActivity.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");
}
}
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();
}
}
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;
}
}
PurchaseActivity.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");
}
}
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();
}
}
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;
}
}
如果您使用的是API版本3,则可以在
onCreate()
中调用方法
此方法返回用户拥有的当前未消费的产品
这意味着,如果您的产品是非消费品,即用户只购买一次,那么您将在此处获得必要的信息
无法解释如何做得比官方文件更好。看一下这个主题,可以得到一个代码示例
基本上,您将收到一个自有SKU
(自有产品ID)列表,您所要做的就是在该列表上循环,使按钮不可见/可见
让我知道这是否是您想要的:)您使用的是什么应用内计费版本?谢谢您的解释。我会按照你解释的方式去做。我正在使用IAB 3是的,我正在使用API版本3。我有两种产品的两个按钮。如何在购买商品后永久禁用这两个按钮。但是我不知道如何实现getPurchase()方法。当我尝试使用查询采购项目时给出的代码。我在mservice得到的错误是“mservice无法解决”。你能帮我了解更多细节吗。我需要在哪个java类中调用这个方法。你能帮我拿一些吗code@user1903270,我想少了些什么!你是如何购买内容的,我的意思是,你把所有允许你购买东西的代码放在哪里了?剩下的代码与谷歌的示例代码一样。哼,请仔细看看示例代码中的
onCreate()
方法。将有一行mHelper.queryInventoryAsync(mGotInventoryListener)代码>此参数是负责向您返回所有所需信息的侦听器。。。通过查看示例,很容易理解该机制。让我知道你怎么样了!