InterstitialAdがdeprecatedになったので修正

19.7.0でdeprecatedになり、20.1.0では互換性がなくなってしまったので、必要にかられて対応した内容のメモです。 元ネタはこちらの記事【Kotlin】2021年版インタースティシャル広告の実装 で、このメモは単なるJava版です。

修正箇所

MainActivity などで行う初期化処理を修正します。AdMobのアプリケーションIDの指定ができなくなりました。 そもそもAndroidManifest.xmlにmeta情報として記載するので不要でしたね。
MobileAds.initialize(this); 
InterstitialAd をコンストラクタでインスタンス化していましたが、抽象クラスになったのでファクトリメソッドの呼び出しに変更します。 広告ユニットIDや広告リクエストは修正前のものがそのまま使えます。 下記のサンプルでは Activity のクローズやボタンの活性化処理が入っていますが、これも修正前の処理をそのまま移行したもなので、InterstitialAd の対応とは直接関係ありません。
InterstitialAd.load(this,
        getString(R.string.interstitial_ad_unit_id),
        app.makeAdRequest(), // これまでと同じリクエストを使用
        new InterstitialAdLoadCallback() {
            @Override
            public void onAdLoaded(@NonNull @NotNull InterstitialAd interstitialAd) {
                super.onAdLoaded(interstitialAd);
                mInterstitialAd = interstitialAd;
                mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                    @Override
                    public void onAdShowedFullScreenContent() {
                        super.onAdShowedFullScreenContent();
                        // 広告表示できたら、次回のためにnullにしておく
                        mInterstitialAd = null;
                    }

                    @Override
                    public void onAdDismissedFullScreenContent() {
                        super.onAdDismissedFullScreenContent();
                        // 広告を閉じたら、この広告を表示したActivityも閉じる(サンプル)
                        finish();
                    }
                });
                // 広告準備ができたらアップロードボタンをアクティブにする(サンプル)
                viewModel.loadedAds.postValue(true);
            }

            @Override
            public void onAdFailedToLoad(@NonNull @NotNull LoadAdError loadAdError) {
                super.onAdFailedToLoad(loadAdError);
                // 何らかの問題で広告準備ができなくてもアップロードボタンをアクティブにする(サンプル)
                viewModel.loadedAds.postValue(true);
            }
        });
残りは表示です。 対応したアプリはボタンタップ時に広告を表示して Activity を閉じる動きなので、下記のような処理になりました。
private void showInterstitialAd(){
    if (mInterstitialAd != null) {
        mInterstitialAd.show(this);
    }
    else {
        // 広告が準備できなかったらそのままアクテビティを閉じる
        finish();
    }
}

終わりに

SDKを最新化したらエラーになって慌てましたが、参照先の記事のおかげで対応できました。本当にありがとうございます。 最後は公式ドキュメントを読まないとダメですが、ドキュメント、読むの難しいですね。サンプルコードを読めということなのかな。

コメントを残す

メールアドレスが公開されることはありません。