如何仅在应用的一个版本中展示广告
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,可能会因未初始化的视图而崩溃等等?这对您和您的用户来说似乎是不必要的成本。
这样做(参考你的两种口味 ad
和 addfree
):
第 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完全进入无广告版本。
我正在计划我的应用程序的广告与无广告版本。我已经设置了两种应用风格。
在我的 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,可能会因未初始化的视图而崩溃等等?这对您和您的用户来说似乎是不必要的成本。
这样做(参考你的两种口味 ad
和 addfree
):
第 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完全进入无广告版本。