Teklif adaptörü geliştirme

Bu kılavuz, teklif bağdaştırıcısı oluşturmak isteyen reklam ağları için hazırlanmıştır gerçek zamanlı teklif vermeye (GZT) katılmak için. Şu durumda: yayıncıysanız yayıncı uyumlulaştırmasını inceleyin bakın.

Teklif bağdaştırıcısı, entegrasyonun istemci tarafı parçasıdır. Adaptör reklam ağı SDK'nızın aşağıdakileri yapmak için Google Mobile Ads SDK'sı ile iletişim kurmasını sağlar: teklif vereninizin yayınladığı reklamları yükleyin.

Teklifin doğru çalışması için bağdaştırıcınızın başlatma, sinyal toplama, reklamları yükleme ve reklam yaşam döngüsünü yönlendirme etkinlikler. Bu kılavuzda, adaptörünüzün nasıl olması gerektiği konusunda size yol göstereceğiz. uygulanır.

Teklif bağdaştırıcısının iş akışı

Başlatma

İstek-yanıt oluşturma yaşam döngüsünün tamamının ayrıntılı bir akışı aşağıdaki örnekteki gibidir:

Bağdaştırıcı, iş akışının aşağıdaki bölümlerinden sorumludur:

  • 4-7. adımlar: Bağdaştırıcınızı başlatın ve Google Mobile Ads SDK'sını geri arayın başlatma işlemi tamamlandığında otomatik olarak güncellenir.

  • 10-13. adımlar: Reklam ağı SDK'nızdan teklifine katılması ve onu Google Mobil Ads SDK'sı.

  • 18-21. adımlar: Teklif vereniniz kazanan teklifi döndürürse reklamı buna göre yükleyin. yanıt verebilir. Yüklendikten sonra, Google Mobile Ads SDK'sını bilgilendirin yüklendiğini görebiliriz.

  • 23. adım ve sonrası: Reklamınız gösterilirken Google Mobil Reklamlar'ı bilgilendirin Gerçekleşen diğer reklam etkinliklerinin yanı sıra gösterim ve tıklama etkinliklerinin SDK'sı reklamınızın sunum yaşam döngüsü boyunca.

ziyaret edin.

Teklif bağdaştırıcısını uygulama

Google Mobile Ads SDK'sı için teklif bağdaştırıcısı oluşturmak istiyorsanız RtbAdapter soyut sınıfını genişlet. Aşağıdaki bölümler her soyut yöntemi RtbAdapter konusunda açıklayacağım.

getSDKVersionInfo()

Burada, SDK'nızın sürümünü döndürmeniz gerekir. Bu sürüm teklif verene ait bir teklif sunar.

Bu yöntem VersionInfo döndürmenizi gerektirir. Aşağıdaki örnekte, SDK'nızın dize sürümünü bir VersionInfo.

@Override
public VersionInfo getSDKVersionInfo() {
  // Get your SDK's version as a string. E.g. "1.2.3"
  // String versionString = YourSdk.getVersion();
  String splits[] = versionString.split("\\.");
  if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
   }

   String logMessage = String.format("Unexpected SDK version format: %s." +
           "Returning 0.0.0 for SDK version.", sdkVersion);
   Log.w(TAG, logMessage);
   return new VersionInfo(0, 0, 0);
}

getVersionInfo()

Burada bağdaştırıcınızın sürümünü iade etmeniz gerekir. Bu sürüm teklif verene ait bir teklif sunar.

Google'ın açık kaynak ve sürümlü adaptörler 4 haneli bir bağdaştırıcı sürüm şeması kullanın ancak VersionInfo yalnızca 3 basamaklı bir bağdaştırıcı sürümü şemasına izin verir gerekir. Bu sorunu çözmek için son iki basamağı birleştirmeniz önerilir aşağıdaki gibi yama sürümüne ekleyin.

@Override
public VersionInfo getVersionInfo() {
  // Get your adapters's version as a string. E.g. "1.2.3.0"
  String versionString = BuildConfig.VERSION_NAME;
  String splits[] = versionString.split("\\.");
  if (splits.length >= 4) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
      return new VersionInfo(major, minor, micro);
    }

    String logMessage = String.format("Unexpected adapter version format: %s." +
                "Returning 0.0.0 for adapter version.", versionString);
    Log.w(TAG, logMessage);
    return new VersionInfo(0, 0, 0);
}

initialize()

Zaman aşımı: 30 saniye

initialize() yöntemi, bağdaştırıcınızda çağrılan ilk yöntemdir. Evet yalnızca bir kez çağrılır. Bu yöntem size Şu öğenin tam listesini temsil eden MediationConfiguration nesne: bu uygulamada reklam ağınız için yapılandırılmış yerleşimler; Döngülerden yararlanabilirsiniz bu listeyi kullanarak her bir yerleşimin kimlik bilgilerini ayrıştırır. ve başlatma için ilgili verileri SDK'nıza iletin.

