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

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的单独副本?

Com*_*are 5

此答案并非针对AdMob,因此可能存在与AdMob相关联的选项或限制,导致此分析无法实现.

但是,恕我直言,在无广告的应用程序中,您希望AdMob完全消失.你为什么要在那里烦恼,占用空间,可能会因未初始化的视图崩溃等等?这对您和您的用户来说似乎是不必要的代价.

要做到这一点(指你的两种口味adaddfree):

步骤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未初始化.