GoogleMobileAds全画面インタースティシャルメディエーションの実装

AdMob/AdManagerのメディエーション機能を使用することで、Geniee SDKの全画面インタースティシャルをAdMob/AdManagerから配信することができます。

実装準備

全画面インタースティシャル広告では、以下の実装準備が必要です。

  • Google Play Services SDK Geniee 広告SDKを使用するには、Google Play Services SDKを必ず導入する必要があります。 Google Play Services SDKの導入手順は以下の通りです。
  1. Module>build.gradledependenciesに以下を追加します。
dependencies {
    implementation 'com.google.android.gms:play-services-ads:20.0.0'
}
  • Google Play Services SDKを既に導入済み場合、追加は必要ありません。

  • Geniee SDK

    下記スタートガイドより、Geniee SDK(GNAdSDK) をアプリに導入する必要があります。
    スタートガイド

  • AndroidManifest.xml

    AndroidManifest.xmlに以下のパーミッションを設定して下さい。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
    1
    2
    3
    4
    5
    6
  • 各アドネットワーク用SDKとアダプター

    AdMob/AdManagerのメディエーション機能とGeniee SDKを使用して配信する、アドネットワーク毎のSDKの設定とアダプターの設定が必要です。
    全アドネットワークを一括で設定するには、以下リンクの導入方法を参照して下さい。
    全アドネットワークの一括実装

    また、アドネットワークを個別で利用するには、以下よりアドネットワークのリンクを選択して、導入方法を参照して下さい。

    アドネットワーク 検証済みバージョン
    maio 1.1.13
    AppLovin 9.14.5
    Nend 5.4.2
    Zucks 4.7.0
    Tapjoy 12.7.0
    UnityAds 3.4.8
    Vungle 6.8.0
    Imobile 2.0.20

GoogleMobileAds全画面インタースティシャルメディエーション用SDKの実装