SDK'nız başlatıldığında ve reklam isteklerini almaya hazır olduğunda InitializationCompleteCallback için onInitializationSucceeded() yöntemi. Bu geri arama, uygulama yayıncılarına yönlendirilir. Böylece, reklam yüklemeye başlayabilir.

@Override
public void initialize(Context context,
    InitializationCompleteCallback initializationCompleteCallback,
    List<MediationConfiguration> mediationConfigurations) {
  // Initialize your ad network's SDK.
  ...

  // Invoke the InitializationCompleteCallback once initialization completes.
  initializationCompleteCallback.onInitializationSucceeded();
}

collectSignals()

Zaman aşımı: 1 saniye

Yayıncı her reklam isteğinde bulunduğunda RtbAdapter öğenizin yeni bir örneği oluşturulur ve collectSignals() yöntemi çağrılır. Bu Reklam isteği, yanıt ve sürenin tamamı boyunca RtbAdapter kullanılır. oluşturma döngüsünden yararlanabilirsiniz. collectSignals() yöntemi, şunları etkinleştirir: bağdaştırıcıda, teklif verene gönderilmek üzere cihazdan sinyal sağlayarak OpenRTB isteği.

collectSignals(), arka plan ileti dizisinde çağrıldı. Google Mobile Ads SDK'sı aynı anda tüm bağdaştırıcılardan gelen sinyalleri ister teklifli sisteme katılır. Lütfen saygılı olun ve kullanıcı arayüzü iş parçacığına yapılan çağrıları sınırlayın iletişim kurabileceğinizi unutmayın. Bağdaştırıcınızın veya SDK'nızın veri toplamak için yapması gereken ağır işler sinyalleri initialize() yöntemiyle yapılmalı ve önbelleğe alınmalıdır.

Sinyalleriniz hazır olduğunda onSuccess() geri aramasını kodlanmış sinyallerden yararlanırız.

Aşağıda bir uygulama örneği verilmiştir:

@Override
public void collectSignals(RtbSignalData rtbSignalData,
                           SignalCallbacks signalCallbacks) {
  String signals = YourSdk.getSignals();
  signalCallbacks.onSuccess(signals);
}

Bağdaştırıcınız sinyalleri toplayamazsa signalCallbacks.onFailure() işlevini çağırın hata oluştuğunu açıklayan bir dize bulunur.

Reklam yükleme yöntemlerini uygulama

Zaman aşımı: 10 saniye

Teklif vereniniz kazanan teklifi döndürürse Google Mobile Ads SDK'sı kazanan reklamı yüklemek için bağdaştırıcınızı çağırarak teklif vereni, SDK'nızın bu reklamı yüklemesi gerektiğini döndürdü.

Çağrılan tam yükleme yöntemi reklama bağlıdır bu isteğin olduğu biçim:

Reklam Biçimi Yükleme yöntemi
Banner loadBannerAd()
Geçiş reklamı loadInterstitialAd()
Ödüllü loadRewardedAd()

Bağdaştırıcınızın desteklediği reklam biçimleri için bu yöntemleri uygulayın.

Yükleme yöntemi, bağdaştırıcısı veya olması gerekir. Bu yöntem size şunları sağlar: parametre:

  • SDK'nızın kullanması gereken parametreleri içeren MediationAdConfiguration Kazanan teklif için (ör. teklif yanıtı ve kimlik bilgileri) reklamı yükler AdMob kullanıcı arayüzünde yapılandırılan yayıncı.

  • Google Mobile Ads SDK'sını bilgilendirmek için kullanılan bir MediationAdLoadCallback nesnesi yükleme başarılı veya başarısız olduğunda görebilirsiniz.

SDK'nız reklamı yükledikten sonra mediationAdLoadCallback.onSuccess() işlevini çağırın. etkinlik reklamı yüklenemiyor, mediationAdLoadCallback.onFailure() öğesini bir hata oluştuğunu açıklayan bir dize.

mediationAdLoadCallback.onSuccess() yöntemi, "Reklam"dan biriyle onaylayan nesne arayüzleri, Google Mobil Ads SDK'sı. Bu reklam arayüzlerinde, reklamla ilgili bazı bilgiler vermeniz istenir.

MediationAdConfiguration adlı kullanıcının getWatermark() üyesi de var yöntemini kullanın. Bu resim reklamlarınızda şeffaf bir yer paylaşımına döşenmelidir. Filigran oluşturma hakkında daha fazla bilgi almak için Google ile iletişime geçin. Yayıncılar tarafından kullanılmak üzere gösterilen reklamla ilgili meta verileri içerir. gösterilen reklamların kaynağı

