我正在计划我的应用的广告与无广告版本。我已经设置了两种应用程序风格。
在我的XML中,这个AdMob tutorial说我将其添加到我的活动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中是否重要,或者我是否需要在删除AdView
的情况下使用XML的单独副本?
答案 0 :(得分:5)
此答案并非针对AdMob,因此可能存在与AdMob相关的选项或限制,导致此分析失败。
但是,恕我直言,在无广告的应用中,你想让AdMob完全消失。你为什么要在那里烦恼,占用空间,可能会因未初始化的视图崩溃等等?对您和您的用户来说,这似乎是不必要的代价。
要做到这一点(指你的两种口味ad
和addfree
):
步骤1:对于AdMob特定的依赖关系,请使用adCompile
代替compile
步骤2:在AdView
中添加包含AdMob ad/src/res/layout/
的布局资源,并在adfree/src/res/layout
中使用相同名称的等效内容(这样您就可以重新设计没有广告占用空间)
步骤3:使用相同的公共API在AdStrategy
和ad/
源集中定义adfree/
策略类,其中ad/
具有方法( s)绑定到AdMob(例如初始化代码)和adfree/
只有空方法
步骤4:在MainActivity
以及您通过Java与AdMob进行互动的任何其他地方,请调用相应的AdStrategy
方法,因此在ad
版本中您可以获得AdMob内容并在{{ 1}}构建它什么都不做(或者替代逻辑,如果合适的话)
现在,您的adfree
版本确实无AdMob,而不仅仅是AdMob未初始化。
答案 1 :(得分:0)
对我而言,实现这一目标的最简单,最有效的方法是:
if (BuildConfig.FLAVOR.equals("adfree")) {
mAdMobAdView.setVisibility(View.GONE);}
else {mAdMobAdView.setVisibility(View.VISIBLE);}
这将使adView完全进入无广告版本。
答案 2 :(得分:-1)
您应该在{foo: "bar", john: "doe"}
中为您的口味设置不同的包:
app/build.gradle
然后你可以使用这个包:
productFlavors {
free {
applicationId "com.mycompany.myproduct.freeversion"
versionNameSuffix "-free"
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher_free"
]
}
paid {
applicationId "com.mycompany.myproduct.paidversion"
versionNameSuffix "-paid"
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher_paid"
]
}
}