Check out what’s new from Firebase at Google I/O 2022. Learn more

Başlayın

C++ uygulamalarınızda reklam görüntülemek için AdMob'u kullanabilirsiniz. Bu kılavuz, Firebase ile nasıl entegre edeceğinizi ve Google Mobile Ads SDK'sı ile nasıl etkileşimde bulunacağınızı gösterir.

Bu kılavuzu ilk kez okuyorsanız, AdMob test uygulamasını indirip takip etmeniz önerilir.

Firebase ile entegre edin

  1. AdMob ve Firebase'i C++ uygulamanıza eklemek için iOS için Kurulum veya Android için Kurulum bölümündeki adımları tamamlayın.

  2. Uygulamanızın C++ koduna aşağıdaki başlıkları ekleyin:

    #include "firebase/admob.h"
    #include "firebase/admob/types.h"
    #include "firebase/app.h"
    #include "firebase/future.h"
    
  3. AdMob kitaplığını AdMob uygulama kimliğinizle başlatmak için uygulamanızdaki C++ koduna aşağıdakini ekleyin (bu kod, bir banner görünümü veya geçiş reklamı oluşturmadan önce yürütülmelidir):

    #if defined(__ANDROID__)
    // Create the Firebase app.
    firebase::App* app =
        firebase::App::Create(firebase::AppOptions(),
                              your_jni_env,
                              your_android_activity);
    
    // Your Android AdMob app ID.
    const char* kAdMobAppID = "ca-app-pub-XXXXXXXXXXXXXXXX~NNNNNNNNNN";
    #else
    // Create the Firebase app.
    firebase::App* app =
        firebase::App::Create(firebase::AppOptions());
    
    // Your iOS AdMob app ID.
    const char* kAdMobAppID = "ca-app-pub-XXXXXXXXXXXXXXXX~NNNNNNNNNN";
    #endif  // __ANDROID__
    
    // Initialize the AdMob library with your AdMob app ID.
    firebase::admob::Initialize(*app, kAdMobAppID);
    

Google Mobil Reklamlar SDK'sı ile etkileşim kurun

Reklam birimi kimliklerini ayarlayın

Hem iOS hem de Android'de desteklenen C++ kodu yazarken, yalnızca belirli bir işletim sisteminde derlenmesi gereken kodu tanımlamak için önişlemci yönergelerini kullanmanız gerekebilir. Hem iOS hem de Android'de banner ve geçiş reklamları görüntülemek için, her işletim sistemi ve her benzersiz reklam yerleşimi için yeni bir reklam birimi kimliği oluşturmanız önerilir. Aşağıdaki reklam birimi kimlikleri, iOS ve Android için oluşturulmuştur ve her zaman test reklamları sunmak üzere yapılandırılmıştır:

#if defined(__ANDROID__)
// Android ad unit IDs
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/1033173712";
#else
// iOS ad unit IDs
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/4411468910";
#endif

Bir afiş görünümü ayarlayın

Uygulamanızın C++ koduna aşağıdaki başlığı ekleyin:

#include "firebase/admob/banner_view.h"

Bir BannerView nesnesini bildirin ve somutlaştırın:

firebase::admob::BannerView* banner_view;
banner_view = new firebase::admob::BannerView();

Bir AdSize oluşturun ve banner görünümünü başlatın:

firebase::admob::AdSize ad_size;
ad_size.ad_size_type = firebase::admob::kAdSizeStandard;
ad_size.width = 320;
ad_size.height = 50;
// my_ad_parent is a reference to an iOS UIView or an Android Activity.
// This is the parent UIView or Activity of the banner view.
banner_view->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kBannerAdUnit, ad_size);

Bir geçiş reklamı oluşturun

Uygulamanızın C++ koduna aşağıdaki başlığı ekleyin:

#include "firebase/admob/interstitial_ad.h"

Bir InterstitialAd nesnesi bildirin ve somutlaştırın:

firebase::admob::InterstitialAd* interstitial_ad;
interstitial_ad = new firebase::admob::InterstitialAd();

Geçiş reklamını başlat:

// my_ad_parent is a reference to an iOS UIView or an Android Activity.
// This is the parent UIView or Activity of the interstitial ad.
interstitial_ad->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kInterstitialAdUnit);

AdMob reklam isteği oluşturun

