Ön koşullar
Özel etkinlik kurulumunu tamamlayın.
Doğal reklam isteme
Şelale uyumlulaştırma zincirinde özel etkinlik satır öğesine ulaşıldığında, özel etkinlik oluştururken sağladığınız sınıf adınathe loadNativeAd()
method çağrılır. Bu örnekte, bu yöntem SampleCustomEvent
içindedir ve daha sonrathe loadNativeAd()
method içinde SampleNativeCustomEventLoader
çağrısı yapar.
Yerel reklam isteğinde bulunmak için loadNativeAd()
uygulamasını uygulamak üzere Adapter
öğesini genişleten bir sınıf oluşturun veya mevcut bir sınıfı değiştirin. Adapter
öğesini genişleten bir sınıf zaten varsa loadNativeAd()
öğesini burada uygulayın. Ayrıca, UnifiedNativeAdMapper
yöntemini uygulamak için yeni bir sınıf oluşturun.
Özel etkinlik örneğimizde SampleCustomEvent
,the Adapter
interface uygulamasını uygular ve ardındanSampleNativeCustomEventLoader
öğesine yetki verir.
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
aşağıdaki görevlerden sorumludur:
Yerel reklam yükleniyor
UnifiedNativeAdMapper
interfaceReklam etkinliği geri çağırmalarını Google Mobile Ads SDK'sına alma ve raporlama
Kullanıcı arayüzünde tanımlanan AdMob isteğe bağlı parametre, reklam yapılandırmasına dahildir. Parametreye adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)
üzerinden erişilebilir.
Bu parametre, genellikle reklam ağı SDK'sının bir reklam nesnesi örneği oluştururken ihtiyaç duyduğu reklam birimi tanımlayıcısıdır.
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ıyla getirilip getirilmediğine veya bir hatayla karşılaşıp karşılaşmadığına bağlı olarak onSuccess()
veya onFailure()
yöntemini çağırırsınız.
onSuccess()
, MediationNativeAd
uygulayan sınıfın bir örneğine geçirilerek çağrılır.
Genellikle bu yöntemler, bağdaştırıcınızın uyguladığı üçüncü taraf SDK'sından gelen geri çağırmaların içinde uygulanır. Bu örnekte Örnek SDK'da alakalı geri çağırma işlevleri olan bir SampleAdListener
bulunur:
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)); }
Yerel reklamları eşleme
Farklı SDK'ların yerel reklamlar için kendi benzersiz biçimleri vardır. Örneğin, biri "başlık" alanı içeren nesneleri döndürürken, diğeri "başlık" öğesine sahip olabilir. Ayrıca, gösterimleri izlemek ve tıklamaları işlemek için kullanılan yöntemler SDK'lar arasında farklılık gösterebilir.
Bu farklılıkların çözümlenmesinden ve uyumlulaştırılmış bir SDK'nın yerel reklam nesnesini, Google Mobile Ads SDK'sının beklediği arayüzle eşleşecek şekilde uyarlamaktan UnifiedNativeAdMapper
sorumludur. Özel etkinlikler, uyumlulaştırılmış SDK'larına özel kendi haritacılarını oluşturmak için bu sınıfı genişletmelidir. Örnek özel etkinlik projemizden
örnek bir reklam eşleyiciyi aşağıda görebilirsiniz:
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 yönelik bir referans tutun
Oluşturucu, Örnek SDK'nın yerel reklamlar için kullandığı yerel reklam sınıfı olan SampleNativeAd
parametresini kabul eder. Haritacının, tıklama ve gösterim etkinliklerini aktarabilmesi için
uyumlulaştırılan reklama referans vermesi gerekir. SampleNativeAd
, yerel değişken olarak depolanır.
Eşlenen öğe özelliklerini ayarla
Oluşturucu, UnifiedNativeAdMapper
içindeki öğeleri doldurmak için SampleNativeAd
nesnesini kullanır.
Bu snippet, uyumlulaştırılmış reklamın fiyat verilerini alır ve haritacının fiyatını ayarlamak için kullanır:
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 depolarkenAdMob aynı öğe için String
kullanır. Haritacı, bu tür dönüşümleri ele almaktan sorumludur.
Harita resmi öğeleri
Resim öğelerini eşlemek, double
veya String
gibi veri türlerini eşlemekten daha karmaşıktır. Resimler otomatik olarak indirilebilir
veya URL değerleri olarak döndürülebilir. Bunların piksel-dpi ölçekleri de değişiklik gösterebilir.
Bu ayrıntıları yönetmenize yardımcı olmak için Google Mobile Ads SDK'sı NativeAd.Image
sınıfını sağlar. Uyumlulaştırılmış bir yerel reklamı eşlemek için UnifiedNativeAdMapper
alt sınıfını oluştururken yaptığınız gibi, resim öğelerini eşlerken de NativeAd.Image
alt sınıfı oluşturmanız gerekir.
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ının simge resim öğesini ayarlamak için bu satırda eşlenmiş resim sınıfını kullanır:
Java
setIcon(new SampleNativeMappedImage(ad.getAppIcon(), ad.getAppIconUri(), SampleCustomEvent.SAMPLE_SDK_IMAGE_SCALE));
Ekstra pakete alan ekle
Bazı uyumlulaştırılmış SDK'lar, yerel reklam biçimindekilerin dışında
AdMob ek öğeler sağlar. UnifiedNativeAdMapper
sınıfı, bu öğeleri yayıncılara aktarmak için kullanılan bir setExtras()
yöntemi içerir. SampleNativeAdMapper
, Örnek SDK'nın "mükemmellik derecesi" öğesi için bunu kullanır:
Java
Bundle extras = new Bundle(); extras.putString(SampleCustomEvent.DEGREE_OF_AWESOMENESS, ad.getDegreeOfAwesomeness()); this.setExtras(extras);
Yayıncılar, NativeAd
sınıfının getExtras()
yöntemini kullanarak verileri alabilir.
AdChoices
UnifiedNativeAdMapper
üzerinde setAdChoicesContent()
yöntemini kullanarak Reklam Seçenekleri simgesi sağlamak özel etkinliğinizden sorumludur. SampleNativeAdMapper
sitesinden Reklam Seçenekleri simgesinin nasıl sağlanacağını gösteren bir snippet'i burada bulabilirsiniz:
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, bir gösterim veya tıklamanın ne zaman gerçekleştiğini bilmesi gerekir ancak bu etkinlikleri yalnızca bir SDK'nın izlemesi gerekir. Uyumlulaştırılan SDK'nın gösterim ve tıklama izlemeyi kendi başına destekleyip desteklememesine bağlı olarak özel etkinliklerin kullanabileceği iki farklı yaklaşım vardır.
Google Mobile Ads SDK'sı ile tıklamaları ve gösterimleri izleme
Uyumlulaştırılmış SDK kendi gösterim ve tıklama izleme işlemlerini gerçekleştirmiyorsa, ancak tıklamaları ve gösterimleri kaydetmeye yönelik yöntemler sağlıyorsa Google Mobile Ads SDK'sı bu etkinlikleri izleyip bağdaştırıcıya bildirimde bulunabilir.
UnifiedNativeAdMapper
interface İki yöntem içerir:
recordImpression()
ve handleClick()
özel etkinliklerin uyumlulaştırılmış yerel reklam nesnesinde ilgili yöntemi çağırmak için uygulayabileceği:
Java
@Override public void recordImpression() { sampleAd.recordImpression(); } @Override public void handleClick(View view) { sampleAd.handleClick(view); }
SampleNativeAdMapper
, Örnek SDK'nın yerel reklam nesnesine bir referans içerdiğinden, bir tıklama veya gösterimi bildirmek için söz konusu nesnedeki uygun yöntemi çağırabilir. handleClick()
yönteminin tek bir parametre aldığını unutmayın: tıklamayı alan yerel reklam öğesine karşılık gelen View
nesnesi.
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. Bu durumda, UnifiedNativeAdMapper
oluşturucunuzda aşağıdaki iki çağrıyı yaparak varsayılan tıklama ve gösterim izlemeyi geçersiz kılmanız gerekir:
Java
setOverrideClickHandling(true); setOverrideImpressionRecording(true);
Tıklama ve gösterim izlemeyi geçersiz kılan özel etkinlikler, onAdClicked()
ve onAdImpression()
etkinliklerini Google Mobile Ads SDK'sına bildirmek için gerekir.
Uyumlulaştırılmış SDK'nın gösterimleri ve tıklamaları izlemek amacıyla izlemeyi etkinleştirmek için görünümlere erişmesi gerekir. Özel etkinlik, trackViews()
yöntemini geçersiz kılmalı ve yerel reklamın görünümünü izlemek üzere uyumlulaştırılmış SDK'ya iletmek için bunu kullanmalıdır. Özel etkinlik örneği projemizdeki örnek SDK (bu kılavuzun kod snippet'leri alınmıştır) bu yaklaşımı kullanmaz ancak kullanılmışsa özel etkinlik kodu aşağıdaki gibi 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, öğelerin bağımsız olarak izlenmesini destekliyorsa hangi görünümlerin tıklanabilir yapılması gerektiğini görmek için clickableAssetViews
öğesinin içine bakabilir. Bu harita, NativeAdAssetNames
içinde bir öğe adıyla kilitlenir. UnifiedNativeAdMapper
, görünüm referanslarını serbest bırakmak ve yerel reklam nesnesiyle ilişkisini kesmek için özel etkinliklerin geçersiz kılabileceği karşılık gelen bir untrackView()
yöntemi sunar.
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ümanlarında bulabilirsiniz.
Uygulamanızın Google Mobile Ads SDK'sından bu eşdeğer etkinlikleri alması için özel etkinliğinizin bu geri çağırmaları mümkün olduğunca fazla yönlendirmesi önemlidir. Geri çağırma işlevinin kullanımına ilişkin bir örneği burada bulabilirsiniz:
Böylece yerel reklamlar için özel etkinlikler uygulama işlemi tamamlanır. Tam örneği GitHub'da bulabilirsiniz.