Android İçin AİA Yerel Uygulaması

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:

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:

SearchAdController

  • 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ğlanan Context, SearchAdController öğesini içeren ve View reklamını yerleştireceğiniz Activity 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ılardan loadAds adresine yüklenen tüm reklamlar dahili reklam önbelleğinden temizlenir.
  • Reklam öğelerini görüntülemek için createAdView ile bir View oluşturun.
  • Reklamlar yüklendikten sonra, önbelleğe alınmış bir reklamı View konumunda oluşturmak için, önceden createAdView ile oluşturulmuş bir View ile populateAdView yöntemini çağırın. Doldurulacak View öğesine ek olarak, reklamı benzersiz bir şekilde tanımlamak için rastgele bir dize olan adKey öğesini sağlayın. Bu işlem, önbellekten döndürülen belirli reklam öğesini söz konusu adKey ile ilişkilendirir. Böylece, aynı adKey gelecekteki bir populateAdView ç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şturursa adKey="keyA" ile yapılan sonraki her populateAdView ç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.)

SearchAdOptions

  • Reklamların istenme ve görüntülenme şeklini özelleştirmek için bu nesneyi SearchAdController oluşturucuya iletin. SearchAdOptions nesnesi oluşturmak için SearchAdOptions.Builder üzerinde build() yöntemini çağırın.

View

  • SearchAdController üzerinde createAdView() çağırarak reklamların bekletileceği bir View 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.

SearchAdRequest

  • Eşzamansız reklam isteğini başlatmak için SearchAdRequest ile SearchAdController üzerinde loadAds yöntemini çağırın. SearchAdRequest nesnesi oluşturmak için SearchAdRequest.Builder üzerinde build() yöntemini çağırın.

AdListener

  • 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 önce loadAds 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.