web-dev-qa-db-ja.com

プログラムで設定する場合、loadAdの前に広告サイズと広告ユニットIDを設定する必要があります

ここで何が起こっているのかわかりませんが、以下のようなコードで広告ユニットIDを動的に設定し、XMLから削除しようとしていますが、それでもエラーが発生します:

LoadAdが呼び出される前に、広告サイズと広告ユニットIDを設定する必要があります。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:ads="http://schemas.Android.com/apk/res-auto"
       <com.google.Android.gms.ads.AdView
            Android:id="@+id/adView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerHorizontal="true"
            Android:layout_alignParentBottom="true"
            ads:adSize="SMART_BANNER">
        </com.google.Android.gms.ads.AdView>

そして

    AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
    mAdView.setAdUnitId(getEvent().getAdMobUnitId());
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
33
Mike Flynn

プログラムで作成する

_View adContainer = findViewById(R.id.adMobView);

AdView mAdView = new AdView(context);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(YOUR_BANNER_ID);
((RelativeLayout)adContainer).addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
_

そしてあなたのxmlファイルで

_<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

        <RelativeLayout 
            Android:id="@+id/adMobView"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_alignParentBottom="true"/>

</RelativeLayout>
_

[〜#〜] edit [〜#〜]

バナーのベストプラクティスは、2つのビューごとに1つのバナーを表示することです(1つはunitId)。同じ画面でさらにバナーを表示する場合(推奨されません)、 から別のunitIdを作成する必要がありますconsole および各unitIdに1つのadView。

私の答えは:

バグなのか、adViewごとにunitIdを1つしか持てないのかわかりません。adViewごとにunitIdを1つしか持てず、 docs 新しいAdView()をインスタンス化し、unitIdsおよびsizes ORをプログラムで設定することにより、XMLからのみ実行する2つの方法を示します。

そして、私はこの結論に到達するためにいくつかのテストを行いました。

_com.google.Android.gms.ads.AdView_からfindViewByIdを使用して

1-最初にsetAdUnitIdを設定すると、プログラムでadSizeを使用できます。

2-既にxmlにある場合、setAdUnitIdprogramaticallyにできません。

3-xmlで「setAdUnitId」を使用しない場合、_Required xml attribute adUnitId was missing_がアラートになります。両方の属性をプログラムで設定しても、adSizeでも同じです。

4-setAdUnitIdsetSizeを入れてプログラムで入れない場合、adViewは_Required xml attribute adUnitId was missing_を警告し、xmlでadSizeを設定しない場合も同じことを警告します。

5-プログラムで実行できる唯一のことは、mAdView.loadAd(adRequest)を呼び出して広告をロードすることです

new AdView()を使用して

1-空のレイアウトを作成し、このビューにadView参照を追加すると機能します。

2-プログラムでadSizeおよびadUnitIdを設定できます。

3- setAdUnitAdを2回使用しようとすると、findViewByIdで使用する場合と同じように、この例外は_The ad unit ID can only be set once on AdView._を起動します。

私の結論は次のとおりです。

XMLからのみ使用できます」

_<com.google.Android.gms.ads.AdView
Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-my_id_number_was_ommited_by_security" />
_

onCreateでのビューの読み込み

_AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
_

またはプログラムでフル

_View adContainer = findViewById(R.id.adMobView);
AdView mAdView = new AdView(context);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(YOUR_BANNER_ID);
adContainer.addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
_

私は長い間バナーを使用しており、その答えは私にとって良いことです。

52
diogojme
xmlns:ads="http://schemas.Android.com/apk/res-auto" 

これで私の問題が解決しました。

これを使用しないでください

xmlns:ads="http://schemas.Android.com/tools" 
8
anwar alam

これをレイアウトに追加します

xmlns:ads="http://schemas.Android.com/apk/res-auto" 

私はこのようにしました

<LinearLayout xmlns:ads="http://schemas.Android.com/apk/res-auto"
          xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:layout_width="match_parent"
          Android:layout_height="match_parent"
          Android:orientation="vertical">



<LinearLayout
    Android:id="@+id/ll_main_screen_container"
    Android:layout_width="match_parent"
    Android:gravity="center"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"/>

</LinearLayout>

コードで

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newone);
    initAdsAccount();
    initAds();
}

private void initAdsAccount()
{
    String accountId = AdsConstants.my_fake_ads_account_id;

    if (AdsConstants.isAdsMode)
    {
        accountId = AdsConstants.my_ads_account_id;
    }

    MobileAds.initialize(this, accountId);
}

private void initAds()
{
    findViewById(R.id.ll_main_screen_container).post(//
            new Runnable()
            {
                @Override
                public void run()
                {
                    LinearLayout adContainer = findViewById(R.id.ll_main_screen_container);
                    AdView mAdView = new AdView(MainActivity.this);
                    mAdView.setAdSize(AdSize.BANNER);

                    if (AdsConstants.isAdsMode)
                    {
                        mAdView.setAdUnitId(AdsConstants.main_screen_bottom_banner_id);
                    }
                    else
                    {
                        mAdView.setAdUnitId(AdsConstants.fake_banner_id);
                    }

                    adContainer.addView(mAdView);
                    AdRequest adRequest = new AdRequest.Builder().build();
                    mAdView.loadAd(adRequest);
                }
            }//
    );
}

あなたが持っています

Android:layout_width="wrap_content"
Android:layout_height="wrap_content"

From: https://developers.google.com/admob/Android/banner#smart_banners

注:レイアウトのスマートバナービューは、デバイスの幅全体を使用する必要があります。そうでない場合は、「広告を表示するのに十分なスペースがありません」というメッセージとともに警告が表示され、バナーは表示されません。

に変更する

Android:layout_width="match_parent"

そして、xmlファイルにadUnitIDを設定します。

ads:adUnitId="AD_UNIT_ID"
1
Morrison Chang

広告ユニットIDをXMLで設定してみてください

ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"

いいね

ads:adUnitId="ca-app-pub-3940256099942544/6300978"

または、詳細についてはリンクを見つけてください https://developers.google.com/admob/Android/quick-start

0
Rohit Patil

試した後、

  1. XMLからのみadunit IDとadsizeを指定します。
  2. .Javaファイルのみからadunit IDとadsizeを指定します。

問題は以下によって解決されます

  1. ルートレイアウトからxmlns:ads="http://schemas.Android.com/apk/res-auto"行を削除しています。
  2. 次のように広告ユニットIDと広告サイズを指定します。

    app:adSize="SMART_BANNER" app:adUnitId="@string/banner_ad_unit_id"

    1. アプリをクリーンにして実行します。
0
Shweta Bhagat

私の場合、広告タイプは次のように設定していました。

ads:adSize="Banner"

それはすべて大文字になりますが:

ads:adSize="BANNER"
0