Reklam Ağı Uyumlulaştırma Bağdaştırıcısı Geliştirme

Bu kılavuz, uyumlulaştırma bağdaştırıcısı oluşturmak isteyen reklam ağları için hazırlanmıştır. Yayıncıysanız yayıncı uyumlulaştırması talimatlarını inceleyin.

Reklam ağı bağdaştırıcısı, reklam ağınız ile Google Mobil Reklamlar Uyumlulaştırması arasındaki iletişim katmanıdır.

Bağdaştırıcı, banner reklamları desteklemek için MediationBannerAdapter, geçiş reklamlarını desteklemek için MediationInterstitialAdapter uygulanmasından sorumludur. Ayrıca, bu etkinlikler hakkında Google Mobile Ads Uyumlulaştırması'na bilgi vermek için uygun zamanlarda MediationBannerListener ve MediationInterstitialListener arasındaki geri çağırmaları da çağırması gerekir. Bu süreç, geliştiriciye de iletilebilir.

Örnek reklam ağı

Bu kılavuzda, Örnek reklam ağı için bağdaştırıcının nasıl oluşturulacağı gösterilmektedir. Örnek reklam ağı, çoğu reklam ağının sunduğu sınıfları temsil eden aşağıdaki sınıfları içerir:

class SampleAdView {
    public SampleAdView(Context context);
    public void setSize(SampleAdSize size);
    public void setAdUnit(String sampleAdUnit);
    public void setAdListener(SampleAdListener listener);
    public void fetchAd(SampleAdRequest request);
    public void destroy();
}

class SampleAdSize {
    public SampleAdSize(int width, int height);
    public int getWidth();
    public int getHeight();
}

class SampleAdRequest {
    public SampleAdRequest();
    public void setKeywords(Set<String> keywords);
    public void setTestMode(boolean useTesting);
}

class SampleAdListener {
    public void onAdFetchSucceeded();
    public void onAdFetchFailed(SampleErrorCode code);
    public void onAdFullScreen();
    public void onAdClosed();
}

enum SampleErrorCode {
    UNKNOWN,
    BAD_REQUEST,
    NETWORK_ERROR,
    NO_INVENTORY
}

class SampleInterstitial {
    public SampleInterstitial(Context context);
    public void setAdUnit(String sampleAdUnit);
    public void setAdListener(SampleAdListener listener);
    public void fetchAd(SampleAdRequest request);
    public void show();
    public void destroy();
}

Bu sınıflar hakkında daha fazla bilgi için eksiksiz SDK uygulamasını inceleyin.

Banner bağdaştırıcısı uygulama

Banner reklamları destekleyen bir bağdaştırıcı uygulamak için MediationBannerAdapter uygulamasının kullanıldığı bir sınıf oluşturun.

public class SampleAdapter implements MediationBannerAdapter {
    @Override
    public void requestBannerAd(
            Context context,
            MediationBannerListener listener,
            Bundle serverParameters,
            AdSize adSize,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {}

    @Override
    public View getBannerView() {}

    @Override
    public void onDestroy() {}

    @Override
    public void onPause() {}

    @Override
    public void onResume() {}
}

MediationBannerAdapter uygulamaya geçmeden önce sunucu parametrelerini, uyumlulaştırma ekstralarını ve bu değerlerin bağdaştırıcıya nasıl iletildiğini tartışalım.

Sunucu parametreleri

Reklam ağınızda bir yayıncıyı tanımlamak için muhtemelen bazı tanımlayıcılar gerekir. Örneğin, Örnek reklam ağı için yalnızca bir reklam birimi gerekir. Bu gerekli parametreler, requestBannerAd() içindeki serverParameters paketinde sağlanır. Geliştirme sırasında, paketin ihtiyacınız olan anahtarlarla zaten doldurulacağını varsayabilirsiniz:

private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";

@Override
public void requestBannerAd(
        Context context,
        MediationBannerListener listener,
        Bundle serverParameters,
        AdSize adSize,
        MediationAdRequest mediationAdRequest,
        Bundle mediationExtras) {
    String adUnit = serverParameters.getString(SAMPLE_AD_UNIT_KEY);
    ...
}

AdMob size, reklam istemek ve yayınlamak için yayıncıdan hangi sunucu parametrelerine ihtiyacınız olduğunu soran bir anket gönderecektir. AdMob, AdMob kullanıcı arayüzünde ağınızı yapılandırmak için bu girişi kullanır. Aşağıdaki ekran görüntüsünde, Millennial Media için APID'nin, InMobi için Uygulama Kimliği'nin gerekli olduğu gösterilmektedir.

AdMob, bağdaştırıcınızı başlatırken serverParameters paketini doldurmak için bu bilgileri kullanır.

Yayıncıların uyumlulaştırma reklam ağlarını nasıl yapılandıracağı hakkında daha fazla bilgi için bu makaleye bakın.

Ek hedefleme parametreleri

MediationAdRequest, reklam hedefleme için kullanabileceğiniz bazı yaygın hedefleme bilgilerini içerir. Örneğin:

Uyumlulaştırma ekstraları

Reklam ağınız MediationAdRequest tarafından sağlanmayan hedefleme bilgilerini destekliyorsa uygulama geliştiriciler özel olarak ağınıza bir mediationExtras paketi iletebilir. Uyumlulaştırma, uyumlulaştırma ekstralarının nasıl iletileceğine dair bir örnek sunar.

Geliştiricilerin bu bilgileri isteğe bağlı olarak iletmesini kolaylaştırmak için bağdaştırıcınızda bir paket oluşturucu sınıfı sağlayabilirsiniz. Ağınızın gelir değerinin iletilmesini desteklediğini varsayalım. Bağdaştırıcınıza geliri belirleyen bir oluşturucu sınıfı ekleyebilirsiniz:

public static final class BundleBuilder {
    private int income;