Banner'larda banner görünümünü sağlamanız istenir. Geçiş reklamı ve reklamı şu adreste göstermek için bir show() yöntemi uygulamanız istenir: daha ileri bir noktaya taşımayı deneyin. En iyi uygulama olarak, sınıfınızı en iyi Reklam yüklemesi, bu reklam yöntemlerinin uygulanmasından da sorumlu mu?

Aşağıda örnek bir loadBannerAd() uygulaması verilmiştir. Unutmamanız gereken noktalar olacaktır. Bu nedenle, bağdaştırıcınızın uygulamasının farklı bir SDK ile entegre olur.

public final class SampleRtbAdapter extends RtbAdapter {
  ...

  @Override
  public void loadBannerAd(
      MediationBannerAdConfiguration adConfiguration,
      MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> callback) {

      SampleBannerRenderer bannerRenderer =
          new SampleBannerRenderer(adConfiguration, callback);
      bannerRenderer.render();
    }
}

// Renders a banner ad, and forwards callbacks to the Google Mobile Ads SDK.
public class SampleBannerRenderer implements MediationBannerAd {
  private MediationBannerAdConfiguration adConfiguration;
  private final MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> adLoadCallback;
  private AdView adView;
  private MediationBannerAdCallback callback;

  public SampleRtbBannerRenderer(
      MediationBannerAdConfiguration adConfiguration,
      MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> adLoadCallback) {
    this.adConfiguration = adConfiguration;
    this.adLoadCallback = adLoadCallback;
  }

  public void render() {
    adView = new AdView(adConfiguration.getContext());
    adView.setAdSize(adConfiguration.getAdSize());
    // serverParameters are the parameters entered in the AdMob UI for your network.
    adView.setAdUnitId(adConfiguration.getServerParameters().getString("adUnitId"));

    // Map the callbacks from your SDK to Google's SDK.
    adView.setAdListener(new AdListener() {
      // See the next step for more information on callback mapping.
      // ...
    });

    // Get the bid response and watermark from the ad configuration and
    // pass the relevant information to your SDK.
    String ad = adConfiguration.getBidResponse();
    String watermark = adConfiguration.getWatermark();
    Bundle extras = new Bundle();
    extras.putString("bid", ad);
    extras.putString("watermark", watermark);
    AdRequest request = new AdRequest.Builder()
        .addNetworkExtrasBundle(AdMobAdapter.class, extras)
        .build();
    adView.loadAd(request);
  }

  // MediationBannerAd implementation

  @NonNull
  @Override
  public View getView() {
    return adView;
  }
}

Reklam sunumu yaşam döngüsü etkinliklerini aktarın

Bağdaştırıcının nihai sorumluluğu, Google Mobile Ads SDK'sını olayın sorumlusuyla iletişim kurmak ve yayıncısına ait. Yayıncı, ne olursa olsun belirli zamanlarda bu geri çağırmaları bekler. reklamı sunan reklam ağıdır. Bu nedenle, bu ağlardan çoğunun doğru zamanda çağrılır. Böylece Google Mobile Ads SDK'sı bunları yayıncıya yönlendirebilir.

Bağdaştırıcılar, uygun olduğunda aşağıdaki etkinlikleri çağırmalıdır:

Tüm biçimlerde ortak
Yöntem Ne zaman aramalısınız?
reportAdClicked() Reklam tıklandı.
reportAdImpression() Reklam bir gösterim oluşturdu.
onAdOpened() Reklam tam ekran görünümü sunuyordu.
onAdClosed() Reklamın tam ekran görünümü kapatıldı.
onAdLeftApplication() Reklam, kullanıcının uygulamadan ayrılmasına neden olmuştur.
Ödüllü reklamlar
onRewarded() Kullanıcıya bir ödül verilir.
Video geri aramaları (ödüllü ve doğal reklamlar)
onVideoStarted() Reklamın videosu başlatıldı.
onVideoCompleted() Reklamın videosu tamamlandı.

Adaptör bir MediationAdLoadCallback<MediationAdT, MediationAdCallbackT> alır mediationAdLoadCallback.onSuccess() arandığında nesne geri döndü. Adaptörler bu nesneyi tutması ve sunu etkinliklerini çağırmak için kullanması bekleniyor. kaç kez tıklandığını gösterir.

Genellikle bu etkinliklerin çoğu reklam ağınızın SDK'sı tarafından gerçekleştirilir. İlgili içeriği oluşturmak için kullanılan bağdaştırıcısının rolü, reklam ağı SDK'nızdan gelen geri çağırmaları Google Mobile Ads SDK'sı.

Aşağıdaki örnekte, SDK'nın Google Mobile Ads SDK'sı için reklam işleyicisi:

adView.setAdListener(new AdListener() {
    public void onAdLoaded() {
        callback = adLoadCallback.onSuccess(SampleBannerRenderer.this);
    }

    public void onAdImpression() {
        if (callback != null) {
            callback.reportAdImpression();
        }
    }

    public void onAdFailedToLoad(LoadAdError adError) {
        adLoadCallback.onFailure("Error: " + adError.toString());
    }

    public void onAdClosed() {
        if (callback != null) {
            callback.onAdClosed();
        }
    }

    public void onAdOpened() {
        if (callback != null) {
            callback.onAdOpened();
            callback.reportAdClicked();
        }
    }

    public void onAdLeftApplication() {
        if (callback != null) {
            callback.onAdLeftApplication();
        }
    }
});

Yerel reklam gösterim izleme için gerekli öğeler

Google Mobile Ads SDK'sı, emin olun. Reklam ağı SDK'nız belirli öğelerin gösterilmesini gerektiriyorsa teklif vereniniz, geçerli bir gösterim oluşturmak için bunların zorunlu yerel öğeleri teklif yanıtına ekleme. Google Mobile Ads SDK'sı daha sonra gerekli yerel öğelerinizin gösterim kaydedilmeden önce görüntülenmesini sağlayın.

Gerekli yerel öğeleri inceleyin belgeleri Teklifte gerekli diğer öğelerin nasıl belirtileceği hakkında daha fazla bilgi tıklayın.

Reklam hatalarını göster

Geçiş reklamı ve ödüllü reklam gibi tam ekran biçimleri başarılı bir şekilde yükleme geri çağırması uygulama sağlayacağınız . MediationInterstitialAd veya MediationRewardedAd Böylece Google Mobile Ads SDK'sı bağdaştırıcınızdan reklamı göstermesini isteyebilir.

Google Mobile Ads SDK'sı, bağdaştırıcının bir reklamı başarıyla yüklemesini bekler. Yayıncı, reklamı göstermek istediğinde reklam gösterilmeye hazırdır. Bunun anlamı, her gösterim çağrısının bir gösterimle sonuçlanması gerekir.

Ancak, belirli zamanlarda reklam gösteremeyebilirsiniz. Şu durumda: reklamı gösterememesi durumunda, . onAdFailedToShow() geri çağırmayı kullanın.

Aşağıdaki tabloda, sunu geri çağırmalarının tam ekran reklam biçimleri için gösterim kaydını nasıl etkilediği gösterilmektedir:

Geri Arama Sonuç
onAdOpened() Impression recorded
onAdFailedToShow() Impression failure1
Birkaç saniye boyunca yukarıdakilerin hiçbiri Impression recorded

1 Başarısız olanlar için reklam ağınızdan gösterim için ücret alınmaz faturalandırılabilir etkinlik ücreti düzenlemenizi etkiler. Teklif isteğini inceleyin sinyallerinizi ekleyebilirsiniz.

Aşağıdaki örnek örnekte, bir reklamın reklamdan veya reklamdan show çağrısı hatayla sonuçlanabilir.

final class SampleRtbAdapter extends RtbAdapter implements MediationRewardedAd {

 private MediationRewardedAdCallback callback;
 private RewardedAd rewardedAd;

 ...

  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration adConfiguration,
      final MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> loadCallback) {

    // Load an ad. This mock example uses Google's SDK, but in practice
    // your adapter will load the ad using your ad network's SDK.
    RewardedAd.load(adConfiguration.getContext(),
        "ca-app-pub-3940256099942544/5224354917",
        new AdRequest.Builder().build(),
        new RewardedAdLoadCallback() {
          @Override
          public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
            // When the ad loads, invoke the load success callback.
            callback = loadCallback.onSuccess(SampleRtbAdapter.this);
          }
        });
  }

  @Override
  public void showAd(Context context) {
    // In this mock example, your ad network requires an activity context, but
    // didn't receive one, making you unable to show the ad.
    if (!(context instanceof Activity)) {
      AdError error = new AdError(1, "Context must be an activity",
          "com.google.ads.mediation.sample");
      callback.onAdFailedToShow(error);
    }

    // This example shows Google SDK's callbacks, but it's likely your SDK
    // has similar presentation callbacks.
    rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
      @Override
      public void onAdShowedFullScreenContent() {
        // Your ad network SDK successfully showed the ad. Call onAdOpened().
        callback.onAdOpened();
      }

      @Override
      public void onAdFailedToShowFullScreenContent(AdError adError) {
        // Your ad network SDK failed to show the ad, invoke onAdFailedToShow.
        // In practice, you will map your SDK's error to an AdError.
        AdError error = new AdError(adError.getCode(), adError.getMessage(),
            adError.getDomain());
        callback.onAdFailedToShow(adError);
      }
    });


    rewardedAd.show((Activity) context, ...);
  }
}