Mavenで実装する場合(推奨)

  1. Project>build.gradleallprojects>repositoriesに以下を追加します。

    allprojects {
    	repositories {
    		// GenieeSDK
    		maven { 
    			url 'https://raw.github.com/geniee-ssp/Geniee-Android-SDK/master/repository' 
    		}
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
  2. Module>build.gradledependenciesに以下を追加します。

dependencies {
        implementation 'jp.co.geniee.gnadgooglemediationadapter:GNAdGoogleMediationAdapter:8.5.0.0'
}
  1. 実装例
  • Project>build.gradle

    allprojects {
    	repositories {
    		jcenter()
    		google()      	
    		// GenieeSDK
    		maven { 
    		    url 'https://raw.github.com/geniee-ssp/Geniee-Android-SDK/master/repository'
    		}
    		// nendSDK
    		maven {
    		    url 'http://fan-adn.github.io/nendSDK-Android-lib/library'
    		}
    		// Maio SDK
    		maven{
    		    url "https://imobile-maio.github.io/maven"
    		}
    		// ZucksSDK
    		maven {
        	    url 'https://github.com/zucks/ZucksAdNetworkSDK-Maven/raw/master/'
            }
            // Tapjoy SDK
            maven {
                url "https://tapjoy.bintray.com/maven"
            }
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
  • Module>build.gradle

      dependencies {	
          implementation fileTree(include: ['*.jar'], dir: 'libs')
          // Google SDK
          implementation 'com.android.support:appcompat-v7:26.1.0'
          implementation 'com.android.support.constraint:constraint-layout:1.1.1'
          implementation 'com.google.android.gms:play-services-ads:20.0.0'
          // Geniee
          implementation 'jp.co.geniee.gnadsdk:GNAdSDK:8.5.0' // GenieeSDK
          implementation 'jp.co.geniee.gnsfullscreeninterstitialadapter:GNSFullscreenInterstitialAdapter:4.2.0'
          implementation 'jp.co.geniee.gnadgooglemediationadapter:GNAdGoogleMediationAdapter:8.5.0.0'
          // Nend
          implementation 'com.android.support:cardview-v7:26.1.0'
          // Vungle Optional Google Play Services
          implementation 'com.google.android.gms:play-services-location:17.2.0'
      }
      
  • AndroidManifest.xmlを更新する

    重要: Google Mobile Ads SDK バージョン 17.0.0 以上 では、この手順は必須です。この <meta-data> タグを 追加しない場合は、クラッシュして次のメッセージが表示されます。"The Google Mobile Ads SDK was initialized incorrectly."

    <manifest>
    	<application>
    	<!-- Google AdMob -->
    		<meta-data
    			android:name="com.google.android.gms.ads.APPLICATION_ID"
    			android:value="YOUR_ADMOB_APP_ID"/>
           
    		<!-- Google Ad Manager -->
    		<meta-data
    			android:name="com.google.android.gms.ads.AD_MANAGER_APP"
    			android:value="true"/>	
    	</application>
    </manifest>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

手動でライブラリを導入する

Mavenでライブラリを導入するの手順を実行した場合、この手順は実行する必要はありません。

手動導入手順はこちら

Geniee Adapter SDK のダウンロード

以下の URL から Geniee Android SDK をダウンロードします。

Localライブラリの配置

  1. Geniee Android SDK を解凍します。

  2. プロジェクトにGNSFullscreenInterstitialAdapterを追加します。

  • libs フォルダーが存在しない場合、必要に応じて作成します。

  • libs フォルダにGNAdGoogleMediationAdapterフォルダ配下の以下ファイルをコピーします。
    - GNAdGoogleMediationAdapter-8.5.0.0.jar

  • Module/build.gradledependenciesに追加します。

    dependencies {
    	implementation fileTree(include: ['*.jar'], dir: 'libs')
    }
    
    1
    2
    3

GoogleMobileAds全画面インタースティシャル広告の実装

  1. AdManager

管理画面でメディエーション設定した全画面インタースティシャルのUnitIDで呼び出すことで、AdManagerのメディエーションすることが可能です。
全画面インタースティシャルの実装方法については、以下のサイトを参考にしてください。
https://developers.google.com/ad-manager/mobile-ads-sdk/android/interstitial

  1. AdMob

管理画面でメディエーション設定した全画面インタースティシャルのUnitIDで呼び出すことで、AdMobのメディエーションすることが可能です。
全画面インタースティシャルの実装方法については、以下のサイトを参考にしてください。
https://developers.google.com/admob/android/interstitial

※ メディエーションを使用する場合の実装注意点

インタースティシャルのインスタンタンスを生成する時、ContextではなくActivityを指定してください。
Contextを指定した場合、メディエーションが動作しない場合があります。

GoogleMobileAds全画面インタースティシャル広告がNo fillとなる場合の対応

全画面インタースティシャルがLoad失敗になった場合に、Geniee SDKを呼び出すことで、広告の空き枠を防ぐことができます。実装手順は以下の通りです。

  1. Geniee SDKとAdmobSDKをインポートします。

    import com.google.android.gms.ads.AdError;
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.FullScreenContentCallback;
    import com.google.android.gms.ads.LoadAdError;
    import com.google.android.gms.ads.interstitial.InterstitialAd;
    import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;
    
    import jp.co.geniee.gnadsdk.fullscreeninterstitial.GNSFullscreenInterstitialAd;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  2. Geniee SDKのGNSFullscreenInterstitialAdのインスタンスをZoneIDを指定して作成します。

    // Declare AdMob Interstitial
    private InterstitialAd mInterstitialAd;
    // Delare Geniee Interstitial
    private GNSFullscreenInterstitialAd mGNSFullscreenInterstitialAd;
    
    
    // Geniee Interstitial
    mGNSFullscreenInterstitialAd = new GNSFullscreenInterstitialAd("YOUR_ZONE_ID", this);
    
    // AdMob/AdManager
    AdRequest adRequest = new AdRequest.Builder().build();
    InterstitialAd.load(this, "YOUR_AD_UNIT_ID", adRequest, new InterstitialAdLoadCallback() {
        @Override
        public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
            // The mInterstitialAd reference will be null until
            // an ad is loaded.
            mInterstitialAd = interstitialAd;
            mInterstitialAd.setFullScreenContentCallback(mFullScreenContentCallback);
    
            Log.i(TAG, "onAdLoaded");
        }
    
        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
            // Handle the error
            Log.i(TAG, loadAdError.getMessage());
            mInterstitialAd = null;
    
            //Geniee SDK Load
            if (mGNSFullscreenInterstitialAd != null) {
                mGNSFullscreenInterstitialAd.loadRequest();
            }
        }
    });
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
  3. Geniee SDKのGNSFullscreenInterstitialAdListenerインタフェースを実装します。

    mGNSFullscreenInterstitialAd.setFullscreenInterstitialAdListener(new GNSFullscreenInterstitialAdListener() {
       @Override
       public void fullscreenInterstitialAdDidReceiveAd() {
           Log.i("GNSFullscreen", "全画面インステ広告ロード成功。");
       }
       @Override
       public void fullscreenInterstitialAdWillPresentScreen(String adName) {
           Log.i("GNSFullscreen", "全画面インステを表示した。(" + adName + ")");
       }
       @Override
       public void fullscreenInterstitialAdDidClose(String adName) {
           Log.i("GNSFullscreen", "全画面インステが閉じられた。(" + adName + ")");
       }
       @Override
       public void didFailToLoadWithError(GNSException e) {
           Log.i("GNSFullscreen", "全画面インステ広告ロード失敗。(" + e.getAdnetworkName() +
           	" Code:" + e.getCode() + " " +
           	 e.getMessage());
       }
    });
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
  4. AdMobSDKのFullScreenContentCallbackインタフェースを実装します。

    final FullScreenContentCallback mFullScreenContentCallback = new FullScreenContentCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
            // Called when ad is shown.
            Log.d(TAG, "Ad was shown.");
            mInterstitialAd = null;
        }
    
        @Override
        public void onAdFailedToShowFullScreenContent(AdError adError) {
            // Called when ad fails to show.
            Log.d(TAG, "Ad failed to show.");
        }
    
        @Override
        public void onAdDismissedFullScreenContent() {
            // Called when ad is dismissed.
            // Don't forget to set the ad reference to null so you
            // don't show the ad a second time.
            Log.d(TAG, "Ad was dismissed.");
        }
    };
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    • 1つの広告の再生完了後に別の広告を見せる場合、再びロードリクエストを行う必要があります。
  5. GoogleMobileAdsのLoadが失敗した場合に呼び出されるメソッド onAdFailedToLoadにGeniee SDK全画面インタースティシャルのloadRequestメソッドを実装します。

    @Override
    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        // Handle the error
        Log.i(TAG, loadAdError.getMessage());
        mInterstitialAd = null;
    
        //Geniee SDK Load
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.loadRequest();
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  6. Google Ads SDK → Geniee SDKの順で、loadAd/loadRequestが完了しているかを確認し、showメソッドで動画を表示します。

    if (mInterstitialAd != null) {
        mInterstitialAd.show(this);
    } else if (mGNSFullscreenInterstitialAd != null && mGNSFullscreenInterstitialAd.canShow()) {
        mGNSFullscreenInterstitialAd.show();
    } 
       
    
    1
    2
    3
    4
    5
    6
    • showは必ずGoolgeMobileAdsのLoad実行後に実施するようにして下さい。
  7. Activityのライフサイクルを処理のつなぎ込みを実施します。このつなぎ込みは広告の停止や再開の制御に使われます。

     @Override
    protected void onStart() {
        super.onStart();
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.onStart();
        }
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.onResume();
        }
    }
    
    @Override
    protected void onPause() {
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.onPause();
        }
        super.onPause();
    }
    
    @Override
    protected void onStop() {
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.onStop();
        }
        super.onStop();
    }
    
    
    @Override
    protected void onDestroy() {
        if (mGNSFullscreenInterstitialAd != null) {
            mGNSFullscreenInterstitialAd.onDestroy();
        }
        super.onDestroy();
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
  • Google Ads SDKのライフサイクルイベントのつなぎ込みも必ず実施してください。
  • アプリケーション全体で全画面インタースティシャルを使用する場合 mInterstitialAd.onDestroy()の実装は除外してください。 mInterstitialAd.onDestroy()を実装すると全画面インタースティシャル内のデータが破棄されます。
Last Updated: 2021/5/20 14:51:41