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

时间:2017-06-21 20:58:01

标签: android xml admob ads android-productflavors

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

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

3 个答案:

答案 0 :(得分:5)

此答案并非针对AdMob,因此可能存在与AdMob相关的选项或限制,导致此分析失败。

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

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

步骤1:对于AdMob特定的依赖关系,请使用adCompile代替compile

步骤2:在AdView中添加包含AdMob ad/src/res/layout/的布局资源,并在adfree/src/res/layout中使用相同名称的等效内容(这样您就可以重新设计没有广告占用空间)

步骤3:使用相同的公共API在AdStrategyad/源集中定义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"
        ]
    }
}