用户付费删除后,横幅是否继续显示?共享首选项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链接。