Kal*_*iMa 1 xml android ads admob android-productflavors
我正在计划我的应用的广告与无广告版本.我已经设置了两个app风格.
在我的XML中,这个AdMob教程说我将其添加到我的活动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" />
Run Code Online (Sandbox Code Playgroud)
然后在代码中,教程说:
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));
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我只希望这个广告在一种风格上与另一种风格显示,那么在不违反任何规则的情况下处理这种风格的正确方法是什么?通常会通过类似的方式检查口味
if (BuildConfig.FLAVOR.equals("adfree")) {
//no ads
}
else {
//show ads
}
Run Code Online (Sandbox Code Playgroud)
我只是将adRequest代码放在我的Activity中的上述if语句中吗?对于无广告版本,AdView仍然在我的XML中是否重要,或者我是否需要使用已AdView删除的XML的单独副本?
此答案并非针对AdMob,因此可能存在与AdMob相关联的选项或限制,导致此分析无法实现.
但是,恕我直言,在无广告的应用程序中,您希望AdMob完全消失.你为什么要在那里烦恼,占用空间,可能会因未初始化的视图崩溃等等?这对您和您的用户来说似乎是不必要的代价.
要做到这一点(指你的两种口味ad和addfree):
步骤1:对于AdMob特定的依赖项,请使用adCompile而不是compile
步骤2:将AdMob AdView中的布局资源放入其中ad/src/res/layout/,使用相同名称的等效项adfree/src/res/layout(因此您可以重新设计没有广告占用空间)
步骤#3:使用相同的公共API在源集和源集中定义AdStrategy策略类,其中一个具有与AdMob绑定的方法(例如该初始化代码),并且具有空方法ad/adfree/ad/adfree/
步骤#4:在MainActivity您与Java的AdMob交互的任何其他地方,调用适当的AdStrategy方法,因此在ad构建中您获得AdMob内容并且在adfree构建中它不执行任何操作(或者替代逻辑,如果适用)
现在,您的adfree构建版本确实无AdMob,而不仅仅是AdMob未初始化.