【Android】 admob の実装方法(バナー、インタースティシャル、リワードインタースティシャル)

公式を参考に実装した備忘録です。

いつも書く場所が分からなかったりして右往左往するので、抜粋は抜粋ですが、全体を提示するスタイルでいきます。

スコープは適当ですので、適切に調整して下さい。また、何も保障するものではありません。もしかしたら、抜粋する過程で何かミスがあり動かない可能性もありますが、とりあえず動いてたソースです。

Admobの設定は済んでいることが前提です。

プロジェクトのbuild.gradleに以下を追加。

buildscript {
    repositories {
        google()
        mavenCentral()
    }
}

※公式にはallprojectsへの記載もありましたが、エラーが出たため削除しました。

アプリのbuild.gradleに以下を追加。

android{
    compileSdk 31 //確か31でないとエラーが出たきがします
}

dependencies {
    implementation 'com.google.android.gms:play-services-ads:20.4.0'
    // For apps targeting Android 12, add WorkManager dependency.
    constraints {
        implementation('androidx.work:work-runtime:2.7.0') {
            because '''androidx.work:work-runtime:2.1.0 pulled from play-services-ads
                   has a bug using PendingIntent without FLAG_IMMUTABLE or
                   FLAG_MUTABLE and will fail in apps targeting S+.'''
        }
    }
}

AndroidManifest.xml に AdmobのアプリIDを記載します。(本番用 or テスト用)

<application
 
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-ca-app-pub-3940256099942544~3347511713" /><!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
</application>

activity_main.xml に バナー用のレイアウトを記載。

<RelativeLayout
    android:id="@+id/layout_forAd"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
</RelativeLayout>

以下の処理で、起動と同時にバナーを表示し、リワードとリワードインタースティシャルのロードを開始しています。あとは、表示開始の関数を呼べば、ロードが成功していれば表示されます。

activity_main.java

//リワードの処理をオーバーライドするために、  implements OnUserEarnedRewardListener しています
public class MainActivity extends AppCompatActivity  implements OnUserEarnedRewardListener {

    String bannerId = "ca-app-pub-3940256099942544/6300978111";//テスト用
    String interstitialId = "ca-app-pub-3940256099942544/8691691433";//テスト用
    String rewardId = "ca-app-pub-3940256099942544/5224354917";//テスト用

    String TAG = "Admob tag";
    AdView mAdView = null;
    InterstitialAd mInterstitialAd = null;
    RewardedInterstitialAd rewardedInterstitialAd = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ////////////////////////////////////////////////////////////////////////////////////
        // アドモブの初期化
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        ////////////////////////////////////////////////////////////////////////////////////
        // バナー 
        mAdView = new AdView(this);
        mAdView.setAdSize(AdSize.BANNER);
        mAdView.setAdUnitId(bannerId);

        // AdMob用のLayout parameterを設定
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        // 画面の底に位置させるようにALIGN_PARENT_BOTTOMを設定
        params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
        // AdMobのレイアウト属性を設定
        mAdView.setLayoutParams(params);

        // Relative layout インスタンス生成
        RelativeLayout layout = findViewById(R.id.layout_forAd);
        layout.addView(mAdView);

        AdRequest bannerRequest = new AdRequest.Builder().build();
        // バナーをロード
        mAdView.loadAd(bannerRequest);

        // ad's lifecycle: loading, opening, closing, and so on
        mAdView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                // Code to be executed when an ad finishes loading.
            }

            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                // 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 onAdClosed() {
                // Code to be executed when the user is about to return
                // to the app after tapping on an ad.
            }
        });

        ////////////////////////////////////////////////////////////////////////////////////
        // インタースティシャルをロード開始
        loadInterstitial();

        ////////////////////////////////////////////////////////////////////////////////////
        // リワードインタースティシャルをロード開始
        loadReward();

    }

    ////////////////////////////////////////////////////////////////////////////////////
    // インタースティシャルをロード開始(任意のタイミングで)
    public void loadInterstitial() {

        InterstitialAd.load(this,interstitialId, new AdRequest.Builder().build(),
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                        // The mInterstitialAd reference will be null until
                        // an ad is loaded.
                        mInterstitialAd = interstitialAd;
                        //コールバックを登録する
                        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
                            @Override
                            public void onAdDismissedFullScreenContent() {
                                // Called when fullscreen content is dismissed.
                                Log.d("TAG", "The ad was dismissed.");
                            }

                            @Override
                            public void onAdFailedToShowFullScreenContent(AdError adError) {
                                // Called when fullscreen content failed to show.
                                Log.d("TAG", "The ad failed to show.");
                            }

                            @Override
                            public void onAdShowedFullScreenContent() {
                                // Called when fullscreen content is shown.
                                // Make sure to set your reference to null so you don't
                                // show it a second time.
                                mInterstitialAd = null;
                                Log.d("TAG", "The ad was shown.");
                            }
                        });
                        Log.i(TAG, "onAdLoaded");
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        // Handle the error
                        Log.i(TAG, loadAdError.getMessage());
                        mInterstitialAd = null;
                    }
                });
    }

    ////////////////////////////////////////////////////////////////////////////////////
    //インタースティシャルの表示開始(任意のタイミングで)
    public void StartInterstitial(){
        if (mInterstitialAd != null) {
            mInterstitialAd.show(this);
        } else {
            Log.d("TAG", "The interstitial ad wasn't ready yet.");
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////
    // リワードインタースティシャルをロード開始(任意のタイミングで)
    public void loadReward() {

        RewardedInterstitialAd.load(MainActivity.this, rewardId,
                new AdRequest.Builder().build(),  new RewardedInterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(RewardedInterstitialAd ad) {
                        rewardedInterstitialAd = ad;
                        //コールバックを登録する
                        rewardedInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                            /** Called when the ad failed to show full screen content. */
                            @Override
                            public void onAdFailedToShowFullScreenContent(AdError adError) {
                                Log.i(TAG, "onAdFailedToShowFullScreenContent");
                            }

                            /** Called when ad showed the full screen content. */
                            @Override
                            public void onAdShowedFullScreenContent() {
                                Log.i(TAG, "onAdShowedFullScreenContent");
                            }

                            /** Called when full screen content is dismissed. */
                            @Override
                            public void onAdDismissedFullScreenContent() {
                                Log.i(TAG, "onAdDismissedFullScreenContent");
                            }
                        });
                        Log.e(TAG, "onAdLoaded");
                    }
                    @Override
                    public void onAdFailedToLoad(LoadAdError loadAdError) {
                        Log.e(TAG, "onAdFailedToLoad");
                        rewardedInterstitialAd = null;
                    }
                });

    }

    ////////////////////////////////////////////////////////////////////////////////////
    //インタースティシャルの表示開始(任意のタイミングで)
    public void StartRewardInterstitial(){
        if (rewardedInterstitialAd != null) {
            rewardedInterstitialAd.show(MainActivity.this, MainActivity.this);
        } else {
            Log.d("TAG", "The rewardInterstitial ad wasn't ready yet.");
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////
    @Override
    public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
        Log.i(TAG, "onUserEarnedReward");
        //リワードの報酬を与える処理
    }

}

 

comment

タイトルとURLをコピーしました