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

  1. はじめに
  2. GoogleMobileAds動画リワードメディエーション広告SDK Unity Pluginを導入する
  3. GNSAdSDK-UnityPlugin-RewardのプラグインをUnityプロジェクトへインポート
  4. ImportしたUnity プラグインのライフサイクルActivityを書き換える
  5. AndroidManifest.xmlの修正
  6. Plugin APIを使用し、動画リワード広告のイベントを登録
  7. GoogleMobileAds広告取得失敗時の動画リワード広告のロード
  8. GoogleMobileAds広告取得失敗時の動画リワードインスタンス破棄処理を追加
  9. 動画リワード広告の表示

0. はじめに

GoogleMobileAds動画リワードメディエーション広告SDK Unity Pluginの導入

上記ページの手順に従ってGoogleMobileAdsのみで広告再生ができることを確認。

1. GoogleMobileAds動画リワードメディエーション広告SDK Unity Pluginを導入する

GoogleMobileAds動画リワードメディエーション広告SDK Unity Pluginの導入

上記ページの1,2を導入ください。

  1. Google Mobile Ads Unity pluginをUnityプロジェクトへインポート
  2. GNSAdSDK-UnityPlugin-Google-RewardのプラグインをUnityプロジェクトへインポート

2. GNSAdSDK-UnityPlugin-RewardのプラグインをUnityプロジェクトへインポート

  1. Pluginを組み込むUnityプロジェクトを開きます。

  2. メニューバーの Assets -> Import Package -> Custom Packageの順に選択します。

  3. reward側のGNSAdSDK-UnityPlugin-Reward-4.0.0ファイルを選択します。(No fill対応は2.1.0以降)

  4. 以下ファイルのチェックボックスがオンになっていることを確認して、Import をクリックします。

    • GNSAdSDK
      • Api
        • RewardVideoAd.cs
        • VideoRewardData.cs
        • VideoRewardFailedData.cs
      • Clients
        • MockClient.cs
        • RewardVideoAdClient.cs
      • Platforms
        • AdClientFactory.cs
        • Android
          • RewardVideoAdClientImpl.cs
          • Utils.cs
        • iOS
          • Externs.cs
          • RewardVideoAdClientImpl.cs
    • Plugins
      • iOS
        • GNSUInterface.m
        • GNSUObjectCache.h
        • GNSUObjectCache.m
        • GNSURewardVideoAd.h
        • GNSURewardVideoAd.m
        • GNSUTypes.h

3. ImportしたUnity プラグインと連携するActivityを書き換える

NoFill対応のExtendsDfpNoFillUnityPlayerActivityクラスに切り替えます。

Assets/GNSAdSDK/Platforms/Android/Utils.cs

- public static string LifecycleListenerClassName = "jp.co.geniee.utgnsrewardvideo.ExtendsDfpUnityPlayerActivity$LifecycleListener";
+ public static string LifecycleListenerClassName = "jp.co.geniee.utgnsrewardvideo.ExtendsDfpNoFillUnityPlayerActivity$LifecycleListener";
1
2

4. AndroidManifest.xmlの修正

ライフサイクル情報をExtendsDfpNoFillUnityPlayerActivityへ渡すように書き換えます。

Assets/Plugins/Android/AndroidManifest.xml

- <activity android:name="jp.co.geniee.utgnsrewardvideo.ExtendsDfpUnityPlayerActivity"
-           android:label="@string/app_name"
-           android:configChanges="orientation|keyboardHidden|screenSize"
-           >
-     <intent-filter>
-         <action android:name="android.intent.action.MAIN" />
-         <category android:name="android.intent.category.LAUNCHER" />
-     </intent-filter>
-     <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
- </activity>

+ <activity android:name="jp.co.geniee.utgnsrewardvideo.ExtendsDfpNoFillUnityPlayerActivity"
+           android:label="@string/app_name"
+           android:configChanges="orientation|keyboardHidden|screenSize"
+           >
+     <intent-filter>
+         <action android:name="android.intent.action.MAIN" />
+         <category android:name="android.intent.category.LAUNCHER" />
+     </intent-filter>
+     <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
+ </activity>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

5. Plugin APIを使用し、動画リワード広告のイベントを登録

以下は、動画リワード広告を作成してイベントを登録するために必要なコードです。 イベントを登録する際は、動画のロードをする前に登録処理を完了させてください。

using GNSAdSDK.Api;

...

static bool isRegistedRewardVideoEventHandler = false;

