GoogleMobileAds 動画リワードメディエーション(Legacy)の実装

AdManager/AdMobのメディエーション機能を使用することで、Geniee SDKの動画リワードをAdManager/AdMobから配信することができます。

実装準備

動画リワード広告では、以下の実装準備が必要です。

  • 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) をアプリに導入する必要があります。
    スタートガイド

  • 各アドネットワーク用SDKとアダプター

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

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

    アドネットワーク 検証済みバージョン
    maio 1.1.13
    AppLovin 9.14.5
    Unity Ads 3.4.8
    AdColony 4.6.4
    CAReward 2.4.0
    Tapjoy 12.7.0
    Vungle 6.8.0
    Nend 5.4.2
    AMoAd playable-1.0.0
    TikTok 2.0.0.0

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'
     }
     
  3. 実装例

  • 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"
    		}
    		//Adcolony SDK
    		maven {
    		    url  "https://adcolony.bintray.com/AdColony"
    		}
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
  • 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.gnsrewardadapter:GNSRewardAdapter:6.3.0'
      	implementation 'jp.co.geniee.gnadgooglemediationadapter:GNAdGoogleMediationAdapter:8.5.0.0'
      	// Nend
      	implementation 'com.android.support:recyclerview-v7:26.1.0'
      	implementation 'com.android.support:cardview-v7:26.1.0'
      	// Vungle
      	implementation 'com.google.android.gms:play-services-gcm:15.0.1'
      }
      

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

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

手動導入手順はこちら

Geniee Adapter SDK のダウンロード

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

Localライブラリの配置

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

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

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

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

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

    dependencies {
    	implementation fileTree(include: ['*.jar'], dir: 'libs')
    }
    
    1
    2
    3
  • 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

GoogleMobileAds動画リワード広告の実装

  1. AdManager

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

  1. AdMob

管理画面でメディエーション設定した動画リワードのUnitIDで呼び出すことで、AdMobのメディエーションすることが可能です。
動画リワードの実装方法については、以下のサイトを参考にしてください。

https://developers.google.com/admob/android/rewarded-video

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

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

GoogleMobileAds動画リワード広告がNo fillとなる場合の対応

