インフィード広告実装方法 - glossom-dev/AdfurikunSDK-Unity GitHub Wiki

インフィード

アドフリくんではこちらの説明にもありますように様々なタイプのインフィード広告を提供しています。

広告種類 動画 静止画 サイズ 説明
ネイティブ 16:9 or 任意 動画と静止画表示ができる
モバイルバナー 320*50 320*50サイズの静止画表示ができる
レクタングル 300*250 300*250サイズの静止画表示ができる

実装

実装手順より、GameObjectを設置し、AdfurikunNativeAdUtilityを付与している状態だとします。
レクタングルの場合は、AdfurikunRectangleUtility、バナーの場合は、AdfurikunBannerUtilityを付与している状態だとします。
その場合、以下実装例のAdfurikunNativeAdUtilityの部分をAdfurikunRectangleUtilityに書き換えて下さい。
Androidの場合は初期化関数(initializeNativeAdView)を呼び出す必要があります。

GameObject取得、デリゲートコールバック実装

NativeAd

ネイティブ広告の場合は引数に広告のwidth,heightのpixelサイズを渡す必要があります。以下実装例のconvertDpToPx関数を参考にして下さい。

    /*
     Androidの場合dpサイズをpixelサイズに変換する必要があります
     */
    private int convertDpToPx(int size)
    {
        float density = Screen.dpi / 160;
        return (int)(size * density);
    }
    
    void Start()
    {
        var nativeObj = GameObject.Find("GameObject名");
        if (nativeObj != null)
        {
            nativeAdUtility = nativeObj.GetComponent<AdfurikunNativeAdUtility>();
            if (Application.platform == RuntimePlatform.Android)
            {
                // サイズは広告種類に応じて変更して下さい
                int width = convertDpToPx(320);
                int height = convertDpToPx(180);
                // AndroidのみinitializeNativeAdView関数を呼び出す必要があります
                nativeAdUtility.initializeNativeAdView(width, height);
                // 
            }
            nativeAdUtility.onLoadFinish = HandleLoadFinish;
            nativeAdUtility.onLoadError = HandleLoadError;
            nativeAdUtility.onPlayStart = HandlePlayStart;
            nativeAdUtility.onPlayFinish = HandlePlayFinish;
            nativeAdUtility.onPlayError = HandlePlayError;
            nativeAdUtility.onClicked = HandleOnClicked;
        }
    }

    void HandleLoadFinish(string appId)
    {
        //広告準備完了
    }

    void HandleLoadError(string appId, int errorCode, List<AdNetworkError> adNetworkErrorList)
    {
        //広告準備失敗
    }

    void HandlePlayStart(string appId)
    {
        //動画再生開始
    }

    void HandlePlayFinish(string appId, bool isVideo)
    {
        //動画再生完了
    }

    void HandlePlayError(string appId, string errorCode, List<AdNetworkError> adNetworkErrorList)
    {
        //動画再生失敗
    }

    void HandleOnClicked(string appId)
    {
        //広告クリック
    }
Banner
    
    void Start()
    {
        var bannerObj = GameObject.Find("GameObject名");
        if (bannerObj != null)
        {
            bannerUtility = nativeObj.GetComponent<AdfurikunBannerUtility>();
            if (Application.platform == RuntimePlatform.Android)
            {
                // AndroidのみinitializeBannerView関数を呼び出す必要があります
                bannerUtility.initializeBannerView(); 
            }
            bannerUtility.onLoadFinish = HandleLoadFinish;
            bannerUtility.onLoadError = HandleLoadError;
            bannerUtility.onPlayStart = HandlePlayStart;
            bannerUtility.onPlayFinish = HandlePlayFinish;
            bannerUtility.onPlayError = HandlePlayError;
            bannerUtility.onClicked = HandleOnClicked;
        }
    }

    void HandleLoadFinish(string appId)
    {
        //広告準備完了
    }

    void HandleLoadError(string appId, int errorCode)
    {
        //広告準備失敗
    }

    void HandlePlayStart(string appId)
    {
        //動画再生開始
    }

    void HandlePlayFinish(string appId, bool isVideo)
    {
        //動画再生完了
    }

    void HandlePlayError(string appId, string errorCode)
    {
        //動画再生失敗
    }

    void HandleOnClicked(string appId)
    {
        //広告クリック
    }
