如何正确去除广告内购
How to correctly Remove Ads In-App Purchase
我成功地在我的项目中实现了 Google 计费库。我添加了应用内购买以删除应用程序中的广告,我对其进行了测试并在购买后删除了广告,但是当插页式广告应该出现时(如果我购买了该商品则不应出现),我的应用程序崩溃了.
我注意到这种情况也发生在没有为删除广告付费的普通用户身上。
是否会发生这种情况,因为应用程序在 Google Play 上保存为草稿但未上线?我真的不想用这个可能的错误发布它,因为人们可能会觉得它很烦人,他们可能会永远卸载该应用程序。
如果是这个原因,请告诉我,在其他情况下,我将编辑我的 post 并在其中粘贴一些代码。
这是来自 LogCat 的内容:
05-05 22:23:52.660: E/AndroidRuntime(16730): FATAL EXCEPTION: main
05-05 22:23:52.660: E/AndroidRuntime(16730): Process: com.my.app, PID: 16730
05-05 22:23:52.660: E/AndroidRuntime(16730): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.gms.ads.InterstitialAd.isLoaded()' on a null object reference
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.my.app.GameActivity.run(GameActivity.java:211)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Handler.handleCallback(Handler.java:739)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Handler.dispatchMessage(Handler.java:95)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Looper.loop(Looper.java:145)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.app.ActivityThread.main(ActivityThread.java:5834)
05-05 22:23:52.660: E/AndroidRuntime(16730): at java.lang.reflect.Method.invoke(Native Method)
05-05 22:23:52.660: E/AndroidRuntime(16730): at java.lang.reflect.Method.invoke(Method.java:372)
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
我正在使用一个名为 "NOADS" 的布尔值来检查用户是否购买了商品:
private void itemPurchased() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = preferences.edit();
editor.putBoolean("NOADS", true);
editor.commit();
}
我为购买了以下产品的用户显示或隐藏广告:
public void addInMainActivity() {
if (!PreferenceManager.getDefaultSharedPreferences(this).getBoolean("NOADS", false)) {
AdView ad = (AdView) findViewById(R.id.adView);
ad.loadAd(new AdRequest.Builder().build());
// Create the interstitial.
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(getResources().getString(R.string.adInterstitialUnitId));
// Create ad request.
AdRequest adRequest = new AdRequest.Builder().build();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
} else {
((AdView) findViewById(R.id.adView)).setVisibility(View.GONE);
}
}
感谢您的帮助!
查看 GameActivity
的第 211 行。您正在呼叫 interstitial.isAdLoaded()
。
此时interstitial
为空。
我成功地在我的项目中实现了 Google 计费库。我添加了应用内购买以删除应用程序中的广告,我对其进行了测试并在购买后删除了广告,但是当插页式广告应该出现时(如果我购买了该商品则不应出现),我的应用程序崩溃了.
我注意到这种情况也发生在没有为删除广告付费的普通用户身上。
是否会发生这种情况,因为应用程序在 Google Play 上保存为草稿但未上线?我真的不想用这个可能的错误发布它,因为人们可能会觉得它很烦人,他们可能会永远卸载该应用程序。
如果是这个原因,请告诉我,在其他情况下,我将编辑我的 post 并在其中粘贴一些代码。
这是来自 LogCat 的内容:
05-05 22:23:52.660: E/AndroidRuntime(16730): FATAL EXCEPTION: main
05-05 22:23:52.660: E/AndroidRuntime(16730): Process: com.my.app, PID: 16730
05-05 22:23:52.660: E/AndroidRuntime(16730): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.gms.ads.InterstitialAd.isLoaded()' on a null object reference
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.my.app.GameActivity.run(GameActivity.java:211)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Handler.handleCallback(Handler.java:739)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Handler.dispatchMessage(Handler.java:95)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.os.Looper.loop(Looper.java:145)
05-05 22:23:52.660: E/AndroidRuntime(16730): at android.app.ActivityThread.main(ActivityThread.java:5834)
05-05 22:23:52.660: E/AndroidRuntime(16730): at java.lang.reflect.Method.invoke(Native Method)
05-05 22:23:52.660: E/AndroidRuntime(16730): at java.lang.reflect.Method.invoke(Method.java:372)
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
05-05 22:23:52.660: E/AndroidRuntime(16730): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
我正在使用一个名为 "NOADS" 的布尔值来检查用户是否购买了商品:
private void itemPurchased() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = preferences.edit();
editor.putBoolean("NOADS", true);
editor.commit();
}
我为购买了以下产品的用户显示或隐藏广告:
public void addInMainActivity() {
if (!PreferenceManager.getDefaultSharedPreferences(this).getBoolean("NOADS", false)) {
AdView ad = (AdView) findViewById(R.id.adView);
ad.loadAd(new AdRequest.Builder().build());
// Create the interstitial.
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(getResources().getString(R.string.adInterstitialUnitId));
// Create ad request.
AdRequest adRequest = new AdRequest.Builder().build();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
} else {
((AdView) findViewById(R.id.adView)).setVisibility(View.GONE);
}
}
感谢您的帮助!
查看 GameActivity
的第 211 行。您正在呼叫 interstitial.isAdLoaded()
。
此时interstitial
为空。