Это руководство предназначено для издателей, которые хотят монетизировать приложение C++ с помощью AdMob без использования Firebase. Если вы планируете включить Firebase в свое приложение или подумываете об этом, вместо этого обратитесь к версии этого руководства AdMob с Firebase .
Интеграция Google Mobile Ads C++ SDK в приложение — это первый шаг на пути к показу рекламы и получению дохода. После интеграции SDK вы можете выбрать формат рекламы, например межстраничную или с вознаграждением, и выполнить действия по его реализации.
SDK Google Mobile Ads C++ является оболочкой SDK Google Mobile Ads для iOS и Android и доступен только на этих платформах. SDK Google Mobile Ads C++ использует конструкции Firebase C++ для поддержки асинхронных операций, поэтому он находится в пространстве имен firebase::gma
.
Если вы впервые знакомитесь с этим руководством, рекомендуем загрузить и следовать ему, используя тестовое приложение Google Mobile Ads C++ .
Предварительные условия
Андроид
- Используйте Android Studio 3.2 или выше.
- Убедитесь, что в файле сборки вашего приложения используются следующие значения:
-
minSdkVersion
16 или выше. -
compileSdkVersion
28 или выше.
-
iOS
- Используйте Xcode 13 или выше.
- Целевая iOS 10.0 или более поздняя версия
Настройте приложение в своем аккаунте AdMob.
Зарегистрируйте свое приложение как приложение AdMob, выполнив следующие действия:
Войдите в систему или зарегистрируйте учетную запись AdMob.
Зарегистрируйте свое приложение в AdMob . На этом этапе создается приложение AdMob с уникальным идентификатором приложения AdMob , который понадобится далее в этом руководстве.
Установите Google Mobile Ads C++ SDK.
Поскольку SDK Google Mobile Ads C++ находится в пространстве имен firebase::gma
, загрузите Firebase C++ SDK , а затем разархивируйте его в выбранный вами каталог.
Firebase C++ SDK не зависит от платформы, но требует настройки библиотеки для конкретной платформы.
Андроид
Мы рекомендуем использовать CMake, но вы можете найти инструкции по ndk-build в нашем общем руководстве по началу работы с Firebase C++ SDK , чтобы связать libfirebase_app.a
и libfirebase_gma.a
с вашим приложением.
В файле
gradle.properties
вашего проекта укажите расположение разархивированного SDK:systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
В файл
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"
В файл Gradle вашего модуля (на уровне приложения) — обычно
app/build.gradle
— добавьте следующий контент, который включает зависимость библиотеки для Google Mobile Ads C++ SDK.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 }
В файл
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}")
Синхронизируйте приложение, чтобы убедиться, что все зависимости имеют необходимые версии.
iOS
Действия, описанные в этом разделе, представляют собой пример добавления Google Mobile Ads C++ SDK в ваш проект iOS.
Получите CocoaPods версии 1 или новее, выполнив:
sudo gem install cocoapods --pre
Добавьте модуль Google Mobile Ads из разархивированного SDK.
Создайте подфайл, если у вас его еще нет:
cd APP_DIRECTORY
pod init
В свой подфайл добавьте модули для Google Mobile Ads C++ SDK, Google User Messaging Platform SDK и минимальный основной SDK Firebase (требуется для GMA C++ SDK):
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
Установите модули, затем откройте файл
.xcworkspace
в Xcode.pod install
open APP.xcworkspace
Добавьте в проект следующие фреймворки из Firebase C++ SDK:
-
xcframeworks/firebase.xcframework
-
xcframeworks/firebase_gma.xcframework
-
Все готово! Ваше приложение C++ настроено на использование Google Mobile Ads C++ SDK без каких-либо других сервисов Firebase.
Настройте идентификатор приложения AdMob для вашего приложения.
Андроид
Выполните шаг 3 статьи «Настройка приложения» , как описано в руководстве Mobile Ads SDK для Android, а затем вернитесь на эту страницу.
iOS
Выполните шаг «Обновите свой Info.plist», как описано в руководстве Mobile Ads SDK для iOS, а затем вернитесь на эту страницу.
Инициализируйте Google Mobile Ads SDK
Перед загрузкой рекламы попросите ваше приложение инициализировать Google Mobile Ads C++ SDK, вызвав firebase::gma::Initialize()
, который инициализирует SDK и завершает firebase::Future
после завершения инициализации (или после 30-секундного тайм-аута). Это необходимо сделать только один раз, в идеале при запуске приложения.
Объявления могут быть предварительно загружены с помощью Google Mobile Ads C++ SDK или 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 предлагает множество различных форматов объявлений, поэтому вы можете выбрать тот, который лучше всего соответствует пользовательскому опыту вашего приложения.
Баннер
Прямоугольные объявления, которые появляются вверху или внизу экрана устройства. Рекламные баннеры остаются на экране, пока пользователи взаимодействуют с приложением, и могут автоматически обновляться через определенный период времени. Если вы новичок в мобильной рекламе, это отличное место для начала.
Межстраничный
Полноэкранная реклама, закрывающая интерфейс приложения до тех пор, пока его не закроет пользователь. Их лучше всего использовать в естественных паузах в процессе выполнения приложения, например, между уровнями игры или сразу после завершения задачи.
Внедрите межстраничную рекламу
Награжден
Объявления, которые вознаграждают пользователей за просмотр коротких видеороликов и взаимодействие с игровой рекламой и опросами. Используется для монетизации бесплатных приложений.
Внедрите рекламу с вознаграждением
,Это руководство предназначено для издателей, которые хотят монетизировать приложение C++ с помощью AdMob без использования Firebase. Если вы планируете включить Firebase в свое приложение или подумываете об этом, вместо этого обратитесь к версии этого руководства AdMob с Firebase .
Интеграция Google Mobile Ads C++ SDK в приложение — это первый шаг на пути к показу рекламы и получению дохода. После интеграции SDK вы можете выбрать формат рекламы, например межстраничную или с вознаграждением, и выполнить действия по его реализации.
SDK Google Mobile Ads C++ является оболочкой SDK Google Mobile Ads для iOS и Android и доступен только на этих платформах. SDK Google Mobile Ads C++ использует конструкции Firebase C++ для поддержки асинхронных операций, поэтому он находится в пространстве имен firebase::gma
.
Если вы впервые знакомитесь с этим руководством, рекомендуем загрузить и следовать ему, используя тестовое приложение Google Mobile Ads C++ .
Предварительные условия
Андроид
- Используйте Android Studio 3.2 или выше.
- Убедитесь, что в файле сборки вашего приложения используются следующие значения:
-
minSdkVersion
16 или выше. -
compileSdkVersion
28 или выше.
-
iOS
- Используйте Xcode 13 или выше.
- Целевая iOS 10.0 или более поздняя версия
Настройте приложение в своем аккаунте AdMob.
Зарегистрируйте свое приложение как приложение AdMob, выполнив следующие действия:
Войдите в систему или зарегистрируйте учетную запись AdMob.
Зарегистрируйте свое приложение в AdMob . На этом этапе создается приложение AdMob с уникальным идентификатором приложения AdMob , который понадобится далее в этом руководстве.
Установите Google Mobile Ads C++ SDK.
Поскольку SDK Google Mobile Ads C++ находится в пространстве имен firebase::gma
, загрузите Firebase C++ SDK и разархивируйте его в выбранный вами каталог.
Firebase C++ SDK не зависит от платформы, но требует настройки библиотеки для конкретной платформы.
Андроид
Мы рекомендуем использовать CMake, но вы можете найти инструкции по ndk-build в нашем общем руководстве по началу работы с Firebase C++ SDK , чтобы связать libfirebase_app.a
и libfirebase_gma.a
с вашим приложением.
В файле
gradle.properties
вашего проекта укажите расположение разархивированного SDK:systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
В файл
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"
В файл Gradle вашего модуля (на уровне приложения) — обычно
app/build.gradle
— добавьте следующий контент, который включает зависимость библиотеки для Google Mobile Ads C++ SDK.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 }
В файл
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}")
Синхронизируйте приложение, чтобы убедиться, что все зависимости имеют необходимые версии.
iOS
Действия, описанные в этом разделе, представляют собой пример добавления SDK Google Mobile Ads C++ в проект iOS.
Получите CocoaPods версии 1 или новее, выполнив:
sudo gem install cocoapods --pre
Добавьте модуль Google Mobile Ads из разархивированного SDK.
Создайте подфайл, если у вас его еще нет:
cd APP_DIRECTORY
pod init
В свой подфайл добавьте модули для Google Mobile Ads C++ SDK, Google User Messaging Platform SDK и минимальный основной SDK Firebase (требуется для GMA C++ SDK):
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
Установите модули, затем откройте файл
.xcworkspace
в Xcode.pod install
open APP.xcworkspace
Добавьте в проект следующие фреймворки из Firebase C++ SDK:
-
xcframeworks/firebase.xcframework
-
xcframeworks/firebase_gma.xcframework
-
Все готово! Ваше приложение C++ настроено на использование Google Mobile Ads C++ SDK без каких-либо других сервисов Firebase.
Настройте идентификатор приложения AdMob для вашего приложения.
Андроид
Выполните шаг 3 статьи «Настройка приложения» , как описано в руководстве Mobile Ads SDK для Android, а затем вернитесь на эту страницу.
iOS
Выполните шаг «Обновите свой Info.plist», как описано в руководстве Mobile Ads SDK iOS, а затем вернитесь на эту страницу.
Инициализируйте Google Mobile Ads SDK
Перед загрузкой рекламы попросите ваше приложение инициализировать Google Mobile Ads C++ SDK, вызвав firebase::gma::Initialize()
, который инициализирует SDK и завершает firebase::Future
после завершения инициализации (или после 30-секундного тайм-аута). Это необходимо сделать только один раз, в идеале при запуске приложения.
Объявления могут быть предварительно загружены с помощью Google Mobile Ads C++ SDK или 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 предлагает множество различных форматов объявлений, поэтому вы можете выбрать тот, который лучше всего соответствует пользовательскому опыту вашего приложения.
Баннер
Прямоугольные объявления, которые появляются вверху или внизу экрана устройства. Рекламные баннеры остаются на экране, пока пользователи взаимодействуют с приложением, и могут автоматически обновляться через определенный период времени. Если вы новичок в мобильной рекламе, это отличное место для начала.
Межстраничный
Полноэкранная реклама, закрывающая интерфейс приложения до тех пор, пока его не закроет пользователь. Их лучше всего использовать в естественных паузах в процессе выполнения приложения, например, между уровнями игры или сразу после завершения задачи.
Внедрите межстраничную рекламу
Награжден
Объявления, которые вознаграждают пользователей за просмотр коротких видеороликов и взаимодействие с игровой рекламой и опросами. Используется для монетизации бесплатных приложений.