このガイドでは、ネイティブ広告アドオンを使用して Unity アプリに AdMob ネイティブ広告を実装する方法と、その過程で考慮すべき重要な事項について説明します。
ネイティブ広告は、広告掲載場所でユーザーが体験しているデザインと機能の両方にマッチするフォーマットです。使用するアプリのビジュアル デザインとも一致します。 AdMob のネイティブ広告フォーマットを使用すると、パブリッシャー様はコンテンツと調和した広告を掲載できます。このテクノロジーを使用すると、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());
広告リクエストを 1 つにまとめる
以下のコード スニペットでは、ネイティブ広告をリクエストするよう設定し、広告の読み込みの成功と失敗のデリゲートを設定して、広告リクエストを行う 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
コンポーネントがない場合や、正しく設定されていない場合、ネイティブ広告は正しく動作しません。
以下のコード スニペットでは、TextMesh
を使用してネイティブ広告の広告見出しアセットを表示する BoxCollider
が GameObject
に追加されています。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;
}