使用 SharedPreferences 禁用应用内购买广告

Using SharedPreferences to disable ads on in-app purchase

我正在尝试在应用内购买时删除应用中的 AdMob 广告。我已经有了隐藏和禁用广告的代码。我还实施了应用内结算。如果用户进行了购买,我只需要找到一种方法来隐藏和禁用广告。

我在 SharedPreferences 中存储了一个布尔值,在应用内购买成功后,应该会永久删除应用中的广告。 这有效,但是当应用程序关闭并重新打开时,广告又回来了,您无法再次进行购买。

onCreate()方法中:

    mHelper = new IabHelper(this, base64EncodedPublicKey);

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {

            } else {

            }
        }
    });

    prefs = this.getSharedPreferences("com.wsandhu.conjugation", Context.MODE_PRIVATE);

    if (adFree) {
        prefs.edit().putBoolean("adFree", true).commit();
    } else {
        adFree = prefs.getBoolean("adFree", false);
    }

应用内结算实施:

/* FOR IN-APP BILLING */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener  =
        new IabHelper.OnIabPurchaseFinishedListener() {
            public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
                if (result.isFailure()) {
                    // Handle error
                    return;
                } else if (purchase.getSku().equals(ITEM_SKU)) {

                    // Sets purchased boolean to true
                    adFree = true;

                    // Restart app
                    Intent i = getBaseContext().getPackageManager()
                            .getLaunchIntentForPackage( getBaseContext().getPackageName() );
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
            }
        };

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

        if (result.isFailure()) {
            // Handle failure
        } else {
            Purchase purchase = inventory.getPurchase(ITEM_SKU);
            if (purchase != null) {

            } else {

            }
        }
    }
};

public void buyFullVersion() {
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
            mPurchaseFinishedListener, "mypurchasetoken");
}

我真的不知道我做错了什么...我已经将应用程序上传到 Google 玩 alpha 测试十多次了,每次我都感到有点沮丧我等了两个小时,但它不起作用。 :P 帮助?

这里:

adFree = true;

当用户在关闭后再次打开应用程序时出现问题 adFree 变量值重置为默认值

购买成功后,在 SharedPreferences 中更新状态:

  ...
 }else if (purchase.getSku().equals(ITEM_SKU)) {
     //save value in SharedPreferences here
       prefs.edit().putBoolean("adFree", true).commit();
  }

并在 onCreate 方法中检查 adFree 为:

prefs = this.getSharedPreferences("com.wsandhu.conjugation",Context.MODE_PRIVATE);

if(prefs.contains("adFree")){
  if(prefs.getBoolean("adFree", false)){
     // disable ads here
   }else{
      // enable ads here
    }
}else{
  // enable ads
}