facebook twitter hatena line email

「Android/広告組込/google/admob/バナー」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(TestDevice)
("java.lang.IllegalStateException: The ad size can only be set once on AdView."エラーが出る場合)
行131: 行131:
 
=="java.lang.IllegalStateException: The ad size can only be set once on AdView."エラーが出る場合==  
 
=="java.lang.IllegalStateException: The ad size can only be set once on AdView."エラーが出る場合==  
 
2回以上AdSizeを設定しているので、一度入れたら設定しないようにする。
 
2回以上AdSizeを設定しているので、一度入れたら設定しないようにする。
 +
mAdView = new AdView(this);
 
  if (mAdView.getAdSize() == null) {
 
  if (mAdView.getAdSize() == null) {
 
     mAdView.setAdSize(AdSize.BANNER);
 
     mAdView.setAdSize(AdSize.BANNER);

2020年1月15日 (水) 10:51時点における版

公式

https://developers.google.com/admob/android/banner?hl=ja

レイアウト

main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity">

        <TextView android:text="@string/hello_world"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <com.google.android.gms.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            ads:adSize="BANNER"
            ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
        </com.google.android.gms.ads.AdView>

</RelativeLayout>

サイズ設定とunitId設定

AdView adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");

ロード処理

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}

イベント周り

mAdView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    @Override
    public void onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

    @Override
    public void onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    @Override
    public void onAdClosed() {
        // Code to be executed when the user is about to return
        // to the app after tapping on an ad.
    }
});

AdManagerからAdMobへ変換

  • setAdSizes()をsetAdSize()へ
  • com.google.android.gms.ads.doubleclick.PublisherAdView を com.google.android.gms.ads.AdView へ
  • com.google.android.gms.ads.doubleclick.PublisherAdRequest を com.google.android.gms.ads.AdRequest へ
  • PublisherAdRequestをAdRequestへ
  • PublisherInterstitialAdをInterstitialAdへ

タブレットのサイズ

タブレット端末のディスプレイサイズのdisplaysize.y + 1まで広告は表示されるが、displaysize.y + 2で表示されなくなり、"Ad failed to load : 1"のエラーログが発生するようになる。

ディスプレイサイズの定義はここらへん参考に https://akira-watson.com/android/theme-notitlebar.html

TestDevice

テスト端末として認識させる。idは端末ごとに違う。admobに接続してlogcatで確認できる。

AdRequest request = new AdRequest.Builder()
.addTestDevice("33BE2250B43518CCDA7DE426D04Exxxx")
.build();

or

AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice("33BE2250B43518CCDA7DE426D04xxxx");
AdRequest adRequest = adRequestBuilder.build();

"java.lang.IllegalStateException: The ad size can only be set once on AdView."エラーが出る場合

2回以上AdSizeを設定しているので、一度入れたら設定しないようにする。

mAdView = new AdView(this);
if (mAdView.getAdSize() == null) {
    mAdView.setAdSize(AdSize.BANNER);
}
if (mAdView.getAdUnitId() == null) {
    mAdView.setAdUnitId("ca-app-pub-1234hogehogehogehoge/1234hoge");
}