如何仅在应用的一个版本中展示广告

How to only display ads in one version of your app

我正在计划我的应用程序的广告与无广告版本。我已经设置了两种应用风格。

在我的 XML 中,这个 AdMob tutorial 说我将其添加到我的 activity XML 以放置横幅广告:

<com.google.android.gms.ads.AdView
        android:id="@+id/admob_adview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_footer" />

然后在代码中,教程说:

public class MainActivity extends AppCompatActivity {

    private AdView mAdMobAdView;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAdMobAdView = (AdView) findViewById(R.id.admob_adview);
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .addTestDevice("4DD0986B8BB49093161F4F00CF61B887")// Add your real device id here
                .build();
        mAdMobAdView.loadAd(adRequest);


        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(), ActivityTwo.class));
            }
        });
    }
}

但是,如果我只想让这个广告在一种口味上展示,而不是在另一种口味上展示,那么在不违反任何规则的情况下正确的处理方式是什么?通常通过

之类的方式检查口味
if (BuildConfig.FLAVOR.equals("adfree")) {
    //no ads
}
else {
    //show ads
} 

我是否可以简单地将 adRequest 代码放在我的 Activity 中的上述 if 语句中?对于无广告版本,AdView 仍在我的 XML 中是否重要,还是我需要使用 XML 的单独副本和 AdView移除了吗?

此答案并非特定于 AdMob,因此可能存在与 AdMob 相关的选项或限制,导致此分析没有实际意义。

但是,恕我直言,在无广告应用中,您希望 AdMob 完全消失。你为什么要把它放在那里,占用 space,可能会因未初始化的视图而崩溃等等?这对您和您的用户来说似乎是不必要的成本。

这样做(参考你的两种口味 adaddfree):

第 1 步:对于特定于 AdMob 的依赖项,请使用 adCompile 而不是 compile

步骤 #2:在 ad/src/res/layout/ 中使用 AdMob AdView 的布局资源,在 adfree/src/res/layout 中使用具有相同名称的等效资源(这样您就可以重新设计没有广告占用 space)

步骤 #3:在 ad/adfree/ 源集中定义一个 AdStrategy 策略 class,具有相同的 public API,其中 ad/ 有与 AdMob 相关联的方法(例如初始化代码),而 adfree/ 只有空方法

第 4 步:在 MainActivity 以及您从 Java 与 AdMob 交互的任何其他地方,调用适当的 AdStrategy 方法,因此在 ad 构建中您将获得AdMob 的东西和 adfree 构建它什么都不做(或替代逻辑,如果合适)

现在您的 adfree 构建真正不含 AdMob,而不仅仅是 AdMob 未初始化。

对我来说,实现这一目标的最简单、最有效的方法是:

if (BuildConfig.FLAVOR.equals("adfree")) {
mAdMobAdView.setVisibility(View.GONE);}

else {mAdMobAdView.setVisibility(View.VISIBLE);} 

这将使adView完全进入无广告版本。