Başlamak

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, bu kılavuzun geçmekte ilk defa ise, indirip kullanan birlikte takip önerilir AdMob testi uygulaması .

Firebase ile entegre edin

  1. Adımlarını tamamlayın iOS için Setup veya Android için Setup C ++ app AdMob ve Firebase ekleme bölümüne.

  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"

Bildirmek ve bir örneğini BannerView nesnesi:

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

Bir oluşturun AdSize ve afiş görünümü başlatmak:

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"

Bildirmek ve bir örneğini InterstitialAd nesnesi:

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 üyelerini belirleyerek yapılır AdRequest yapı. Yapı daha sonra geçirilir BannerView::LoadAd() veya InterstitialAd::LoadAd() yöntemi.

Hedeflemesi ve reklam isteklerini özelleştirme ile ilgili genel bilgi için lütfen check out iOS ve Android Hedefleme kılavuzları.

İşte AdRequest bir tarafından kullanılan yapı BannerView ve InterstitialAd bir reklam isteği yapmak için:

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;
};

Beyan ve başlatmak AdRequest yapı:

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

Aşağıdaki kod üyesi değerlerini ayarlar AdRequest reklam isteğine hedefleme bilgilerini eklemek için yapı:

// 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;

Geçiş AdRequest için yapı BannerView::LoadAd() ve Interstitial::LoadAd() yöntemlerine:

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 önceki tamamlanma durumunu belirlemek için bir yol sağlar BannerView veya InterstitialAd yöntem çağrıları. Bir çağrı yapıldığında InterstitialAd::LoadAd() yöntemiyle, örneğin, yeni bir gelecek yarattı 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.

En yöntemler BannerView ve InterstitialAd sınıfları uygulamalar, belirli bir eylem için son Future almak için kullanabileceği bir karşılık gelen "son sonuç" yöntemi vardır. InterstitialAd::LoadAd() metodu, örneğin, adı verilen bir mukabil yöntemi vardır InterstitialAd::LoadAdLastResult() . Bu son çağrının durumunu kontrol etmek için kullanılabilir bir Geleceği döndüren InterstitialAd::LoadAd() yöntemiyle.

Benzer şekilde, uygulamalar kullanabilirsiniz BannerView::InitializeLastResult() için son aramanın (varsa ve hata kodunu) durumunu temsil eden bir Geleceği almak için yöntem BannerView::Initialize() yöntemi. Onun durumu tamamlandıktan ve onun hata kodu ise firebase::admob::kAdMobErrorNone , o zaman sizsiniz, arayarak afiş görünümü görünür hale getirmek için hazır BannerView::Show() yöntemini:

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

Son çağrı için Geleceğin durumu kez BannerView::Show() metodu, tamamlandığında o zaman afiş görünüm içine bir reklam yüklemek için 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 kullanmak InterstitialAd::InitializeLastResult() için son aramanın (varsa ve hata kodunu) durumunu temsil eden bir Geleceği almak için yöntem InterstitialAd::Initialize() yöntemiyle. Onun durumu tamamlandıktan ve onun hata kodu ise firebase::admob::kAdMobErrorNone , o zaman geçiş reklamı yüklemek için hazırsınız:

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

Son çağrı için Geleceğin durumu kez InterstitialAd::LoadAd() metodu, tamamlandığında o zaman uygulamanızda bir sonraki doğal bir bekleme noktasında geçiş reklamı görüntülemek için 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 soyut sağlar BannerView::Listener sen genişletmek ve geçebileceğini sınıf BannerView::SetListener() bir afiş görünümün sunum devlet ve sınırlayıcı kutusuna değişikliklerden haberdar olmak amacıyla yöntemle. Benzer bir soyut InterstitialAd::Listener sınıfı da bir geçiş reklamın sunumu durumuna değişikliklerden haberdar olmak amacıyla uzatılabilir geçiş reklamlarına için sağlanmıştır.

Aşağıda uzanan sınıfının bir örneğidir uygulamasıdır BannerView::Listener (benzer bir uygulama geçiş reklamları için kullanılabilir) sınıfı:

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

Öğrenin fazla gelir elde AdMob ile ve kendi reklam birimi kimlikleriyle Bu kılavuzda kullanılan test reklam birimi kimliklerini değiştirmek emin olun.