Начать, начать

Это руководство предназначено для издателей, которые хотят монетизировать приложение C++ с помощью AdMob и не используют Firebase. Если вы планируете включить Firebase в свое приложение (или рассматриваете возможность этого), ознакомьтесь с версией этого руководства для AdMob с Firebase .

Интеграция Google Mobile Ads C++ SDK в приложение — это первый шаг к показу рекламы и получению дохода. После интеграции SDK вы можете выбрать формат объявления (например, межстраничное или с вознаграждением) и выполнить шаги по его внедрению.

Google Mobile Ads C++ SDK объединяет SDK Google Mobile Ads для iOS и Android и доступен только на этих платформах. Google Mobile Ads C++ SDK использует конструкции Firebase C++ для поддержки асинхронных операций, поэтому он находится в пространстве имен firebase::gma .

Если вы впервые просматриваете это руководство, мы рекомендуем вам загрузить и использовать тестовое приложение Google Mobile Ads C++ .

Предпосылки

Андроид

  • Используйте Android Studio 3.2 или выше
  • Убедитесь, что в файле сборки вашего приложения используются следующие значения:
    • minSdkVersion 16 или выше
    • compileSdkVersion 28 или выше

iOS

  • Используйте Xcode 13 или выше
  • Таргетинг на iOS 10.0 или выше

Настройте приложение в своем аккаунте AdMob.

Зарегистрируйте свое приложение как приложение AdMob, выполнив следующие действия:

  1. Войдите или зарегистрируйте аккаунт AdMob.

  2. Зарегистрируйте свое приложение в AdMob . На этом шаге создается приложение AdMob с уникальным идентификатором приложения AdMob , который понадобится далее в этом руководстве.

Установите SDK Google Mobile Ads C++.

Поскольку SDK Google Mobile Ads C++ находится в пространстве имен firebase::gma , загрузите SDK Firebase C++ и разархивируйте его в любой каталог по вашему выбору.

Firebase C++ SDK не зависит от платформы, но для него требуются конфигурации библиотек для конкретной платформы.

Андроид

  1. В файле gradle.properties вашего проекта укажите расположение разархивированного SDK:

      systemProp.firebase_cpp_sdk.dir=full-path-to-SDK
    
  2. В файл settings.gradle вашего проекта добавьте следующее содержимое:

      def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir')
    
      gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir"
      includeBuild "$firebase_cpp_sdk_dir"
    
  3. В файл Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle ) добавьте следующий контент, который включает зависимость библиотеки для SDK Google Mobile Ads C++.

      android.defaultConfig.externalNativeBuild.cmake {
        arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
      }
    
      # Add the dependency for the Google Mobile Ads C++ SDK
      apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
      firebaseCpp.dependencies {
        gma
      }
    
  4. В файл CMakeLists.txt вашего проекта добавьте следующее содержимое.

      # Add Firebase libraries to the target using the function from the SDK.
      add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
      # Add the Google Mobile Ads C++ SDK.
    
      # The Firebase C++ library `firebase_app` is required,
      # and it must always be listed last.
    
      set(firebase_libs
        firebase_gma
        firebase_app
      )
    
      target_link_libraries(${target_name} "${firebase_libs}")
    
  5. Синхронизируйте свое приложение, чтобы убедиться, что все зависимости имеют необходимые версии.

Готово! Ваше приложение C++ настроено на использование Google Mobile Ads C++ SDK без каких-либо других служб Firebase.

iOS

Шаги, описанные в этом разделе, являются примером того, как добавить Google Mobile Ads C++ SDK в проект iOS.

  1. Получите CocoaPods версии 1 или более поздней, запустив:

    sudo gem install cocoapods --pre
    
  2. Добавьте модуль Google Mobile Ads из разархивированного SDK.

    1. Создайте подфайл, если у вас его еще нет:

      cd your-app-directory
      pod init
      
    2. В свой подфайл добавьте модуль для Google Mobile Ads C++ SDK:

        pod 'Google-Mobile-Ads-SDK'
      
    3. Установите модуль, затем откройте файл .xcworkspace в Xcode.

      pod install
      open your-app.xcworkspace
      
    4. Добавьте в проект следующие платформы из SDK Firebase C++:

      • xcframeworks/firebase.xcframework
      • xcframeworks/firebase_gma.xcframework

Готово! Ваше приложение C++ настроено на использование Google Mobile Ads C++ SDK без каких-либо других служб Firebase.

Настройте идентификатор приложения AdMob для своего приложения

Андроид

Выполните шаг 3 раздела Настройка приложения, как описано в руководстве Mobile Ads SDK для Android, а затем вернитесь на эту страницу начала работы с C++.

iOS

