用户付费删除后,横幅是否继续显示?共享首选项java
如果用户付费删除横幅,我不想显示它。 当用户付费时,我有此功能:用户付费删除后,横幅是否继续显示?共享首选项java,java,android,admob,Java,Android,Admob,如果用户付费删除横幅,我不想显示它。 当用户付费时,我有此功能: void savepremium() { SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("plus&quo
void savepremium() {
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("plus", "2");
editor.apply();
String string = "Thanks";
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
}
在主要活动中添加或不添加横幅:
//admob
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
String plus = pref.getString("plus", "1");
assert plus != null;
if(plus.equals("1")) {
AdView adView = new AdView(MainActivity.this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId("ca-app-pub-xxx");
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
else {
AdView mAdView = findViewById(R.id.adView);
if (mAdView.getVisibility() == View.VISIBLE) {
mAdView.setVisibility(View.GONE);
}
}
以及xml:
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-xxx/xxx">
</com.google.android.gms.ads.AdView>
你知道为什么有些用户甚至在付费删除后仍抱怨横幅会出现吗?
非常感谢。最好的方法是在用户购买后删除视图。这样,您的所有视图也将重新对齐。同时刷新菜单项
if (getIsLicense() || BuildConfig.IsTestingON) {
RemoveView();
}
private void RemoveView() {
Log.d(TAG, "InsideRemoveView");
if (adView != null) {
LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout);
layout.removeView(adView);
}
if (Build.VERSION.SDK_INT >= 11)
this.invalidateOptionsMenu();
else
supportInvalidateOptionsMenu();
}
这可能不是问题所在,但如果要将可见性设置为“不可见”或“消失”,则不必首先检查它是否可见,您可以不使用
if
条件。此外,为了便于将来参考,在SharedReferences中还有类似于getInt()
,putInt()
和getBoolean()
,putBoolean()
的函数。与总是使用字符串相比,使用它们会稍微快一些。你是说有些用户能够看到广告。您仅在plus
等于“1”
时设置值,因此我认为,出于某种原因,它仍然将plus
中存储的值读取为1
。我认为这里没有什么问题。也许当用户重新安装应用程序,但已经支付了所有费用时,您显然会有一个功能来检查用户是否已支付,如果是这样的话,则更改值。该功能可能有问题。如果用户卸载或清除数据,则应该从后端服务器维护该状态,而不是通过共享首选项对其进行管理。您是如何使用savepremium()的?显示调用该方法的代码。我认为问题只在于此。另外,在代码的其他部分,只需编写mAdView.setVisibility(View.GONE);只有只需上传BillingClient的代码。@RGS我不知道您的问题是否已解决,但如果问题在BillingClient中,请查看此github链接。