ここで何が起こっているのかわかりませんが、以下のようなコードで広告ユニット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);
プログラムで作成する
_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にある場合、setAdUnitId
programaticallyにできません。
3-xmlで「setAdUnitId」を使用しない場合、_Required xml attribute adUnitId was missing
_がアラートになります。両方の属性をプログラムで設定しても、adSize
でも同じです。
4-setAdUnitId
とsetSize
を入れてプログラムで入れない場合、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);
_
私は長い間バナーを使用しており、その答えは私にとって良いことです。
xmlns:ads="http://schemas.Android.com/apk/res-auto"
これで私の問題が解決しました。
これを使用しないでください
xmlns:ads="http://schemas.Android.com/tools"
これをレイアウトに追加します
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"
広告ユニット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
試した後、
問題は以下によって解決されます
xmlns:ads="http://schemas.Android.com/apk/res-auto"
行を削除しています。次のように広告ユニットIDと広告サイズを指定します。
app:adSize="SMART_BANNER" app:adUnitId="@string/banner_ad_unit_id"
私の場合、広告タイプは次のように設定していました。
ads:adSize="Banner"
それはすべて大文字になりますが:
ads:adSize="BANNER"