Doğal reklamlar özel etkinlikleri

Ön koşullar

Özel etkinlik ayarlarını tamamlayın.

Doğal reklam isteme

Özel etkinlik satır öğesine şelale uyumlulaştırma zincirinde ulaşıldığında, loadNativeAd() yöntemi, özel bakın. Böyle durumlarda bu yöntem SampleCustomEvent içindedir ve bu durumda SampleNativeCustomEventLoader içinde loadNativeAd() yöntemi.

Yerel reklam istemek için Adapter öğesini loadNativeAd() uygulayın. Adapter öğesini genişleten bir sınıf zaten varsa loadNativeAd() uygulayabilirsiniz. Ayrıca, uygulamak için yeni bir sınıf oluşturun UnifiedNativeAdMapper

Özel etkinlik örneğimizde, SampleCustomEvent, Adapter sınıfını genişletir ve ardından şuna yetki verir: 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 şu görevlerden sorumludur:

  • Doğal reklam yükleniyor.

  • UnifiedNativeAdMapper sınıfı uygulanıyor.

  • Google Mobile Ads SDK'sına reklam etkinliği geri çağırmaları alma ve raporlama.

Ad Manager kullanıcı arayüzünde tanımlanan isteğe bağlı parametre: dahil edilir. Parametreye adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD) Bu parametre, genellikle bir reklam ağı SDK'sının etkinleştirdiği reklam birimi tanımlayıcısıdır örnek oluştururken gerekir.

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);
  }
}

Reklamın başarılı bir şekilde getirilmesine veya bir hatayla karşılaşmasına bağlı olarak ondan birini onSuccess() veya onFailure(). onSuccess(), şunu uygulayan sınıfın bir örneğini geçirerek çağrılır: MediationNativeAd.

Genellikle bu yöntemler üçüncü taraf SDK'sı oluşturun. Bu örnekte, örnek SDK alakalı geri çağırmaları içeren bir SampleAdListener içeriyor:

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));
}

Doğal reklamları eşleştirme

Farklı SDK'ların, doğal reklamlar için kendi benzersiz biçimleri vardır. Birisi geri gelebilir "başlık" içeren nesneler bir diğeri ise "başlık". Ayrıca, gösterimleri ve süreci izlemek için kullanılan yöntemler tıklama sayısı SDK'dan SDK'ya değişiklik gösterebilir.

UnifiedNativeAdMapper bu farklılıkların uzlaştırılmasından sorumludur ve uyumlulaştırılmış bir SDK'nın yerel reklam nesnesini, Google Mobile Ads SDK'sı. Özel etkinlikler bu sınıfı genişleterek uyumlulaştırılmış SDK'larına özel kendi haritacılarına erişebilir. Aşağıda Google Ads'in sunduğu örnek bir örnek özel etkinlik projemiz:

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.
  }
}

Şimdi, oluşturucu koduna daha yakından bakalım.

Uyumlulaştırılmış yerel reklam nesnesine referans tutma

Oluşturucu, kullanılan yerel reklam sınıfı olan SampleNativeAd parametresini kabul eder tarafından sunulan örnek SDK'lar. Haritacının uyumlulaştırılmış reklamı, tıklama ve gösterim etkinliklerini iletebilmesi için kullanabilirsiniz. SampleNativeAd yerel değişken olarak depolanır.

Eşlenen öğe özelliklerini ayarlama

Oluşturucu SampleNativeAd nesnesini kullanarak UnifiedNativeAdMapper.

Bu snippet, uyumlulaştırılmış reklamın fiyat verilerini alır ve bu verileri haritacının fiyat:

Java

if (sampleAd.getPrice() != null) {
    NumberFormat formatter = NumberFormat.getCurrencyInstance();
    String priceString = formatter.format(sampleAd.getPrice());
    setPrice(priceString);
}

Bu örnekte, uyumlulaştırılmış reklam, fiyatı double olarak depolarken, uyumlulaştırılmış reklam Ad Manager, aynı öğe için bir String kullanır. İlgili içeriği oluşturmak için kullanılan haritacı bu tür dönüşümleri işlemekten sorumludur.

Resim öğelerini eşleme

Resim öğelerini eşlemek, aşağıdaki gibi veri türlerini eşlemekten daha karmaşıktır: double veya String. Resimler otomatik olarak indirilebilir veya URL değerleri olarak döndürülür. Piksel-dpi ölçekleri de değişiklik gösterebilir.

Google Mobile Ads SDK'sı, bu ayrıntıları yönetmenize yardımcı olmak için NativeAd.Image sınıf. Alt sınıf oluşturma işlemine benzer şekilde Uyumlulaştırılmış bir yerel reklam eşlemek için UnifiedNativeAdMapper alt sınıfını kullanır.NativeAd.Image

Aşağıda, özel etkinliğin SampleNativeMappedImage sınıfı için bir örnek verilmiştir:

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, haritacı simgesi resim öğesidir:

Java

setIcon(new SampleNativeMappedImage(ad.getAppIcon(), ad.getAppIconUri(),
    SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE));

Ekstra paketine alan ekleme

