Google Mobile Ads SDK'sı özel arama stillerini de destekler. Uygulamanız halihazırda Google Mobile Ads SDK'sını kullanıyorsa bunun yerine AFSMA SDK'sı sürümünü kullanmanızı öneririz.
18.1.0 veya önceki sürümlerden 19.0.0 ya da sonraki bir sürüme geçiyorsanız lütfen taşıma rehberimize bakın.
Ön koşullar
Bu uygulama kılavuzunda, aşağıdakiler hakkında bilgi sahibi olduğunuz varsayılmaktadır:
- Özel arama stillerine sahip AdSense Özel Arama Reklamları
- Android uygulaması geliştirme
AFS Yerel SDK'sını içe aktarma
SDK'yı ekleyin
AFS Yerel SDK'sını uygulamanıza eklemek için aşağıdakileri yapın:
Uygulama modülü dizininizin içindeki build.gradle
dosyasını açın.
SDK'nın en son sürümü için dependencies
altına yeni bir derleme kuralı ekleyin:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.0.3'
}
Üst düzey build.gradle
öğenizin, google()
deposuna veya maven { url "https://maven.google.com" }
öğesine bir referans içerdiğinden emin olun.
Google Play Bağımsız Sürüm Eşleştirme Eklentisi'ni projenize eklemek için bu talimatları uygulayın.
Bu eklentinin uygulanması, AFS Yerel SDK'sı Google Play Hizmetleri'nin uyumlu olmayan bir sürümüyle kullanıldığında uygulamanın derleme yapmasına izin vermek yerine çalışma zamanı kilitlenmelerine yol açma ihtimali olan bir gradle derleme hatasına neden olur. Projenizde Google Play Hizmetleri'nin uyumsuz sürümleri kullanıldığında yapı hatasına neden olmak için failOnVersionConflict()
ResolutionStrategy'yi projenize de uygulayabilirsiniz.
Değişiklikleri kaydedin ve araç çubuğunda Projeyi Gradle Dosyalarıyla Senkronize Et'i tıklayın.
Android Destek Kitaplıkları yerine AndroidX'i kullan
SDK'nın 17.0.0
sürümünden itibaren, uygulamanızın Android Destek Kitaplıkları yerine Jetpack (AndroidX) Kitaplıklarını kullanması gerekir. Uyumluluk gereksinimleri:
com.android.tools.build:gradle
öğesini 3.2.1 veya sonraki bir sürüme ayarlayın.compileSdkVersion
öğesini 28 veya sonraki bir sürüme ayarlayın.- Uygulamanızı Jetpack (AndroidX) kullanacak şekilde güncelleyin; AndroidX'e taşıma bölümündeki talimatları uygulayın.
Sınıflar
Uygulamanızda AFS yerel reklamları yayınlamak için aşağıdaki sınıfları uygulayın:
- Bu sınıf; eşzamansız olarak reklam isteme, reklamları önbelleğe alma, alma ve reklamları görüntüleme işlemlerinden sorumludur.
- Her reklam bağlamı için ayrı bir
SearchAdController
gerekir. Örneğin, arama sonuçları listesinin yanı sıra reklamların gösterildiği bir ekranınız ve belirli bir ürünün ayrıntılarıyla birlikte reklamları gösteren başka bir ekranınız varsa her durum için bir tane olmak üzere iki ayrıSearchAdController
örneği oluşturmanız gerekir. - Oluşturucuya web mülkü kodunuz (yayıncı kimliği), döndürülen reklamlara uygulanacak stil kimliğiniz ve
SearchAdOptions
değeri sağlanmalıdır. Oluşturucuda sağlananContext
,SearchAdController
öğesini içeren veView
reklamını yerleştireceğinizActivity
olmalıdır. - Yeni bir kullanıcı araması belirtmek ve eşzamansız bir reklam isteği başlatmak için
loadAds
yöntemini çağırın. Yeni bir çağrı yapıldığında, önceki çağrılardanloadAds
adresine yüklenen tüm reklamlar dahili reklam önbelleğinden temizlenir. - Reklam öğelerini görüntülemek için
createAdView
ile birView
oluşturun. - Reklamlar yüklendikten sonra, önbelleğe alınmış bir reklamı
View
konumunda oluşturmak için, öncedencreateAdView
ile oluşturulmuş birView
ilepopulateAdView
yöntemini çağırın. DoldurulacakView
öğesine ek olarak, reklamı benzersiz bir şekilde tanımlamak için rastgele bir dize olanadKey
öğesini sağlayın. Bu işlem, önbellekten döndürülen belirli reklam öğesini söz konusuadKey
ile ilişkilendirir. Böylece, aynıadKey
gelecekteki birpopulateAdView
çağrısına iletildiğinde, aynı reklam döndürülür. Örneğin,populateAdView
,adKey="keyA"
ile ilk kez çağrılırsa ve yürüyüş botları için bir reklam oluşturursaadKey="keyA"
ile yapılan sonraki herpopulateAdView
çağrısı, aynı yürüyüş botları reklamıyla doldurulur. (loadAds
öğesine yeni bir çağrı yapılması önbelleğe alınan tüm reklamları ve ilişkili reklam anahtarlarını temizler.)
- Reklamların istenme ve görüntülenme şeklini özelleştirmek için bu nesneyi
SearchAdController
oluşturucuya iletin.SearchAdOptions
nesnesi oluşturmak içinSearchAdOptions.Builder
üzerindebuild()
yöntemini çağırın.
View
SearchAdController
üzerindecreateAdView()
çağırarak reklamların bekletileceği birView
nesnesi oluşturun. Aynı anda en fazla bir reklam gösterir ancak aynıView
zaman içinde farklı reklamlar görüntülemek için geri dönüştürülebilir.
- Eşzamansız reklam isteğini başlatmak için
SearchAdRequest
ileSearchAdController
üzerindeloadAds
yöntemini çağırın.SearchAdRequest
nesnesi oluşturmak içinSearchAdRequest.Builder
üzerindebuild()
yöntemini çağırın.
- Bu arayüzü uygulayın ve birkaç durum için geri çağırmaları kaydetmek üzere
SearchAdController
oluşturucuya iletin. - Not: İptal edilen bir istekte (
loadAds
numaralı telefona yapılan ve ilk arama çözümlenmeden önceloadAds
numarasına yapılan başka bir aramayla kesintiye uğratılmış)AdListener
geri arama çağrılmaz.
Örnek uygulama
Aşağıdaki örnek, bir örnekte SearchAdController
oluşturma işlemini Activity
göstermektedir.
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
Kullanıcı bir sorgu başlattığında SearchAdRequest
oluşturun ve eşzamansız reklam isteği başlatmak için SearchAdController
üzerinde loadAds
çağrısı yapın.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Yüklenmiş bir reklamı reklam görünümüne doldurmak için onAdLoaded
geri çağırmanızı uygulayın.
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
Belirtilen sorguyla alakalı bir reklam artık adView
içinde görünür.
Hataları araştırma
SearchAdController
, uygulamanıza reklamların gösterilmeye hazır olduğunu bildirmek için onAdLoaded()
yöntemine sahip bir AdListener
nesnesi gerektirir. Hataları tespit edip düzeltebilmek için onAdFailedToLoad()
yöntemini de uygulamanız gerekir.
Örneğin, uygulamanızdaki hataları ayıklamak için aşağıdaki AdListener
öğelerini kullanabilirsiniz:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
onAdFailedToLoad()
geri çağırma yönteminde kullanılan sabitler AdListener'da tanımlanır.