AdManager/AdMobの動画リワードがLoad失敗になった場合に、Geniee SDKを呼び出すことで、広告の空き枠を防ぐことができます。実装手順は以下の通りです。

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

    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.OnUserEarnedRewardListener;
    import com.google.android.gms.ads.rewarded.RewardItem;
    import com.google.android.gms.ads.rewarded.RewardedAd;
    import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;
    
    import jp.co.geniee.gnadsdk.rewardvideo.GNSRewardVideoAd;
    import jp.co.geniee.gnadsdk.rewardvideo.GNSRewardVideoAdListener;
    import jp.co.geniee.gnadsdk.rewardvideo.GNSVideoRewardData;
    import jp.co.geniee.gnadsdk.rewardvideo.GNSVideoRewardException;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  2. Geniee SDKのGNSRewardVideoAdのインスタンスをZoneIDを指定して作成します。AdmobのRewardedAdを作成します。

    // Declare AdMob Reward
    private RewardedAd mRewardedAd;
    // Declare Geniee Reward
    private GNSRewardVideoAd mGNReward;
    
    // Geniee GNSRewardVideoAd
    mGNReward = new GNSRewardVideoAd("YOUR_ZONE_ID", MainActivity.this);
    
    // AdMob/AdManager
    AdRequest adRequest = new AdRequest.Builder().build();
    RewardedAd.load(this, "YOUR_AD_UNIT_ID",
            adRequest, new RewardedAdLoadCallback() {
                @Override
                public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                    // Handle the error.
                    Log.d(TAG, loadAdError.getMessage());
                    mRewardedAd = null;
    
                    // Geniee SDK Load
                    if (mGNReward != null) {
                        mGNReward.loadRequest(true);
                    }
    
                }
    
                @Override
                public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                    mRewardedAd = rewardedAd;
                    Log.d(TAG, "Ad was loaded.");
                    mRewardedAd.setFullScreenContentCallback(mFullScreenContentCallback);
                }
            });
    
    
    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
  3. Geniee SDKのGNAdVideoListenerインタフェースを実装します。

    mGNReward.setRewardVideoAdListener(new GNSRewardVideoAdListener() {
        @Override
        public void rewardVideoAdDidReceiveAd() {
            Log.i("GNSReward", "Video ad is loading");
        }
    
        @Override
        public void rewardVideoAdDidStartPlaying(GNSVideoRewardData data) {
            Log.i("GNSReward", "Video ad playback start(" + data.adName + ")");
        }
    
        @Override
        public void didRewardUserWithReward(GNSVideoRewardData data) {
            Log.i("GNSReward", "Give users a reward(" +
                    data.adName + " " +
                    data.amount + data.type + ")");
        }
    
        @Override
        public void rewardVideoAdDidClose(GNSVideoRewardData data) {
            Log.i("GNSReward", "Video ad has been closed(" + data.adName + ")");
        }
    
        @Override
        public void didFailToLoadWithError(GNSVideoRewardException e) {
            Log.i("GNSReward", "Video ad load failed.(" + 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
  4. AdmobのFullscreenContentCallbackのインスタンスを実装します。

    final FullScreenContentCallback mFullScreenContentCallback = new FullScreenContentCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
            // Called when ad is shown.
            Log.d(TAG, "Ad was shown.");
            mRewardedAd = 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
  5. GoogleMobileAdsのLoadが失敗した場合に呼び出されるメソッドonRewardedVideoAdFailedToLoadにGeniee SDK動画リワードのloadRequestメソッドを実装します。

    @Override
    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        // Handle the error.
        Log.d(TAG, loadAdError.getMessage());
        mRewardedAd = null;
    
        // Geniee SDK Load
        if (mGNReward != null) {
            mGNReward.loadRequest(true);
        }
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    • 1つの動画の再生完了後に別の動画を見せる場合、再びロードリクエストを行う必要があります。
  6. Google Ads SDK → Geniee SDKの順で、loadAd/loadRequestが完了しているかを確認し、showメソッドで動画を表示します。

    	if (mRewardedAd != null) {
    	    Activity activityContext = MainActivity.this;
    	    mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
    	        @Override
    	        public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
    	            // Handle the reward.
    	            Log.d(TAG, "The user earned the reward.");
    	            int rewardAmount = rewardItem.getAmount();
    	            String rewardType = rewardItem.getType();
    	        }
    	    });
    	} else if (mGNReward != null && mGNReward.canShow()) {
    	    Log.d(TAG, "The rewarded ad wasn't ready yet.");
    	    mGNReward.show();
    	}
           
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    • showは必ずGoogleMobileAdsのLoad実行後に実施するようにして下さい。
  7. Geniee SDKのコールバックメソッドのdidRewardUserWithRewardで、ユーザーに報酬を付与します。

    @Override
    public void didRewardUserWithReward(GNSVideoRewardData data) {
      Log.i("GNSReward", "ユーザにリワードを付与。(" + data.adName + " " + data.amount + data.type + ")"));
    }
    
    1
    2
    3
    4
    • ジーニーの動画リワード広告で収益を最大化するためには、動画視聴者に報酬を与えることが重要です。GNSAdRewardメソッドには以下の項目が含まれます。

      • reward.type:SSPにおける報酬タイプの設定
      • reward.amount:SSPにおける報酬量の設定
  8. Activityのライフサイクルを処理のつなぎ込みを実施します。このつなぎ込みは広告の停止や再開の制御に使われます。

     @Override
    protected void onStart() {
        super.onStart();
        if (mGNReward != null) {
            mGNReward.onStart();
        }
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        if (mReward != null) {
            mReward.resume(this);
        }
        if (mGNReward != null) {
            mGNReward.onResume();
        }
    }
    
    @Override
    protected void onPause() {
        if (mReward != null) {
            mReward.pause(this);
        }
        if (mGNReward != null) {
            mGNReward.onPause();
        }
        super.onPause();
    }
    
    @Override
    protected void onStop() {
        if (mGNReward != null) {
            mGNReward.onStop();
        }
        super.onStop();
    }
    
    
    @Override
    protected void onDestroy() {
        if (mReward != null) {
            mReward.destroy(this);
        }
        if (mGNReward != null) {
            mGNReward.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
    41
    42
    43
    44
    45
    46
    47
    48
    49
  • Google Ads SDKのライフサイクルイベントのつなぎ込みも必ず実施してください。
  • アプリケーション全体で動画リワードを使用する場合 mReward.onDestroy()の実装は除外してください。 mReward.onDestroy()を実装すると動画リワード内のデータが破棄されます。
Last Updated: 2021/5/12 15:26:10