    public BundleBuilder setIncome(int income) {
        this.income = income;
        return this;
    }

    public Bundle build() {
        Bundle bundle = new Bundle();
        bundle.putInt("income", income);
        return bundle;
    }
}

Bu sınıf, geliştiricinin ağınız için paket oluşturması için temiz bir API sağlar:

Bundle sampleAdapterBundle =
        new SampleAdapter.BundleBuilder().setIncome(100000).build();

requestBannerAd()

Sunucu parametreleri ve uyumlulaştırma ekstralarıyla ilgili bilgi sahibi olduğunuza göre, bunları kullanarak bir MediationBannerAdapter oluşturabiliriz.

requestBannerAd() yöntemi, bağdaştırıcı örneklendikten hemen sonra çağrılır. Buradan reklam görünümünüzü oluşturmanız ve banner reklam isteğinde bulunmanız gerekir.

Örnek reklam ağı için requestBannerAd() uygulaması aşağıdaki gibi görünür:

public class SampleAdMobAdapter implements MediationBannerAdapter {
    private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";
    private SampleAdView sampleAdView;

    @Override
    public void requestBannerAd(
            Context context, // May be an application context.
            MediationBannerListener listener,
            Bundle serverParameters,
            AdSize adSize,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {
        sampleAdView = new SampleAdView(context);

        if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
            sampleAdView.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
        } else {
            listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
        }

        sampleAdView.setSize(
                new SampleAdSize(adSize.getWidth(),adSize.getHeight()));

        sampleAdView.setAdListener(
                new SampleBannerEventForwarder(listener, this));

        SampleAdRequest request = new SampleAdRequest();
        request.setTestMode(mediationAdRequest.isTesting());
        request.setKeywords(mediationAdRequest.getKeywords());
        sampleAdView.fetchAd(request);
    }
}

İçerik parametresinin türü Activity olduğunu varsaymayın. Yayıncı uygulamasına bağlı olarak, Google Mobile Ads Uyumlulaştırması, bağdaştırıcınıza bir uygulama içeriği yönlendirebilir. Bağdaştırıcınız bir uygulama bağlamını işleyemezse AdRequest.ERROR_CODE_INVALID_REQUEST hata koduyla onAdFailedToLoad() yöntemini çağırmanız önerilir.

MediationBannerListener geri çağırmaları

Reklam etkinliklerini Google Mobil Reklamlar Uyumlulaştırması'na geri yönlendirebilmek için requestBannerAd() içinde size sağlanan MediationBannerListener değerini kaydetmeniz gerekir. Her geri çağırma, reklamın yaşam döngüsü içinde uygun zamanda çağrılmalıdır:

Yöntem Arama zamanı
onAdLoaded() Banner isteği başarılı oldu.
onAdFailedToLoad() Banner isteği başarısız oldu.
onAdClicked() Banner tıklandı.
onAdOpened() Banner, tam ekran görünümü oluşturuyor.
onAdClosed() Kullanıcı bir banner'ı tıkladıktan sonra uygulamaya geri dönüyor.
onAdLeftApplication() Banner, kullanıcının uygulamadan ayrılmasına neden olur.

Örnek reklam ağı bağdaştırıcısı, etkinlik yönlendirmeyi işlemek için SampleBannerEventForwarder adlı bir sınıf oluşturur:

public class SampleBannerEventForwarder extends SampleAdListener {
    private MediationBannerListener mediationListener;
    private SampleAdapter adapter;

    public SampleBannerEventForwarder(
            MediationBannerListener listener, SampleAdapter adapter) {
        this.mediationListener = listener;
        this.adapter = adapter;
    }