Rectangle
    
    void Start()
    {
        var rectangleObj = GameObject.Find("GameObject名");
        if (rectangleObj != null)
        {
            rectangleUtility = rectangleObj.GetComponent<AdfurikunRectangleUtility>();
            if (Application.platform == RuntimePlatform.Android)
            {
                // AndroidのみinitializeRectangleView関数を呼び出す必要があります
                rectangleUtility.initializeRectangleView(); 
            }
            rectangleUtility.onLoadFinish = HandleLoadFinish;
            rectangleUtility.onLoadError = HandleLoadError;
            rectangleUtility.onPlayStart = HandlePlayStart;
            rectangleUtility.onPlayFinish = HandlePlayFinish;
            rectangleUtility.onPlayError = HandlePlayError;
            rectangleUtility.onClicked = HandleOnClicked;
        }
    }

    void HandleLoadFinish(string appId)
    {
        //広告準備完了
    }

    void HandleLoadError(string appId, int errorCode)
    {
        //広告準備失敗
    }

    void HandlePlayStart(string appId)
    {
        //動画再生開始
    }

    void HandlePlayFinish(string appId, bool isVideo)
    {
        //動画再生完了
    }

    void HandlePlayError(string appId, string errorCode)
    {
        //動画再生失敗
    }

    void HandleOnClicked(string appId)
    {
        //広告クリック
    }

広告のロード

loadMovieReward()関数を呼び出して広告のロードを行います。

public void Load ()
{
    nativeAdUtility.loadNativeAdView();
}

サイズ、位置の指定

setNativeAdView関数で広告のサイズ、位置を指定できます。
指定方法は他の関数もあります。インフィード広告クラスの説明をご参考下さい。

nativeAdUtility.setNativeAdView(x, y, width, height);

広告表示

playNativeAdView()関数を呼び出して広告の表示を行います。

public void Show ()
{
    if (nativeAdUtility != null)
    {
        nativeAdUtility.playNativeAdView();
    }
}

広告の非表示

hideNativeAdView()関数で広告を非表示にします。
この関数を呼び出さない限り広告は画面に残り続けます。

public void Back ()
{
    if (nativeAdUtility != null)
    {
        //広告を非表示にする。
        nativeAdUtility.hideNativeAdView();
    }
}

注意点

Androidでネイティブ広告を表示するActivityに関して

※Unityバージョン2018以降からサンプルの「Assets/Editor/AdfurikunManifestModify.cs」ファイルをProjectの「Assets/Editor」にコピーしてください。
※AndroidManifest.xmlのネイティブ広告を表示するActivityの項目に、以下の内容を設定してください。

android:hardwareAccelerated="true"

インフィード広告の実装ガイドライン

サイズ目安について

広告の視認性確保のため、以下を目安に実装をお願いします。

  • 縦画面: 動画広告の横幅が画面横幅の50%以上であること
  • 横画面: 動画広告の横幅が画面横幅の25%以上であること

※上記基準を下回る場合は、広告の配信が停止される可能性がございますので、ご了承ください。

複数表示について

  • 現在、複数枠には対応していません。
  • 広告枠IDを使いまわすことも可能ですが、1画面で1箇所の設置を推奨します。
  • また、設置箇所ごとのレポートは参照できず合算されます。
  • 同一ページや1アプリ内で複数設置する場合は、メモリー負荷や通信量を抑制するため、不要なインスタンスは破棄することを推奨します。

表示位置・サイズの変更

AdfurikunNativeAdViewUtilityのsetNativeAdViewFrame APIはデバイスによって表示位置・サイズの違いを統一して表示することができます。

