このガイドでは、ネイティブ広告アドオンを使用して Unity アプリにネイティブ広告を実装する方法と、その過程で考慮すべき重要な点について説明します。
ネイティブ広告は、広告掲載場所でユーザーが体験しているデザインと機能の両方にマッチするフォーマットです。また、配信中のアプリのビジュアル デザインにもマッチします。 アド マネージャーのネイティブ広告フォーマットを使用すると、コンテンツに違和感なく溶け込む広告を表示できます。この技術を使用すると、Unity アプリのネイティブ コードを最大限に活用して高度なカスタム レンダリングを実装できます。
ネイティブ広告は、すでに作成しているアプリと同じタイプの GameObjects
を使用して表示され、ユーザー エクスペリエンスのビジュアル デザインに合わせてフォーマットできます。ネイティブ広告が読み込まれると、アプリはそのアセットを含むネイティブ オブジェクトを受け取り、SDK ではなく Unity アプリで広告を表示します。
前提条件
ネイティブ広告フォーマットを読み込む
ネイティブ広告は、AdLoader
クラスを介して読み込まれます。このクラスには、作成時にカスタマイズするための独自の AdLoader.Builder
クラスがあります。ForNativeAd()
メソッドは、ネイティブ広告を処理するように AdLoader を設定します。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
AdLoader 広告イベントを登録する
ネイティブ広告の読み込みが成功または失敗したときに通知を受け取るには、下記のイベントの AdLoader
クラスにデリゲートを追加します。
OnNativeAdLoaded
ネイティブ広告が正常に読み込まれたときに呼び出されます。読み込まれた広告にアクセスするには、このイベントのデリゲートが必要です。
OnAdFailedToLoad
ネイティブ広告の読み込みに失敗したときに呼び出されます。
広告を読み込む
AdLoader
の作成が完了したら、その LoadAd()
メソッドを呼び出して広告をリクエストします。
adLoader.LoadAd(new AdRequest.Builder().Build());
広告リクエストをまとめる
以下のコード スニペットは、ネイティブ広告をリクエストするように設定され、広告の読み込みの成功と失敗に対するデリゲートの設定、広告リクエストの送信を行う AdLoader
の作成方法を示しています。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
広告の読み込みの失敗を処理する
OnAdFailedToLoad
イベントのタイプは EventHandle<AdFailedToLoadEventArgs>
です。このイベントから広告の読み込みに失敗した理由を解析すると、次のようになります。
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
ネイティブ広告を表示する
ネイティブ広告が読み込まれると、対応する広告フォーマットの広告イベントが呼び出されます。広告を表示することはアプリが行いますが、すぐに表示する必要はありません。
広告の読み込みを処理する
OnNativeAdLoaded
イベントのタイプは EventHandler<NativeAdEventArgs>
です。次に示すように、広告は NativeAd
オブジェクトにカプセル化され、NativeAdEventArgs
から取得できます。
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
ネイティブ広告アセットを取得する
広告が読み込まれたら、以下に示すように広告のアセットにアクセスできます。画像および映像は Texture2D
オブジェクトとして返され、テキスト アセットは string
オブジェクトとして返されます。
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
広告アセットには、Unity スクリプトの Update()
メソッドなど、メインスレッドでのみアクセスします。また、次のアセットが常に存在するとは限りません。表示する前に確認する必要があります。
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
AdChoices アセット
AdChoices 広告アセットはネイティブ広告の一部として表示する必要があります。 また、AdChoices 広告アセットは見やすいことが重要です。適切な背景色と画像を選択してください。
広告アセットの GameObject を登録する
Unity アプリに表示される広告アセットの GameObject
を登録する必要があります。登録が成功すると、GameObject
の登録に使用されたメソッドから bool
が返されます。List<GameObject>
の場合、このメソッドは、正常に登録された GameObject
数を示す int
を返します。
広告アセットの登録に失敗した場合、対応するネイティブ広告のインプレッションとクリックは認識されません。
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
広告アセットに登録する GameObject
には、GameObject
のサイズと形状を表す凸型コライダー コンポーネントが必要です。広告アセットに登録されている GameObject
オブジェクトに Collider
コンポーネントがないか、正しく設定されていないと、ネイティブ広告は正しく動作しません。
以下のコード スニペットでは、BoxCollider
が GameObject
に追加され、TextMesh
を使用してネイティブ広告の広告見出しアセットを表示します。BoxCollider
を GameObject
に接続すると、TextMesh
コンポーネントのテキストに合わせて自動的にスケーリングされます。
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
デモ
次のコードは、正常に読み込まれたネイティブ広告のアイコン アセットを取得し、Quad
のテクスチャを設定してアイコン広告アセットを表示し、アセットの表示に使用する GameObject
を登録する方法を示しています。広告アセットを取得してネイティブ広告クラスに登録するこのプロセスは、アプリに表示されるアセットごとに繰り返す必要があります。
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}