    @Override
    public void onAdFetchSucceeded() {
        mediationListener.onAdLoaded(adapter);
    }

    @Override
    public void onAdFetchFailed(SampleErrorCode errorCode) {
        switch(errorCode) {
            case UNKNOWN:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INTERNAL_ERROR);
                break;
            case BAD_REQUEST:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_INVALID_REQUEST);
                break;
            case NETWORK_ERROR:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NETWORK_ERROR);
                break;
            case NO_INVENTORY:
                mediationListener.onAdFailedToLoad(adapter, AdRequest.ERROR_CODE_NO_FILL);
                break;
        }
    }

    @Override
    public void onAdFullScreen() {
        mediationListener.onAdClicked(adapter);
        mediationListener.onAdOpened(adapter);
        mediationListener.onAdLeftApplication(adapter);
    }

    @Override
    public void onAdClosed() {
        mediationListener.onAdClosed(adapter);
    }
}

Örnek reklam ağı bağdaştırıcısının aynı geri çağırmada onAdClicked, onAdOpened ve onAdLeftApplication ağlarını nasıl gönderdiğine dikkat edin. Ağınıza yönelik geri çağırmalar Google Mobil Reklamlar'ın gerektirdiği geri çağırmalarla tam olarak eşleşmese de, makul bir eşleme sağlamak bağdaştırıcının sorumluluğundadır.

getBannerView

MediationBannerListener.onAdLoaded() çağrıldıktan sonra uyumlulaştırma, reklam ağınızın banner görünümünün ekranda gösterilmesini sağlamak için getBannerView() yöntemini çağırır. requestBannerAd() ürününde oluşturduğunuz banner görünümünü döndürmeniz yeterlidir:

@Override
public View getBannerView() {
    return sampleAdView;
}

Etkinlik yaşam döngüsü olayları

Uygulama geliştiricisi etkinlikler hakkında uyumlulaştırmaya bildirim gönderirse uyumlulaştırma, onPause() ve onResume() etkinlik etkinliklerinin bağdaştırıcısına bildirim gönderir. Banner'ınızı duraklatmak ve devam ettirmek için gerekli tüm işlemleri yapın:

@Override
public void onPause() {
}

@Override
public void onResume() {
}

Örnek reklam ağı, duraklatma veya devam ettirme çağrısı içermediğinden boş bir uygulama sağlar.

Uyumlulaştırma, bağdaştırıcı kaldırılmak üzereyken onDestroy() için en iyi çağrıyı yapar. Burada gerekli tüm temizleme işlemlerini yapın:

@Override
public void onDestroy() {
    if (sampleAdView != null) {
        sampleAdView.destroy();
    }
}

Akıllı banner'lar

Google Mobile Ads SDK'sı, cihazın boyutuna bağlı olarak tam genişlik ve değişken yükseklikte olan akıllı banner reklam boyutunu destekler.

Akıllı banner'ın reklam boyutunu doğru şekilde elde etmek amacıyla bağdaştırıcınızın, genişliği almak için adSize.getWidthInPixels(context) ve yüksekliği almak için adSize.getHeight() yerine adSize.getHeightInPixels(context) kullanması gerekir. Bu işlem daha sonra cihaz yoğunluğuna bölünmelidir:

int widthInPixels = adSize.getWidthInPixels(context);
int heightInPixels = adSize.getHeightInPixels(context);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
int widthInDp = Math.round(widthInPixels / displayMetrics.density);
int heightInDp = Math.round(heightInPixels / displayMetrics.density);

Daha sonra, reklam isteği oluştururken boyut olarak widthInDp ve heightInDp boyutlarını kullanabilirsiniz.

İşte bu kadar. Artık banner'lar için çalışan bir uyumlulaştırma bağdaştırıcınız var! Referans için SampleAdapter'ın eksiksiz uygulamasını burada bulabilirsiniz.

Geçiş reklamı bağdaştırıcısı uygulama

Geçiş reklamları için bağdaştırıcı uygulaması banner reklamlara benzer. Geçiş reklamlarını destekleyen bir bağdaştırıcı uygulamak için MediationInterstitialAdapter özelliğini uygulayan bir sınıf oluşturun:

public class SampleAdapter implements MediationInterstitialAdapter {
    @Override
    public void requestInterstitialAd(
            Context context,
            MediationInterstitialListener listener,
            Bundle serverParameters,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {}

    @Override
    public View showInterstitial() {}

    @Override
    public void onDestroy() {}

    @Override
    public void onPause() {}

    @Override
    public void onResume() {}
}

Bağdaştırıcınız banner'ları da destekliyorsa her iki arayüzü de uygulamak için aynı bağdaştırıcı sınıfını kullanabilirsiniz.

MediationInterstitialAdapter uygulamaya geçmeden önce sunucu parametreleri ve uyumlulaştırma ekleriyle ilgili bilgi edinin.

Sunucu parametreleri (geçiş reklamı)

Banner sunucusu parametreleri bölümüne bakın.

Ek hedefleme parametreleri (geçiş reklamı)

Banner ek hedefleme parametreleri bölümüne bakın.

Uyumlulaştırma ekstraları (geçiş reklamı)

Banner uyumlulaştırma ekstraları bölümüne bakın.

requestInterstitialAd

requestInterstitialAd() yöntemi, bağdaştırıcı örneklendikten hemen sonra çağrılır. Burada geçiş reklamınızı oluşturmanız ve geçiş reklamı isteğinde bulunmanız gerekir.

Örnek reklam ağı için requestInterstitialAd() uygulaması şu şekilde görünür:

public class SampleAdapter implements MediationBannerAdapter {
    private static final String SAMPLE_AD_UNIT_KEY = "ad_unit";

    private SampleInterstitial sampleInterstitial;

    @Override
    public void requestInterstitialAd(
            Context context, // May be an application context.
            MediationInterstitialListener listener,
            Bundle serverParameters,
            MediationAdRequest mediationAdRequest,
            Bundle mediationExtras) {
        sampleInterstitial = new SampleInterstitial(context);

        if (serverParameters.containsKey(SAMPLE_AD_UNIT_KEY)) {
            sampleInterstitial.setAdUnit(serverParameters.getString(SAMPLE_AD_UNIT_KEY));
        } else {
            listener.onAdFailedToLoad(this, AdRequest.ERROR_CODE_INVALID_REQUEST);
        }

        sampleInterstitial.setAdListener(
                new SampleInterstitialEventForwarder(listener, this));

        // Make an ad request.
        SampleAdRequest request = new SampleAdRequest();
        request.setTestMode(mediationAdRequest.isTesting());
        request.setKeywords(mediationAdRequest.getKeywords());
        sampleInterstitial.fetchAd(request);
    }
}

Bağlam parametresinin Etkinlik türünde olduğunu varsaymayın. Google Mobil Reklamlar Uyumlulaştırması, uygulama geliştiricisi tarafından geçirilen bağlamı yönlendirir ve uygulama bağlamının aktarılması mümkündür. Bağdaştırıcınız bir uygulama bağlamını işleyemezse AdRequest.ERROR_CODE_INVALID_REQUEST hata koduyla onAdFailedToLoad yöntemini çağırmanız önerilir.

MediationInterstitialListener geri çağırması]

Reklam etkinliklerini tekrar Google Mobile Ads Uyumlulaştırması'na yönlendirebilmek için, requestInterstitialAd içinde size sağlanan MediationInterstitialListener öğesini kaydetmeniz gerekir. Her geri çağırma, reklamın yaşam döngüsünde uygun zamanda çağrılmalıdır:

Yöntem Arama zamanı
onAdLoaded Geçiş reklamı isteği başarılı oldu.
onAdFailedToLoad Geçiş reklamı isteği başarısız oldu.
onAdOpened Geçiş reklamı gösteriliyor.
onAdClosed Geçiş reklamı kapalı.
onAdLeftApplication Geçiş reklamı, kullanıcının uygulamadan ayrılmasına neden olur.

showInterstitial

MediationInterstitialListener.onAdLoaded() çağrısından sonra, showInterstitial() çağrılana kadar geçiş reklamının gösterilmesini beklemeniz gerekir. Uygulama geliştirici, geçiş reklamının ne zaman gösterileceğine karar verir. Bu, isteğin istenmesinden birkaç dakika sonra olabilir.

showInterstitial() uygulaması oldukça basittir. Geçiş reklamı nesnenizi göstermeniz yeterlidir:

@Override
public void showInterstitial() {
    sampleInterstitial.show();
}

Etkinlik yaşam döngüsü olayları (geçiş reklamı)

Banner etkinliği yaşam döngüsü etkinlikleri bölümüne bakın.

Etkinlik yaşam döngüsü etkinliklerini uyguladıktan sonra, uyumlulaştırma bağdaştırıcınız geçiş reklamlarını işlemeye hazır olur. Referans olarak, SampleAdapter'ın eksiksiz bir uygulamasını burada bulabilirsiniz.

SSS

Bağdaştırıcım yalnızca banner ve geçiş reklamlarını destekliyor ancak ikisini birden desteklemiyorsa ne yapmalıyım?

Bağdaştırıcınız yalnızca banner'ları destekliyorsa yalnızca MediationBannerAdapter arayüzünü uygulamanız gerekir. Adaptörünüz yalnızca geçiş reklamlarını destekliyorsa yalnızca MediationInterstitialAdapter arayüzünü uygulamanız gerekir.