2016-07-16 2 views
1

アプリ内購入時にアプリでAdMob広告を削除しようとしています。広告を非表示にして無効にするコードは既に用意されています。アプリ内課金も実装されています。ユーザーが購入した場合は、広告を非表示にして無効にする方法を見つける必要があります。SharedPreferencesを使用してアプリ内購入の広告を無効にする

私は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"); 
} 

...私はアプリをアップロードしました現在10回以上のGoogle Playアルファテストが行​​われており、2時間待つたびに少し不満を感じていますが、動作しません。 :Pヘルプ?ここで

答えて

3

adFree = true; 

ユーザーがをデフォルトにリセット取得adFree変数の値を閉じた後、再びアプリを開くときに問題を引き起こします。

購入が成功した場合SharedPreferencesでステータスを更新して、それを実行します。

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

adFreeためonCreate方法のチェックでのように:

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 
} 
+0

簡単な質問私はこれをテストする前に:なぜあなたがやります'getBoolean(" adFree "、false)'を使用するif文の広告を無効にしますか?真偽値は真ではありませんか? – wasimsandhu

+0

@wasimsandhu:はい、ユーザーが初めてアプリを起動したとき、または購入が完了していないときは、adFreeの値はfalseになり、 'getBoolean(" adFree "、false)'はfalseの代わりにfalseを返します。 –

+0

したがって、そのブロックでは、無効になっていない、そうですか? – wasimsandhu

関連する問題