AdfurikunNativeAdViewUtility nativeAdViewUtility = GameObject.Find("AdfurikunNativeAdViewUtility").GetComponent<AdfurikunNativeAdViewUtility>();
nativeAdViewUtility.setNativeAdViewFrame(0, 0, 100, 100);

掲載位置指定

AdfurikunNativeAdViewUtilityのsetFrameGravity 及び setFitWidthFrame APIは掲載位置を指定して表示する機能を提供します。

public void setFrameGravity (string appId, float displaySizeW, float displaySizeH, float width, float height, int horizontalGravity, int verticalGravity)
指定した掲載位置及びサイズで、動画広告を表示する
@param string appID 広告枠ID
@param float visibleSizeW 表示画面のサイズ()
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの幅
@param float visibleSizeH 表示画面のサイズ(高さ)
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの高さ
@param float width 広告枠の横幅
@param float height 広告枠の高さ
@param int horizontalGravity 水平方向での広告の掲載位置
ex).
0 : 画面の左端
1 : 画面中央
2 : 画面の右端

@param int verticalGravity 垂直方向での広告の掲載位置
ex).
0 : 画面上部
1 : 画面中央
2 : 画面下部


public void setFitWidthFrame (string appId, float displaySizeH, float height, int verticalGravity)
広告をアスペクト比を維持したまま、画面の横幅いっぱいまで広げて表示させます。
@param string appId ... 広告枠ID
@param float visibleSizeH ... 表示画面の高さ
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの高さ
@param float height ... 広告枠の高さ
@param int verticalGravity ... 垂直方向での広告の掲載位置
ex).
0 : 画面上部
1 : 画面中央
2 : 画面下部

広告の自動切り替えの実装方法

広告の表示内容を一定時間おきに更新するには、アプリケーション側での実装が必要です。
以下に記載したサンプルアプリのバナー広告における実装例を参考にしてください。

// アドフリくんのGameObjectを取得
GameObject bannerObject = GameObject.Find("AdfurikunBannerUtility");

// デリゲートを設定
private AdfurikunBannerUtility bannerUtility = bannerObject.GetComponent.<AdfurikunBannerUtility>();
if (Application.platform == RuntimePlatform.Android)
{
    bannerUtility.initializeBannerView(広告の横サイズ, 広告の縦サイズ);
}
bannerUtility.onLoadFinish = this.OnLoadFinish;
bannerUtility.onLoadError = this.OnLoadError;
bannerUtility.onPlayStart = this.OnPlayStart;
bannerUtility.onPlayFinish = this.OnPlayFinish;
bannerUtility.onPlayError = this.OnPlayError;
bannerUtility.onClicked = this.OnClicked;

/*
自動切り替えロード
*/
void AutoRefreshLoad()
{
    if (bannerUtility != null)
    {
        // 広告をロード
        bannerUtility.loadBannerView();
    }
}

/*
広告ビューをセットアップ
*/
private void setupView()
{
    if (bannerUtility != null) 
    {
        // ビューをセットアップする
        x = (Screen.width - width) / 2;
        y = (Screen.height / 2) - (height / 2);
        bannerUtility.setBannerView(x, y, width, height);
    }
}

/*
広告準備完了時
*/
void OnLoadFinish(string appId)
{
    // リトライカウントを初期化
    mLoadRetryCount = 0;
    // 広告ビューをセットアップ
    setupView();
    // 広告を表示する
    if (bannerUtility != null)
    {
        bannerUtility.playBannerView();
    }
    // 60秒後に再ロードを行う
    Invoke("AutoRefreshLoad", 60);
}

/*
広告準備失敗時
*/
void OnLoadError(string appId, int errorCode)
{
    // 広告読み込み中エラー(iOSは「999」Androidは「2」)以外の場合、広告表示のリトライ処理
    if ((errorCode != 999 && errorCode != 2) && mLoadRetryCount < 5)
    {
        AutoRefreshLoad();
        mLoadRetryCount++;
    }
}
⚠️ **GitHub.com Fallback** ⚠️