Выполните шаг Update your Info.plist , как описано в руководстве Mobile Ads SDK для iOS, а затем вернитесь на эту страницу начала работы с C++.

Инициализируйте Google Mobile Ads SDK

Перед загрузкой объявлений попросите ваше приложение инициализировать SDK Google Mobile Ads C++, вызвав firebase::gma::Initialize() , который инициализирует SDK и завершает firebase::Future после завершения инициализации (или после 30-секундного тайм-аута). Это нужно сделать только один раз, в идеале при запуске приложения.

Объявления могут быть предварительно загружены с помощью SDK Google Mobile Ads C++ или SDK партнеров-посредников при вызове Initialize() . Если вам нужно получить согласие от пользователей в Европейской экономической зоне (ЕЭЗ), установить какие-либо флаги для конкретного запроса (например, tag_for_child_directed_treatment или tag_for_under_age_of_consent ) или предпринять другие действия перед загрузкой рекламы, обязательно сделайте это, вызвав firebase::gma::SetRequestConfiguration() перед инициализацией Google Mobile Ads C++ SDK. Для получения дополнительной информации см. наше руководство по таргетингу .

Вот пример вызова Initialize() :

Андроид

// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
  firebase::gma::Initialize(jni_env, j_activity, &result);

if (result != kInitResultSuccess) {
  // Initialization immediately failed, most likely due to a missing dependency.
  // Check the device logs for more information.
  return;
}

// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
    future.error() == firebase::gma::kAdErrorCodeNone) {
  // Initialization completed.
} else {
  // Initialization on-going, or an error has occurred.
}

iOS

// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
  firebase::gma::Initialize(&result);

if (result != kInitResultSuccess) {
  // Initialization immediately failed, most likely due to a missing dependency.
  // Check the device logs for more information.
  return;
}

// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
    future.error() == firebase::gma::kAdErrorCodeNone) {
  // Initialization completed.
} else {
  // Initialization on-going, or an error has occurred.
}

Используйте Future для отслеживания состояния завершения вызова метода

Future предоставляет вам способ определить состояние завершения вызовов асинхронных методов.

Например, когда ваше приложение вызывает firebase::gma::Initialize() , создается и возвращается новый firebase::Future . Затем ваше приложение может опросить status() Future , чтобы определить, когда инициализация завершена. После завершения ваше приложение может вызвать result() для получения результирующего AdapterInitializationStatus .

Методы, возвращающие Future , имеют соответствующий метод «последнего результата», который приложения могут использовать для получения самого последнего Future для данного действия. Например, у firebase::gma::Initialize() есть соответствующий метод с именем firebase::gma::InitializeLastResult() , который возвращает Future , который ваше приложение может использовать для проверки состояния последнего вызова firebase::gma::Initialize() .

Если состояние Future завершено и его код ошибки — firebase::gma::kAdErrorCodeNone , то операция выполнена успешно.

Вы также можете зарегистрировать обратные вызовы, которые будут вызываться при завершении Future . В некоторых случаях обратный вызов будет выполняться в другом потоке, поэтому убедитесь, что ваш код является потокобезопасным. Этот фрагмент кода использует указатель функции для обратного вызова:

// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
  /*user_data=*/nullptr);

// The OnCompletion callback function.
static void OnCompletionCallback(
  const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
  // Called when the Future is completed for the last call to firebase::gma::Initialize().
  // If the error code is firebase::gma::kAdErrorCodeNone,
  // then the SDK has been successfully initialized.
  if (future.error() == firebase::gma::kAdErrorCodeNone) {
    // success!
  } else {
    // failure.
  }
}

Выберите формат объявления

Google Mobile Ads C++ SDK теперь импортирован, и вы готовы реализовать рекламу. AdMob предлагает несколько различных форматов объявлений, поэтому вы можете выбрать тот, который лучше всего подходит для пользователей вашего приложения.

Прямоугольные объявления, которые появляются вверху или внизу экрана устройства. Баннеры остаются на экране, пока пользователи взаимодействуют с приложением, и могут автоматически обновляться через определенный период времени. Если вы новичок в мобильной рекламе, это отличное место для начала.

Внедрить баннерную рекламу

межстраничный

Полноэкранная реклама, закрывающая интерфейс приложения до тех пор, пока пользователь не закроет ее. Их лучше всего использовать в естественных паузах в потоке выполнения приложения, например, между уровнями игры или сразу после завершения задачи.

Внедрить межстраничную рекламу

Вознагражден

Объявления, которые вознаграждают пользователей за просмотр коротких видеороликов и взаимодействие с воспроизводимой рекламой и опросами. Используется для монетизации бесплатных приложений.

Реализуйте рекламу с вознаграждением