カスタムのネイティブ広告フォーマット

アド マネージャーをご利用の場合、アセットリストをカスタム定義して、独自のネイティブ広告フォーマットを作成することが可能です。これをカスタム ネイティブ広告フォーマットと呼び、純広告で利用できます。カスタム ネイティブ広告を使うと、アプリに任意の画像や文字列データを渡すことができます。このデータは、CustomNativeAd オブジェクトで表されます。

カスタム ネイティブ広告を読み込む

カスタムのネイティブ広告の読み込みには AdLoader オブジェクトを使用します。AdLoaderForCustomNativeAd() メソッドで設定することにより、カスタム ネイティブ広告を扱う仕組みです。このメソッドには次の 2 つのパラメータがあります。

  • AdLoader がリクエストするべきカスタム広告の formatId。各カスタム ネイティブ広告フォーマットには、それぞれフォーマット ID 値が関連付けられています。このパラメータは、アプリが AdLoader にリクエストさせるフォーマットを指定する役割を持ちます。
  • ユーザーが広告をクリックした際に呼び出される Action<CustomNativeAd, string>(省略可)。

カスタム ネイティブ広告の読み込みには AdLoader クラスを使用します。このクラスは、独自の AdLoader.Builder クラスを使って作成時にカスタマイズできるようになっています。AdLoaderForCustomNativeAd() メソッドで設定することにより、ネイティブ広告を扱う仕組みです。

void LoadCustomNativeAd()
{
    AdLoader adLoader = new AdLoader.Builder("/21775744923/example/native")
            .ForCustomNativeAd("10063170")
            .Build();
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

1 つの広告ユニットを、複数のネイティブ広告フォーマットを配信するように設定できるため、異なるフォーマット ID で繰り返し ForCustomNativeAd() を呼び出すことにより、広告ローダーを複数のカスタム ネイティブ広告フォーマットに対応させることも可能です。

カスタム ネイティブ広告イベント

AdLoader クラスには、カスタム ネイティブ広告のライフサイクルについて通知する EventHandler タイプの広告イベントが用意されています。以下の例では、カスタムのネイティブ広告のイベントを広告ローダーに登録する方法を示しています。

private AdLoader adLoader;
adLoader.OnCustomNativeAdLoaded += HandleCustomNativeAdLoaded;
adLoader.OnAdFailedToLoad += HandleCustomNativeAdFailedToLoad;

HandleCustomNativeAdLoaded() メソッドには CustomNativeAdEventArgs パラメータが含まれており、このイベント パラメータを介して、読み込まれたカスタム ネイティブ広告にアクセスできます。次の例をご覧ください。

void HandleCustomNativeAdLoaded(object sender, CustomNativeAdEventArgs args)
{
    this.customNativeAd = args.nativeAd;
}

HandleCustomNativeAdFailedToLoad() メソッドには AdFailedToLoadEventArgs パラメータが含まれています。エラー メッセージにアクセスするには、次のように LoadAdError フィールドで GetMessage メソッドを呼び出します。

void HandleCustomNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    string message = args.LoadAdError.GetMessage();
    Debug.Log("Ad Loader fail event received with message: " + message);
}

カスタム ネイティブ広告フォーマットを表示する

カスタムのネイティブ広告では、ユーザー定義の画像アセットとテキスト アセットをいくつでも使用できます。これらのアセットには CustomNativeAd クラスを通じてアクセスします。このクラスには、パラメータとしてフォーマット フィールドの変数 ID を取る GetTexture2D() および GetText() メソッドが用意されています。

カスタム ネイティブ広告からアセットにアクセスする場合の実装例を次に示します。

private bool adLoaded;
private Texture2D mainImageTexture;
private string headline;
private CustomNativeAd customNativeAd;
...

void Update()
{
    if(adLoaded)
    {
        mainImageTexture = customNativeAd.GetTexture2D("MainImage");
        headline = customNativeAd.GetText("Headline");
        adLoaded = false;
    }
}
...
void HandleCustomNativeAdLoaded(object sender, CustomNativeAdEventArgs args)
{
    customNativeAd = args.nativeAd;
    adLoaded = true;
    ...
}

カスタム ネイティブ広告のインプレッションとクリックを処理する

カスタム ネイティブ広告では、インプレッションの記録と、クリック イベントを SDK に報告する処理を、アプリ側で行う必要があります。

インプレッションを記録する

カスタム広告のインプレッションを記録するには、対応する次の CustomNativeAdRecordImpression() メソッドを呼び出します。

customNativeAd.RecordImpression();

クリックを報告する

アセットでクリックが発生したことを SDK に報告するには、対応する CustomNativeAdPerformClick() メソッドを呼び出し、クリックされたアセットの名前を渡します。たとえば、「MainImag」というカスタム フォーマットにアセットが存在し、そのアセットに対応するテクスチャで発生したクリックを報告する場合、コードは次のようになります。

customNativeAd.PerformClick("MainImage");

カスタム クリック アクションに対応する

カスタム広告でクリックが報告されると、SDK から想定されるレスポンスが次の順序で試行されます。

  1. その広告のディープリンク URL に対応するコンテンツ リゾルバを特定し、対応可能な最初のリゾルバを開始する。

  2. ブラウザを開き、広告の従来のリンク先 URL に移動する。

カスタム ネイティブ広告フォーマットで発生したクリック アクションに対して、ユーザーをディープリンクやウェブブラウザに誘導するのではなく、独自に対応したい場合、AdLoader.Builder.ForCustomNativeAd() メソッド内でオプションの Action<CustomNativeAd, string> を指定します。このカスタム クリック アクションを設定すると、SDK のクリック動作をオーバーライドすることになります。あるアセットのクリックをカスタム クリック アクションで記録するコードは、次の例のようになります。

private void LoadCustomNativeAd()
{
    AdLoader adLoader = new AdLoader.Builder("/21775744923/example/native")
            .ForCustomNativeAd("10063170", HandleCustomNativeAdClicked)
            .Build();
    adLoader.OnCustomNativeAdLoaded += HandleCustomNativeAdLoaded;
    adLoader.LoadAd(createAdRequest());
}

private void HandleCustomNativeAdClicked(CustomNativeAd customNativeAd, string assetName)
{
    Debug.Log("Custom Native ad asset with name " + assetName + " was clicked.");
}