Bazı uyumlulaştırılmış SDK'lar, Ad Manager doğal reklam biçimi. UnifiedNativeAdMapper class, bu öğeleri iletmek için kullanılan bir setExtras() yöntemi içerir yayıncılar. SampleNativeAdMapper, bunu Örnek SDK'lar için kullanır. "mükemmellik derecesi" öğe:

Java

Bundle extras = new Bundle();
extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness());
this.setExtras(extras);

Yayıncılar, NativeAd sınıfını kullanarak verileri alabilir getExtras() yöntemidir.

Reklam Seçenekleri

Özel etkinliğiniz, UnifiedNativeAdMapper üzerinde setAdChoicesContent() yöntemi. Şuradan bir snippet: Reklam Seçenekleri simgesinin nasıl sağlanacağını gösteren SampleNativeAdMapper:

Java

public SampleNativeAdMapper(SampleNativeAd ad) {
    ...
    setAdChoicesContent(sampleAd.getInformationIcon());
}

Gösterim ve tıklama etkinlikleri

Hem Google Mobile Ads SDK'sının hem de uyumlulaştırılmış SDK'nın, gösterim veya tıklama gerçekleşir, ancak bu etkinlikleri yalnızca bir SDK'nın izlemesi gerekir. Orada bağlı olarak, özel etkinliklerin kullanabileceği iki farklı yaklaşımdır Uyumlulaştırılmış SDK, gösterimleri ve tıklamaları izlemeyi destekler.

Tıklamaları ve gösterimleri Google Mobile Ads SDK'sıyla izleme

Uyumlulaştırılmış SDK kendi gösterim ve tıklama izlemeyi gerçekleştirmez, ancak Google Mobile Ads SDK'sı, tıklamaları ve gösterimleri kaydetmeye yönelik yöntemler sunar. bu etkinlikleri takip edin ve bağdaştırıcıya bildirin. İlgili içeriği oluşturmak için kullanılan UnifiedNativeAdMapper sınıfı iki yöntem içerir: recordImpression() ve handleClick() özel etkinlikler, uyumlulaştırılmış doğal reklam nesnesi:

Java

@Override
public void recordImpression() {
  sampleAd.recordImpression();
}

@Override
public void handleClick(View view) {
  sampleAd.handleClick(view);
}

SampleNativeAdMapper, Örnek SDK'nın yerel öğesine referans içerdiği için bir tıklamayı bildirmek için söz konusu nesnede uygun yöntemi çağırabilir veya gösterimdir. handleClick() yönteminin tek parametre: View nesnesini oluşturan yerel reklam öğesine tıklama almış olabilir.

Uyumlulaştırılmış SDK ile tıklamaları ve gösterimleri izleme

Bazı uyumlulaştırılmış SDK'lar, tıklamaları ve gösterimleri kendi başlarına izlemeyi tercih edebilir. İçinde bu durumda, varsayılan tıklama ve gösterim izlemeyi oluşturucuda aşağıdaki iki çağrıyı yaparak UnifiedNativeAdMapper:

Java

setOverrideClickHandling(true);
setOverrideImpressionRecording(true);

Tıklama ve gösterim izlemeyi geçersiz kılan özel etkinlikler, onAdClicked() ve onAdImpression() etkinliklerini Google Mobil'e bildir Ads SDK'sı.

Uyumlulaştırılmış SDK'nın, gösterimleri ve tıklamaları izlemek için çok sayıda görüntülenebilir. Özel etkinlik, trackViews() yöntemini kullanın ve yerel reklamın görünümünü uyumlulaştırılmış İzlenecek SDK. Özel etkinlik örnek projemizdeki örnek SDK (burada, bu kılavuzun kod snippet'leri alınmıştır) bu yaklaşımı kullanmamaktadır; ama eğer özel etkinlik kodu şu şekilde görünür:

Java

@Override
public void trackViews(View containerView,
    Map<String, View> clickableAssetViews,
    Map<String, View> nonClickableAssetViews) {
  sampleAd.setNativeAdViewForTracking(containerView);
}

Uyumlulaştırılmış SDK bağımsız öğelerin izlenmesini destekliyorsa, Hangi görünümlerin tıklanabilir olması gerektiğini görmek için clickableAssetViews. Bu harita NativeAdAssetNames bölgesindeki bir öğe adıyla bağlantı oluşturulmuş. UnifiedNativeAdMapper özel etkinliklerin geçersiz kılabileceği karşılık gelen bir untrackView() yöntemi sunar Görünüme ilişkin referansları serbest bırakma ve bunun yerel reklamla ilişkisini kesme nesnesini tanımlayın.

Uyumlulaştırma etkinliklerini Google Mobile Ads SDK'sına yönlendirme

Uyumlulaştırmanın desteklediği tüm geri çağırmaları MediationNativeAdCallback doküman.

Özel etkinliğinizin bu geri çağırmalardan mümkün olduğunca çoğunu yönlendirmesi Böylece uygulamanız, Google Ads'den bu eşdeğer etkinlikleri Mobile Ads SDK'sı. Aşağıda, geri çağırma işlevinin kullanımına dair bir örnek verilmiştir:

Böylece doğal reklamlar için özel etkinlik uygulaması tamamlanır. Tam örnek şurada kullanılabilir: GitHub'a gidin.