Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
InApp android中的恢复功能_Android_In App Purchase_In App Billing_Restore - Fatal编程技术网

InApp android中的恢复功能

InApp 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

我已经在我的应用程序中实现了Inapp计费。为此,我使用了按钮。当我点击按钮时,它进入购买活动并购买产品。一旦购买了产品,按钮将不可见。另一个按钮将可见,允许用户打开产品。这一切都在完美地发生。但当我再次打开应用程序时,购买按钮是可见的。我不希望按钮一经购买就可见。如何使按钮在用于成功购买后不可见

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");
}
}
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)此参数是负责向您返回所有所需信息的侦听器。。。通过查看示例,很容易理解该机制。让我知道你怎么样了!