2017-06-21 13 views
0

私のアプリの広告なし版に対して計画しています。私はすでに2つのアプリのフレーバーを設定しています。アプリの1つのバージョンにのみ広告を表示する方法

<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)); 
      } 
     }); 
    } 
} 

しかし、もし私のXMLで

、この AdMob tutorialは私がバナー広告を保持するために、私の活動のXMLにこれを追加すると言いますこの広告を1つのフレーバーと他のフレーバーで表示したいだけですが、ルールに違反することなくこれを処理する正しい方法は何ですか?通常のフレーバーは、私は単に私の活動の中に上記のif文で adRequestコードを置く

if (BuildConfig.FLAVOR.equals("adfree")) { 
    //no ads 
} 
else { 
    //show ads 
} 

のようなものを経由してチェックされますか?広告なしのバージョンの場合、AdViewが依然として自分のXML内にあるかどうか、またはAdViewを削除して別のXMLコピーを使用する必要がありますか?

答えて

4

この回答はAdMobに固有のものではありません。そのため、AdMobに関連するオプションや制限があり、この分析が問題になることがあります。

しかし、IMHOは、広告なしのアプリでは、AdMobが完全に消えたがっています。なぜあなたはそこにそれを持ち込み、スペースを取って、おそらく初期化されていないビューなどでクラッシュするのでしょうか?それはあなたとあなたのユーザーには不必要なコストのように思えます。

ステップ#1:持ってレイアウトリソース(:AdMobの固有の依存関係の場合に、adCompile代わりのcompile

ステップ#2を使用します(あなたの2種類adaddfreeを参照)ことを行うには

を定義します。adfree/src/res/layoutで同じ名前を持つ同等物(あなたがスペースを取って何の広告を持っていない周りの再設計することができます)

ステップ#3とad/src/res/layout/でのAdMob AdViewとS)、戦略ad/つの方法(複数可)(例えばその初期化コードのような)AdMobに縛らを有する同じパブリックAPI、の両方ad/adfree/ソースセット内のクラス、およびadfree/一つだけの空の方法

ステップを有します#4:あなたは、JavaからのAdMobとの対話のどこMainActivityとでは、今

あなたはAdMobのものを入手構築するadにおけるので、適切なAdStrategyメソッドを呼び出し、(適切な場合、または代替ロジック)adfreeで、それは何もしません構築しますadfreeのビルドは、AdMobを初期化していないだけでなく、本当にAdMobを無料で使用できます。

+0

「adCompile」とは何ですか?私はGoogleでこれを見ていません – KaliMa

+0

@KaliMa: 'compile'の前に任意のビルドタイプ、プロダクトフレーバー、またはビルドバリアントを付けて、コンパイルの対象をそのターゲットに限定することができます。したがって、 'ad'という製品風味の場合、' adCompile'はその依存関係を 'ad'製品フレーバーに限定し、他の製品フレーバーではスキップされます。 [ドキュメント](https://developer.android.com/studio/build/build-variants.html#dependencies)を参照してください。 – CommonsWare

+0

'adfree/src/res/layout'と言うと、私は' app/src/'しかないようです(メインの' src'フォルダは1つだけです)。手動でフォルダを追加する必要がありますか?他のファイルは?私が例を見ることができるドキュメンテーションの名前はありますか? – KaliMa

-1

あなたは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" 
     ] 
    } 
} 

その後、パッケージを使用することができます。これを達成するための最も簡単で効果的な方法は次のようになり、私のために

String packageName = getPackageName(); 
String PACKAGE_PAID = "com.mycompany.myproduct.paidversion" 
boolean showAds = !PACKAGE_PAID.equals(packageName); 
+0

Downvoted - 私はフレーバーを既に設定していて、どのフレーバーが使用中であるかを調べることができます(if-statementコードを参照)。これは私の広告統合の問題とは無関係です – KaliMa

0

を:

if (BuildConfig.FLAVOR.equals("adfree")) { 
mAdMobAdView.setVisibility(View.GONE);} 

else {mAdMobAdView.setVisibility(View.VISIBLE);} 

これにより、adViewは完全に広告なしrsion。