GoogleMobileAds 動画リワードメディエーション(Legacy)の実装
AdManager/AdMobのメディエーション機能を使用することで、Geniee SDKの動画リワードをAdManager/AdMobから配信することができます。
実装準備
動画リワード広告では、以下の実装準備が必要です。
- Google Play Services SDK Geniee 広告SDKを使用するには、Google Play Services SDKを必ず導入する必要があります。 Google Play Services SDKの導入手順は以下の通りです。
Module>build.gradle
のdependencies
に以下を追加します。
dependencies {
implementation 'com.google.android.gms:play-services-ads:20.0.0'
}
Google Play Services SDKを既に導入済み場合、追加は必要ありません。
- Google Developers公式サイトSetting Up Google Play Services
Project Structure
のDependencies
に追加されていることを確認します。
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.7.1 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で実装する場合(推奨)
Project>build.gradle
のallprojects>repositories
に以下を追加します。allprojects { repositories { // GenieeSDK maven { url 'https://raw.github.com/geniee-ssp/Geniee-Android-SDK/master/repository' } } }
1
2
3
4
5
6
7
8Module>build.gradle
のdependencies
に以下を追加します。dependencies { implementation 'jp.co.geniee.gnadgooglemediationadapter:GNAdGoogleMediationAdapter:8.5.0.0' }
実装例
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
22Module>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.1' // GenieeSDK implementation 'jp.co.geniee.gnsrewardadapter:GNSRewardAdapter:6.4.1' 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ライブラリの配置
Geniee Android SDK を解凍します。
プロジェクトにGNSRewardAdapterを追加します。
libs
フォルダーが存在しない場合、必要に応じて作成します。libs
フォルダにGNAdGoogleMediationAdapter
フォルダ配下の以下ファイルをコピーします。
- GNAdGoogleMediationAdapter-8.5.0.0.jarModule/build.gradle
のdependencies
に追加します。dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') }
1
2
3AndroidManifest.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動画リワード広告の実装
- AdManager
管理画面でメディエーション設定した動画リワードのUnitIDで呼び出すことで、AdManagerのメディエーションすることが可能です。
動画リワードの実装方法については、以下のサイトを参考にしてください。
https://developers.google.com/ad-manager/mobile-ads-sdk/android/rewarded-video
- AdMob
管理画面でメディエーション設定した動画リワードのUnitIDで呼び出すことで、AdMobのメディエーションすることが可能です。
動画リワードの実装方法については、以下のサイトを参考にしてください。
https://developers.google.com/admob/android/rewarded-video
※ メディエーションを使用する場合の実装注意点
リワードのインスタンタンスを生成する時、ContextではなくActivityを指定してください。
Contextを指定した場合、メディエーションが動作しない場合があります。
GoogleMobileAds動画リワード広告がNo fillとなる場合の対応
AdManager/AdMobの動画リワードがLoad失敗になった場合に、Geniee SDKを呼び出すことで、広告の空き枠を防ぐことができます。実装手順は以下の通りです。
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
13Geniee 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
33Geniee 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
31Admobの
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
23GoogleMobileAdsの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つの動画の再生完了後に別の動画を見せる場合、再びロードリクエストを行う必要があります。
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実行後に実施するようにして下さい。
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における報酬量の設定
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()を実装すると動画リワード内のデータが破棄されます。