このガイドでは、Google Mobile Ads Unity プラグインを使用して Unity アプリに AdMob ネイティブ アドバンス広告を実装する方法と、その過程で注意すべき事項を説明します。
ネイティブ広告は、広告が掲載される場所のユーザー エクスペリエンスに、形式と機能の両面でマッチするフォーマットです。掲載先のアプリの視覚的なデザインにもマッチします。 パブリッシャー様は AdMob のネイティブ アドバンス広告のフォーマットを使って、コンテンツと調和した広告を掲載できます。Unity アプリのネイティブ コードを最大限に活用し、表示方法を詳細にカスタマイズできます。
ネイティブ アドバンス広告は、作成中のアプリと同じ種類の GameObjects
を使って表示され、ユーザー エクスペリエンスの視覚デザインに溶け込むようフォーマットできます。ネイティブ広告の読み込み時に、アプリが広告のアセットを含むネイティブ広告オブジェクトを受け取ります。そして Unity アプリ(SDK ではなく)で広告表示の処理が行われます。
標準的なネイティブ アドバンス広告のフィールドには、アプリ インストールとコンテンツの 2 つがあります。
両方とも UnifiedNativeAd
で表され、このオブジェクトにはネイティブ広告のアセットが格納されます。一部のアセットは存在しない場合がありますので、表示する前にその存在を確認してください。
顧客の成功事例の紹介:
事例紹介 1
事例紹介 2
前提条件
- GitHub の Google モバイル広告プラグインの一般公開バージョンから移行する場合は、まず既存の Google モバイル広告のファイルをすべて削除します。
- ネイティブ アドバンス広告対応の Google Mobile Ads Unity プラグインのネイティブ広告ビルドをダウンロードします。
- スタートガイドの手順に沿って、モバイル広告の Unity プラグインをインポートし、Mobile Ads SDK を追加します。
ネイティブ広告フォーマットを読み込む
ネイティブ アドバンス広告の読み込みには、AdLoader
クラスを使用します。このクラスには、作成時にカスタマイズするための独自の AdLoader.Builder
があります。
ForUnifiedNativeAd()
メソッドで、AdLoader
を構成して、統合型ネイティブ広告を処理します。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForUnifiedNativeAd()
.Build();
}
AdLoader 広告イベントに登録する
ネイティブ アドバンス広告の読み込み成否通知を受け取るには、下記のイベントの AdLoader
クラスにデリゲートを追加します。
OnUnifiedNativeAdLoaded
- 統合型ネイティブ広告が正常に読み込まれたときに呼び出されます。読み込まれた広告にアクセスするには、このイベントのデリゲートが必要です。
OnAdFailedToLoad
- ネイティブ広告の読み込みに失敗したときに呼び出されます。
広告の読み込み
AdLoader
の作成が完了したら、LoadAd()
メソッドを呼び出して広告をリクエストします。
adLoader.LoadAd(new AdRequest.Builder().Build());
広告リクエストをまとめる
以下のコード スニペットは、AdLoader
を作成して、統合型ネイティブ広告をリクエストするよう設定する方法を示しています。また、広告の読み込みの成否を通知するデリゲートを設定したり、広告リクエストを行ったりする方法も示しています。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForUnifiedNativeAd()
.Build();
adLoader.OnUnifiedNativeAdLoaded += this.HandleUnifiedNativeAdLoaded;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
失敗した広告の読み込みを処理する
OnAdFailedToLoad
は、EventHandler<AdFailedToLoadEventArgs>
タイプのイベントです。広告の読み込みが失敗した理由をこのイベントから解析する方法を以下に示します。
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
MonoBehaviour.print("Native ad failed to load: " + args.Message);
}
広告の表示
ネイティブ アドバンス広告が読み込まれると、対応する広告フォーマットの広告イベントが呼び出されます。その後アプリが広告を表示しますが、すぐに表示する必要があるとは限りません。
広告読み込みを処理する
OnUnifiedNativeAdLoaded
は、EventHandler<UnifiedNativeAdEventArgs>
タイプのイベントです。次に示すように、広告は UnifiedNativeAd
オブジェクトにカプセル化され、UnifiedNativeAdEventArgs
から取得できます。
private UnifiedNativeAd nativeAd;
...
private void HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
MonoBehaviour.print("Unified Native ad loaded.");
this.nativeAd = args.nativeAd;
}
ネイティブ広告アセットを取得する
広告が読み込まれると、そのアセットには以下に示す方法でアクセスできます。画像アセットと映像アセットは Texture2D
オブジェクトとして返され、テキスト アセットは string
オブジェクトとして返されます。
private bool unifiedNativeAdLoaded;
private UnifiedNativeAd nativeAd;
...
void Update() {
...
if (this.unifiedNativeAdLoaded) {
this.unifiedNativeAdLoaded = false;
// Get Texture2D for 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 HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
MonoBehaviour.print("Unified native ad loaded.");
this.nativeAd = args.nativeAd;
this.unifiedNativeAdLoaded = true;
}
広告アセットには、たとえば Unity スクリプトの Update()
メソッドなど、メインスレッドでのみアクセスします。また、以下のアセットは必ず存在するとは限らないため、表示される前に確認する必要があります。
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
AdChoices アセット
AdChoices 広告アセットは、ネイティブ アドバンス広告の一部として表示することが必須となっています。また、AdChoices オーバーレイは簡単に判別できることが重要なため、適切な背景色と背景画像を選択します。
広告アセットの GameObjects を登録する
表示される各広告アセットに対して、Unity アプリ内でのアセットの表示に使用する GameObject
を登録する必要があります。GameObject
を広告アセットに登録するすべてのメソッドは、登録が成功したかどうかを示す bool
を返します。広告アセットの登録に失敗した場合、対応するネイティブ広告のインプレッションとクリックは認識されません。
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
広告アセットに登録される GameObject
には、GameObject
のサイズと形状を表すコンベックス型 Collider
コンポーネントが必要です。広告アセットに登録された 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 unifiedNativeAdLoaded;
private UnifiedNativeAd nativeAd;
...
void Update() {
...
if (this.unifiedNativeAdLoaded) {
this.unifiedNativeAdLoaded = 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 HandleUnifiedNativeAdLoaded(object sender, UnifiedNativeAdEventArgs args) {
MonoBehaviour.print("Unified native ad loaded.");
this.nativeAd = args.nativeAd;
this.unifiedNativeAdLoaded = true;
}