void RegistRewardVideoAdEventHandler()
{
    if (!isRegistedRewardVideoEventHandler)
    {
        // ここからNoFill対応時に使用する動画リワードイベント
        RewardVideoAd rewardVideoAd = RewardVideoAd.Instance;
        rewardVideoAd.OnAdLoaded += (object sender, System.EventArgs args) => {
            // 動画リワード広告のロードが完了した際の処理
        };
        rewardVideoAd.OnAdStarted += (object sender, VideoRewardData args) => {
            // 動画リワード広告が再生された際の処理
            // ※ iOSに限り、args にはプロパティがすべて空のVideoRewardDataのインスタンスが渡されます。
        };
        rewardVideoAd.OnAdRewarded += (object sender, VideoRewardData args) => {
            // ユーザーにリワードが付与された際の処理
        };
        rewardVideoAd.OnAdClosed += (object sender, VideoRewardData args) => {
            // 動画リワード広告が閉じられた際の処理
            // ※ iOSに限り、args にはプロパティがすべて空のVideoRewardDataのインスタンスが渡されます。
        };
        rewardVideoAd.OnAdFailedToLoad += (object sender, VideoRewardFailedData args) => {
            // 動画リワード広告のロードが失敗した際の処理
        };
        // ここまでNoFill対応時に使用する動画リワードイベント
        // Get singleton reward based video ad reference.
        RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;
    }
    isRegistedRewardVideoEventHandler = true;
}
public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardBasedVideoLoaded event received");
}
public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardBasedVideoFailedToLoad event received with message: "
                         + args.Message);
}
public void HandleRewardBasedVideoOpened(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardBasedVideoOpened event received");
}
public void HandleRewardBasedVideoStarted(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardBasedVideoStarted event received");
}
public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardBasedVideoClosed event received");
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
    MonoBehaviour.print(
        "HandleRewardBasedVideoRewarded event received for "
        + amount.ToString() + " " + type + " " + rewardBasedVideo.MediationAdapterClassName());
}
public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardBasedVideoLeftApplication event received");
}
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  • RewardVideoAdインスタンスは、動画リワード広告を操作するためのシングルトンオブジェクトとなります。
  • RewardVideoAdインスタンスがシングルトンオブジェクトのため、イベント重複を避けるためにイベント登録は1回だけにすることを推奨します。

VideoRewardData は下記プロパティを所持しています。

public class VideoRewardData : EventArgs
{
    // 名前
    // ※ iOSの場合は、常にnullとなります。
    public string AdName { get; set; }
    // 金額
    public double Amount { get; set; }
    // 種類
    public string Type { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11

VideoRewardFailedData は下記プロパティを所持しています。

public class VideoRewardFailedData : EventArgs
{
    // アドネットワーク名
    // ※ iOSの場合は、常にnullとなります。
    public string AdnetworkName { get; set; }
    // コード
    public int Code { get; set; }
    // メッセージ
    public string Message { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11

6. AdManager広告取得失敗時の動画リワード広告のロード

AdManager/AdMobの取得失敗HandleRewardBasedVideoFailedToLoadのイベント内に以下を追加してください。

public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardBasedVideoFailedToLoad event received with message: "
        + args.Message);
    string zoneId = "";
#if UNITY_ANDROID
    zoneId = "ここにzoneIdを入れてください";
#elif UNITY_IPHONE
    zoneId = "ここにzoneIdを入れてください";
#endif
    RewardVideoAd rewardVideoAd = RewardVideoAd.Instance;
    rewardVideoAd.LoadAd(zoneId);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • RewardVideoAdインスタンスは、動画リワード広告を操作するためのシングルトンオブジェクトとなります。

7. GoogleMobileAds広告取得失敗時の動画リワードインスタンス破棄処理を追加

Androidの場合OnDestroy時に破棄処理を行うため、下記のようにApplication.Quitのコールバックを設定してください。 ※ iOSのみ作成する場合は、必須ではありません。

using GNSAdSDK.Api;

...

void OnApplicationQuit()
{
    RewardVideoAd.Instance.DisposeAd();
}
1
2
3
4
5
6
7
8
9

8. 動画リワード広告の表示

以下は、動画リワード広告の表示に必要なコードです。 GoogleMobileAds動画リワードが未ロード且つ、 GoogleMobileAds広告取得失敗時にリクエストした動画リワードのロードが完了していた場合、 ShowAd()の呼び出しが可能となります。

using GNSAdSDK.Api;

...

void ShowRewardVideoAd()
{
    RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
    RewardVideoAd rewardVideoAd = RewardVideoAd.Instance;
    if (rewardBasedVideo.IsLoaded())
    {
        rewardBasedVideo.Show();
    }
    else
    {
        if (rewardVideoAd.IsLoaded())
        {
            rewardVideoAd.ShowAd();
        } else {
            MonoBehaviour.print("Not yet been loaded");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Last Updated: 2020/7/21 14:47:08