PAL позволяет отправлять рекламные сигналы Google в запросах на рекламу и во время воспроизведения рекламы.
В этом руководстве рассматривается добавление Android PAL SDK в ваше приложение. Чтобы увидеть пример приложения, использующего PAL для генерации одноразового значения, загрузите пример для Android с GitHub .
Добавьте Android PAL SDK как библиотеку
Начиная с версии 18.0.0, PAL SDK размещен в репозитории Maven от Google и может быть добавлен в ваше приложение следующим образом:
implementation 'com.google.android.gms:play-services-pal:22.1.0'
Кроме того, PAL SDK можно загрузить из репозитория Maven от Google и вручную добавить в свое приложение.
Генерировать одноразовый код
Нонс — это одна зашифрованная строка, генерируемая PAL с помощью класса NonceLoader
. PAL требует, чтобы каждый запрос потока сопровождался уникальным нонсом. Однако вы можете повторно использовать нонсы для нескольких запросов рекламы в одном потоке. Чтобы сгенерировать нонс с помощью PAL SDK, внесите следующие изменения в импорт и настройку PAL, а также создайте функцию для генерации нонса:
Импортируйте и настройте PAL, выполнив следующие действия:
Импорт классов PAL:
import com.google.ads.interactivemedia.pal.ConsentSettings; import com.google.ads.interactivemedia.pal.NonceLoader; import com.google.ads.interactivemedia.pal.NonceManager; import com.google.ads.interactivemedia.pal.NonceRequest; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import java.util.HashSet; import java.util.Set;
Создайте приватные переменные для хранения экземпляров
NonceLoader
иNonceManager
:private NonceLoader nonceLoader; private NonceManager nonceManager;
Инициализируйте экземпляр
NonceLoader
с экземпляромConsentSettings
в методеonCreate
:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // The default value for allowStorage() is false, but can be // changed once the appropriate consent has been gathered. The // getConsentToStorage() method is a placeholder for the publisher's own // method of obtaining user consent, either by integrating with a CMP or // based on other methods the publisher chooses to handle storage consent. boolean isStorageAllowed = getConsentToStorage(); ConsentSettings consentSettings = ConsentSettings.builder().allowStorage(isStorageAllowed).build(); // It is important to instantiate the NonceLoader as early as possible to // allow it to initialize and preload data for a faster experience when // loading the NonceManager. A new NonceLoader will need to be instantiated // if the ConsentSettings change for the user. nonceLoader = new NonceLoader(this, consentSettings); adClickButton = findViewById(R.id.send_click_button); logView = findViewById(R.id.log_view); logView.setMovementMethod(new ScrollingMovementMethod()); }
В вашем приложении создайте один экземпляр класса
NonceLoader
для каждого сеанса пользователя. Если в вашем приложении несколько страниц или эквивалентных конструкций, создайте новый экземплярNonceLoader
для каждой страницы или эквивалента страницы. Используя один и тот же экземплярNonceLoader
, вы сохраняете коррелятор страницы&correlator
неизменным на протяжении всего жизненного цикла страницы или сеанса пользователя в приложении. Вы по-прежнему контролируете коррелятор потока&scor
, который необходимо сбрасывать для каждого нового потока, генерируя новое одноразовое значение.Для реализации функций ограничения частоты показов и конкурентного исключения все запросы рекламы одного и того же потока должны иметь одинаковый экземпляр
NonceLoader
и значение коррелятора потока.Сгенерировать одноразовый номер:
public void generateNonceForAdRequest(View view) { logMessage("Generate Nonce Request"); Set supportedApiFrameWorksSet = new HashSet(); // The values 2, 7, and 9 correspond to player support for VPAID 2.0, // OMID 1.0, and SIMID 1.1. supportedApiFrameWorksSet.add(2); supportedApiFrameWorksSet.add(7); supportedApiFrameWorksSet.add(9); NonceRequest nonceRequest = NonceRequest.builder() .descriptionURL("https://example.com/content1") .iconsSupported(true) .omidPartnerVersion("6.2.1") .omidPartnerName("Example Publisher") .playerType("ExamplePlayerType") .playerVersion("1.0.0") .ppid("testPpid") .sessionId("Sample SID") .supportedApiFrameworks(supportedApiFrameWorksSet) .videoPlayerHeight(480) .videoPlayerWidth(640) .willAdAutoPlay(true) .willAdPlayMuted(false) .build(); nonceLoader .loadNonceManager(nonceRequest) .addOnSuccessListener( new OnSuccessListener<NonceManager>() { @Override public void onSuccess(NonceManager manager) { nonceManager = manager; String nonceString = manager.getNonce(); logMessage("Nonce generated"); logMessage(nonceString.substring(0, 20) + "..."); Log.i(LOG_TAG, "Generated nonce: " + nonceString); // From here you would trigger your ad request and move on to initialize content. exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString); adClickButton.setEnabled(true); } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(Exception error) { logMessage("Nonce generation failed"); Log.e(LOG_TAG, "Nonce generation failed: " + error.getMessage()); } }); }
Вам нужен только один одноразовый код для всех запросов рекламы при воспроизведении одного потока. Для тестирования вызовите эту функцию при нажатии кнопки в тестовом приложении. Параметры
NonceRequest
, заданные в этом руководстве, являются примерами. Задайте собственные параметры, исходя из характеристик вашего приложения.Эта функция асинхронно генерирует одноразовый код. Необходимо обрабатывать как успешные, так и неудачные запросы одноразового кода. После того, как менеджер одноразовых кодов станет доступен, извлеките одноразовый код, прежде чем отправлять запрос на рекламу, используя метод
nonceManager.getNonce()
.
Прикрепить одноразовый код к запросу объявления
Чтобы использовать сгенерированный одноразовый код, добавьте к своему тегу объявления параметр givn
и значение одноразового кода перед отправкой запросов на рекламу:
// From here you would trigger your ad request and move on to initialize content.
exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
События воспроизведения трека
Для отслеживания событий воспроизведения необходимо настроить обработчики событий для отправки рекламных сигналов в Google:
// Triggered when a user clicks-through on an ad which was requested using a PAL nonce.
public void sendAdClick(View view) {
logMessage("Ad click sent");
if (nonceManager != null) {
nonceManager.sendAdClick();
}
}
// In a typical PAL app, this is called when a user touch or click is detected,
// on the ad other than an ad click-through.
public void onVideoViewTouch(MotionEvent e) {
if (nonceManager != null) {
nonceManager.sendAdTouch(e);
}
}
// In a typical PAL app, this is called when a content playback session starts.
public void sendPlaybackStart() {
logMessage("Playback start");
if (nonceManager != null) {
nonceManager.sendPlaybackStart();
}
}
// In a typical PAL app, this is called when a content playback session ends.
public void sendPlaybackEnd() {
logMessage("Playback end");
if (nonceManager != null) {
nonceManager.sendPlaybackEnd();
}
}
Вот когда следует вызывать каждую функцию в вашей реализации:
-
sendPlaybackStart()
: когда начинается сеанс воспроизведения видео -
sendPlaybackEnd()
: когда сеанс воспроизведения видео подходит к концу -
sendAdClick()
: каждый раз, когда зритель нажимает на рекламу -
sendTouch()
: при каждом тактильном взаимодействии с игроком
Для тестирования прикрепите методы обработчиков событий к событиям нажатия кнопки. В рабочей реализации настройте приложение так, чтобы события проигрывателя вызывали методы обработчиков событий.
(Необязательно) Отправляйте сигналы Google Ad Manager через сторонние рекламные серверы
При настройке стороннего сервера рекламы для работы с Google Ad Manager обратитесь к документации вашего сервера, чтобы узнать, как получать и пересылать значение nonce в каждом запросе рекламы. В приведённом примере URL запроса рекламы содержит параметр nonce. Параметр nonce распространяется из PAL SDK через ваши промежуточные серверы, а затем в Ad Manager, обеспечивая более эффективную монетизацию.
Настройте сторонний сервер рекламы так, чтобы он включал одноразовый код в запрос сервера к Менеджеру рекламы. Вот пример рекламного тега, настроенного на стороннем сервере рекламы:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Более подробную информацию см. в руководстве по внедрению Google Ad Manager на стороне сервера .
Менеджер рекламы ищет givn=
для определения значения nonce. Сторонний сервер рекламы должен поддерживать собственный макрос, например %%custom_key_for_google_nonce%%
, и заменять его параметром запроса nonce, который вы указали на предыдущем шаге. Подробнее о том, как это сделать, см. в документации стороннего сервера рекламы.