前提条件
カスタム イベントの設定を完了します。
ネイティブ広告をリクエストする
ウォーターフォール メディエーション チェーンでカスタム イベント広告申込情報に到達すると、
次のコマンドを実行すると、指定したクラス名で loadNativeAd()
メソッドが呼び出されます。
カスタム テーブルを作成する
イベントをご覧ください。この例では
このメソッドは SampleCustomEvent
にあり、
SampleNativeCustomEventLoader
の loadNativeAd()
メソッド。
ネイティブ広告をリクエストするには、Adapter
を拡張するクラスを作成または変更して、
loadNativeAd()
を実装する。Adapter
を拡張するクラスがすでに存在する場合、
そこで loadNativeAd()
を実装します。さらに、新しいクラスを作成して実装し、
UnifiedNativeAdMapper
。
このカスタム イベントの例では、
SampleCustomEvent
は Adapter
クラスを拡張してから、デリゲートします。
SampleNativeCustomEventLoader
。
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleCustomEvent extends Adapter { private SampleNativeCustomEventLoader nativeLoader; @Override public void loadNativeAd( @NonNull MediationNativeAdConfiguration adConfiguration, @NonNull MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> callback) { nativeLoader = new SampleNativeCustomEventLoader(adConfiguration, callback); nativeLoader.loadAd(); } }
SampleNativeCustomEventLoader
は次のタスクを行います。
ネイティブ広告を読み込んでいます。
UnifiedNativeAdMapper
クラスを実装する。広告イベント コールバックを受信して Google Mobile Ads SDK に送ります。
アド マネージャーの UI で定義されているオプション パラメータは、
広告設定に含まれていますこのパラメータには、
adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)
。
このパラメータは通常、広告ネットワーク SDK で実装される
渡す必要があります。
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationNativeAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationNativeAdCallback; ... public class SampleNativeCustomEventLoader extends SampleNativeAdListener { /** Configuration for requesting the native ad from the third-party network. */ private final MediationNativeAdConfiguration mediationNativeAdConfiguration; /** Callback that fires on loading success or failure. */ private final MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> mediationAdLoadCallback; /** Callback for native ad events. */ private MediationNativeAdCallback nativeAdCallback; /** Constructor */ public SampleNativeCustomEventLoader( @NonNull MediationNativeAdConfiguration mediationNativeAdConfiguration, @NonNull MediationAdLoadCallback<MediationNativeAd, MediationNativeAdCallback> mediationAdLoadCallback) { this.mediationNativeAdConfiguration = mediationNativeAdConfiguration; this.mediationAdLoadCallback = mediationAdLoadCallback; } /** Loads the native ad from the third-party ad network. */ public void loadAd() { // Create one of the Sample SDK's ad loaders to request ads. Log.i("NativeCustomEvent", "Begin loading native ad."); SampleNativeAdLoader loader = new SampleNativeAdLoader(mediationNativeAdConfiguration.getContext()); // All custom events have a server parameter named "parameter" that returns // back the parameter entered into the UI when defining the custom event. String serverParameter = mediationNativeAdConfiguration .getServerParameters() .getString(MediationConfiguration .CUSTOM_EVENT_SERVER_PARAMETER_FIELD); Log.d("NativeCustomEvent", "Received server parameter."); loader.setAdUnit(serverParameter); // Create a native request to give to the SampleNativeAdLoader. SampleNativeAdRequest request = new SampleNativeAdRequest(); NativeAdOptions options = mediationNativeAdConfiguration.getNativeAdOptions(); if (options != null) { // If the NativeAdOptions' shouldReturnUrlsForImageAssets is true, the adapter should // send just the URLs for the images. request.setShouldDownloadImages(!options.shouldReturnUrlsForImageAssets()); request.setShouldDownloadMultipleImages(options.shouldRequestMultipleImages()); switch (options.getMediaAspectRatio()) { case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_LANDSCAPE: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_LANDSCAPE); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_PORTRAIT: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_PORTRAIT); break; case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_SQUARE: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_ANY: case NativeAdOptions.NATIVE_MEDIA_ASPECT_RATIO_UNKNOWN: default: request.setPreferredImageOrientation(SampleNativeAdRequest.IMAGE_ORIENTATION_ANY); } } loader.setNativeAdListener(this); // Begin a request. Log.i("NativeCustomEvent", "Start fetching native ad."); loader.fetchAd(request); } }
広告が正常に取得されたか、エラーが発生したかに応じて、
呼び出すと、
onSuccess()
または
onFailure()
。
onSuccess()
は、次の実装を実装するクラスのインスタンスを渡すことで呼び出されます。
MediationNativeAd
。
通常、これらのメソッドは
実装する必要があります。この例では、サンプル SDK が
関連するコールバックを含む SampleAdListener
がある
Java
@Override public void onNativeAdFetched(SampleNativeAd ad) { SampleUnifiedNativeAdMapper mapper = new SampleUnifiedNativeAdMapper(ad); mediationNativeAdCallback = mediationAdLoadCallback.onSuccess(mapper); } @Override public void onAdFetchFailed(SampleErrorCode errorCode) { mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode)); }
ネイティブ広告をマッピングする
SDK ごとに、ネイティブ広告用の独自のフォーマットがあります。別のユーザーが 「title」を含むオブジェクト別のフィールドを別のフィルタに 「headline」。また、インプレッションのトラッキングと SDK ごとにクリック数は異なります。
UnifiedNativeAdMapper
はこれらの差異を調整し、
メディエーションされる SDK のネイティブ広告オブジェクトを、
Google Mobile Ads SDK を使用しますカスタム イベントはこのクラスを拡張して、
独自のマッパーが用意されますサンプル広告マッパーが
次のサンプル カスタム イベント プロジェクトを使用します。
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper; import com.google.android.gms.ads.nativead.NativeAd; ... public class SampleUnifiedNativeAdMapper extends UnifiedNativeAdMapper { private final SampleNativeAd sampleAd; public SampleUnifiedNativeAdMapper(SampleNativeAd ad) { sampleAd = ad; setHeadline(sampleAd.getHeadline()); setBody(sampleAd.getBody()); setCallToAction(sampleAd.getCallToAction()); setStarRating(sampleAd.getStarRating()); setStore(sampleAd.getStoreName()); setIcon( new SampleNativeMappedImage( ad.getIcon(), ad.getIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setAdvertiser(ad.getAdvertiser()); List<NativeAd.Image> imagesList = new ArrayList<NativeAd.Image>(); imagesList.add(new SampleNativeMappedImage(ad.getImage(), ad.getImageUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE)); setImages(imagesList); if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); } Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras); setOverrideClickHandling(false); setOverrideImpressionRecording(false); setAdChoicesContent(sampleAd.getInformationIcon()); } @Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); } // The Sample SDK doesn't do its own impression/click tracking, instead relies on its // publishers calling the recordImpression and handleClick methods on its native ad object. So // there's no need to pass a reference to the View being used to display the native ad. If // your mediated network does need a reference to the view, the following method can be used // to provide one. @Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { super.trackViews(containerView, clickableAssetViews, nonClickableAssetViews); // If your ad network SDK does its own impression tracking, here is where you can track the // top level native ad view and its individual asset views. } @Override public void untrackView(View view) { super.untrackView(view); // Here you would remove any trackers from the View added in trackView. } }
次に、コンストラクタ コードを詳しく見てみましょう。
メディエーション向けネイティブ広告オブジェクトへの参照を保持する
コンストラクタは、SampleNativeAd
パラメータ(使用するネイティブ広告クラス)を受け取ります。
サンプル SDK によってネイティブに処理されますマッパーには、
クリック イベントとインプレッション イベントを渡すようにする必要があります。SampleNativeAd
は
ローカル変数として格納されます。
マッピングされたアセット プロパティを設定する
コンストラクタは、SampleNativeAd
オブジェクトを使用して、
UnifiedNativeAdMapper
。
このスニペットでは、メディエーションが行われた広告の価格データを取得し、それを使用してマッパーの広告の価格を 価格:
Java
if (sampleAd.getPrice() != null) { NumberFormat formatter = NumberFormat.getCurrencyInstance(); String priceString = formatter.format(sampleAd.getPrice()); setPrice(priceString); }
この例では、メディエーションされる広告では価格が double
として保存されますが、
アド マネージャーでは、同じアセットに String
が使用されます。「
マッパーがこれらのタイプのコンバージョンを処理します。
画像アセットをマッピングする
画像アセットのマッピングは、次のようなデータ型のマッピングよりも複雑です。
double
または String
。画像は自動的にダウンロードされるか、
URL 値として返されます。ピクセルから dpi へのスケーリングもさまざまです。
Google Mobile Ads SDK では、こうした細かい設定を簡単に管理できるよう、
NativeAd.Image
クラス。これと同じように、サブクラスを作成して
を UnifiedNativeAdMapper
でマッピングするには、メディエーションされるネイティブ広告をマッピングする場合、
画像アセットをマッピングする場合の NativeAd.Image
のサブクラス。
カスタム イベントの SampleNativeMappedImage
クラスの例を以下に示します。
Java
public class SampleNativeMappedImage extends NativeAd.Image { private Drawable drawable; private Uri imageUri; private double scale; public SampleNativeMappedImage(Drawable drawable, Uri imageUri, double scale) { this.drawable = drawable; this.imageUri = imageUri; this.scale = scale; } @Override public Drawable getDrawable() { return drawable; } @Override public Uri getUri() { return imageUri; } @Override public double getScale() { return scale; } }
SampleNativeAdMapper
は、この行にマッピングされた画像クラスを使用して、
マッパーのアイコン画像アセット:
Java
setIcon(new SampleNativeMappedImage(ad.getAppIcon(), ad.getAppIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE));
エクストラ バンドルにフィールドを追加する
メディエーションされる SDK によっては、
アド マネージャーのネイティブ広告フォーマットですUnifiedNativeAdMapper
クラスに含まれる setExtras()
メソッドを使用すると、アセットを
ありますSampleNativeAdMapper
は、サンプル SDK の
「レベルの素晴らしさ」asset:
Java
Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras);
パブリッシャーは、NativeAd
クラスを使用してデータを取得できます。getExtras()
メソッドを呼び出します。
AdChoices
カスタム イベントは、
UnifiedNativeAdMapper
の setAdChoicesContent()
メソッド。こちらが
AdChoices アイコンを提供する方法を示す SampleNativeAdMapper
:
Java
public SampleNativeAdMapper(SampleNativeAd ad) { ... setAdChoicesContent(sampleAd.getInformationIcon()); }
インプレッション イベントとクリック イベント
Google Mobile Ads SDK とメディエーション向け SDK の両方とも、 インプレッションまたはクリックが発生しますが、これらのイベントをトラッキングする必要がある SDK は 1 つだけです。そこで、 カスタム イベントで使用できる 2 種類のアプローチは、 メディエーション向け SDK は、インプレッションとクリックの独自のトラッキングをサポートしています。
Google Mobile Ads SDK を使ってクリックとインプレッションをトラッキングする
メディエーション向け SDK が独自のインプレッションとクリックのトラッキングを実行せず、
クリックとインプレッションを記録するメソッドを提供するため、Google Mobile Ads SDK では
追跡してアダプタに通知します「
UnifiedNativeAdMapper
クラスには、次の 2 つのメソッドが含まれます。
recordImpression()
と handleClick()
カスタム イベントは、メディエーションされる
ネイティブ広告オブジェクト:
Java
@Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); }
SampleNativeAdMapper
がサンプル SDK のネイティブへのリファレンスを保持しているため
そのオブジェクトの適切なメソッドを呼び出して、クリックをレポートできます。
です。handleClick()
メソッドは
単一パラメータ: 広告アセットに対応する View
オブジェクト
確認しました
メディエーション向け SDK でクリックとインプレッションをトラッキングする
メディエーション向け SDK の中には、クリックとインプレッションを独自にトラッキングしたいものがあります。イン
デフォルトのクリックとインプレッションのトラッキングを
次の 2 つの呼び出しを、
UnifiedNativeAdMapper
:
Java
setOverrideClickHandling(true); setOverrideImpressionRecording(true);
クリックとインプレッションのトラッキングをオーバーライドするカスタム イベントは、
onAdClicked()
イベントと onAdImpression()
イベントを Google モバイルに報告する
。
インプレッションとクリックをトラッキングするには、メディエーションされる SDK がおそらく
ビューに移動してトラッキングを有効にしますカスタム イベントは
trackViews()
メソッドを呼び出し、これを使用してネイティブ広告のビューをメディエーション対象
追跡する SDKカスタム イベント サンプル プロジェクトのサンプル SDK(
(このガイドのコード スニペットは使用されている)では、このアプローチは使用していません。でも、
変更された場合、カスタム イベントコードは次のようになります。
Java
@Override public void trackViews(View containerView, Map<String, View> clickableAssetViews, Map<String, View> nonClickableAssetViews) { sampleAd.setNativeAdViewForTracking(containerView); }
メディエーション向け SDK が個々のアセットのトラッキングをサポートしている場合、その SDK は内部
clickableAssetViews
: クリック可能にするビューを確認します。この地図は
NativeAdAssetNames
のアセット名をキーにしています。UnifiedNativeAdMapper
カスタム イベントによってオーバーライドできる、対応する untrackView()
メソッドが用意されている
ビューへの参照をすべて解放してネイティブ広告との関連付けを解除する
渡されます。
メディエーション イベントを Google Mobile Ads SDK に転送する
メディエーションでサポートされているすべてのコールバックは、
MediationNativeAdCallback
ドキュメント。
カスタム イベントは、できるだけ多くのコールバックを これにより、アプリはこれらの同等のイベントを Google Mobile Ads SDK があります。コールバックの使用例を次に示します。
これで、ネイティブ広告のカスタム イベントの実装が完了しました。サンプル全体 は GitHub。