AdMob kitaplığı, bir reklam isteğine özel hedefleme bilgileri sağlamanıza olanak tanır. Bu, bir AdRequest yapısının üyelerini ayarlayarak yapılır. Yapı daha sonra BannerView::LoadAd() veya InterstitialAd::LoadAd() yöntemine iletilir.

Reklam isteklerini hedefleme ve özelleştirme hakkında genel bilgiler için iOS ve Android Hedefleme kılavuzlarımıza bakın.

BannerView ve InterstitialAd tarafından reklam isteğinde bulunmak için kullanılan AdRequest yapısı aşağıda verilmiştir:

struct AdRequest {
  const char **test_device_ids;
  unsigned int test_device_id_count;
  const char **keywords;
  unsigned int keyword_count;
  const KeyValuePair *extras;
  unsigned int extras_count;
  int birthday_day;
  int birthday_month;
  int birthday_year;
  Gender gender;
  ChildDirectedTreatmentState tagged_for_child_directed_treatment;
};

AdRequest yapısını bildirin ve başlatın:

// Initialize all the AdRequest struct member values to zero.
firebase::admob::AdRequest my_ad_request = {};

Aşağıdaki kod, reklam isteğine hedefleme bilgileri eklemek için AdRequest yapısının üye değerlerini ayarlar:

// If the app is aware of the user's gender, it can be added to the
// targeting information. Otherwise, "unknown" should be used.
my_ad_request.gender = firebase::admob::kGenderUnknown;

// The user's birthday, if known. Note that months are indexed from one.
my_ad_request.birthday_day = 10;
my_ad_request.birthday_month = 11;
my_ad_request.birthday_year = 1976;

// Additional keywords to be used in targeting.
static const char* kKeywords[] = {"AdMob", "C++", "Fun"};
my_ad_request.keyword_count = sizeof(kKeywords) / sizeof(kKeywords[0]);
my_ad_request.keywords = kKeywords;

// "Extra" key value pairs can be added to the request as well.
static const firebase::admob::KeyValuePair kRequestExtras[] = {
    {"the_name_of_an_extra", "the_value_for_that_extra"}};
my_ad_request.extras_count = sizeof(kRequestExtras) / sizeof(kRequestExtras[0]);
my_ad_request.extras = kRequestExtras;

// Register the device IDs associated with any devices that will be used to
// test your app. Below are sample test device IDs used for making the ad request.
static const char* kTestDeviceIDs[] =
    {"2077ef9a63d2b398840261c8221a0c9b",
     "098fe087d987c9a878965454a65654d7"};
my_ad_request.test_device_id_count =
    sizeof(kTestDeviceIDs) / sizeof(kTestDeviceIDs[0]);
my_ad_request.test_device_ids = kTestDeviceIDs;

AdRequest yapısını BannerView::LoadAd() ve Interstitial::LoadAd() yöntemlerine iletin:

banner_view->LoadAd(my_ad_request);
interstitial_ad->LoadAd(my_ad_request);

Note: A single `AdRequest` struct can be reused for multiple calls.

Yöntem çağrılarının tamamlanma durumunu izlemek için Vadeli İşlemleri kullanın

Vadeli işlemler, önceki BannerView veya InterstitialAd yöntemi çağrılarınızın tamamlanma durumunu belirlemeniz için bir yol sağlar. Örneğin, InterstitialAd::LoadAd() yöntemine bir çağrı yapıldığında, yeni bir Future oluşturulur ve döndürülür. Uygulamalar, reklamın ne zaman yüklendiğini belirlemek için Geleceğin durumunu yoklayabilir. Gelecek tamamlandığında, geçiş reklamı, uygulamanızdaki bir sonraki doğal durma noktasında görüntülenmeye hazırdır.

BannerView ve InterstitialAd sınıflarındaki çoğu yöntem, uygulamaların belirli bir eylem için en son Geleceği almak için kullanabileceği karşılık gelen bir "son sonuç" yöntemine sahiptir. Örneğin, InterstitialAd::LoadAd() yöntemi, InterstitialAd::LoadAdLastResult() adlı karşılık gelen bir yönteme sahiptir. InterstitialAd::LoadAd() yöntemine yapılan son çağrının durumunu kontrol etmek için kullanılabilecek bir Future döndürür.

Benzer şekilde uygulamalar, BannerView::InitializeLastResult() yöntemine yapılan son çağrının durumunu (ve varsa hata kodunu) temsil eden bir Gelecek elde etmek için BannerView::Initialize() yöntemini kullanabilir. Durumu tamamlandıysa ve hata kodu firebase::admob::kAdMobErrorNone ise, BannerView::Show() yöntemini çağırarak banner görünümünü görünür hale getirmeye hazırsınız:

if (banner_view->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->Show();
}

BannerView::Show() yöntemine yapılan son çağrı için Geleceğin durumu tamamlandıktan sonra, banner görünümüne bir reklam yüklemeye hazırsınız:

if (banner_view->ShowLastResult().status() ==
    firebase::kFutureStatusComplete &&
    banner_view->ShowLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  banner_view->LoadAd(my_ad_request);
}

Geçiş reklamları için InterstitialAd::InitializeLastResult() yöntemine yapılan son çağrının durumunu (ve varsa hata kodunu) temsil eden bir Gelecek elde etmek için InterstitialAd::Initialize() yöntemini kullanın. Durumu tamamlandıysa ve hata kodu firebase::admob::kAdMobErrorNone ise, geçiş reklamını yüklemeye hazırsınız:

if (interstitial_ad->InitializeLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->InitializeLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->LoadAd(my_ad_request);
}

InterstitialAd::LoadAd() yöntemine yapılan son çağrı için Geleceğin durumu tamamlandıktan sonra, geçiş reklamını uygulamanızdaki bir sonraki doğal durma noktasında görüntülemeye hazırsınız:

if (interstitial_ad->LoadAdLastResult().status() ==
    firebase::kFutureStatusComplete &&
    interstitial_ad->LoadAdLastResult().error() ==
    firebase::admob::kAdMobErrorNone) {
  interstitial_ad->Show();
}

Bir Gelecek tamamlandığında çağrılacak geri aramaları da kaydedebilirsiniz. Bu kod parçacığı, geri arama için bir işlev işaretçisi kullanır:

// Initialize the interstitial ad.
interstitial_ad->Initialize(static_cast<firebase::admob::AdParent>(my_ad_parent), kInterstitialAdUnit);

// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. In this example, we pass the interstitial ad object to be
// used in the OnCompletionCallback function.
interstitial_ad->InitializeLastResult().OnCompletion(OnCompletionCallback, interstitial_ad /*user_data*/);

// The OnCompletion callback function.
static void OnCompletionCallback(const firebase::Future<void>& future, void* user_data) {
  // Called when the Future is completed for the last call to the InterstitialAd::Initialize()
  // method. If the error code is firebase::admob::kAdMobErrorNone, then you're ready to
  // load the interstitial ad.
  firebase::admob::InterstitialAd *interstitial_ad = static_cast<firebase::admob::InterstitialAd*>(user_data);
  if (future.error() == firebase::admob::kAdMobErrorNone) {
    interstitial_ad->LoadAd(my_ad_request);
  }
}

Reklam yaşam döngüsü olaylarından haberdar olmak için bir dinleyici kullanın

AdMob, bir banner görünümünün sunum durumu ve sınırlayıcı kutusundaki değişikliklerden haberdar olmak için genişletebileceğiniz ve BannerView::SetListener() yöntemine aktarabileceğiniz soyut bir BannerView::Listener sınıfı sağlar. Benzer bir özet InterstitialAd::Listener sınıfı, bir geçiş reklamının sunum durumundaki değişikliklerden haberdar olmak için genişletilebilen geçiş reklamları için de sağlanır.

Aşağıda, BannerView::Listener sınıfını genişleten bir sınıfın örnek uygulaması verilmiştir (benzer bir uygulama geçiş reklamları için kullanılabilir):

class ExampleBannerViewListener
    : public firebase::admob::BannerView::Listener {
public:
  ExampleBannerViewListener() {}

  void OnPresentationStateChanged(
      firebase::admob::BannerView* banner_view,
      firebase::admob::BannerView::PresentationState state) override {
    // This method gets called when the banner view's presentation
    // state changes.
  }

  void OnBoundingBoxChanged(
      firebase::admob::BannerView* banner_view,
      firebase::admob::BoundingBox box) override {
    // This method gets called when the banner view's bounding box
    // changes.
  }
};

Sıradaki ne

Uygulamanızdan AdMob ile nasıl para kazanacağınızı öğrenin ve bu kılavuzda kullanılan test reklam birimi kimliklerini kendi reklam birimi kimliklerinizle değiştirdiğinizden emin olun.