Первым шагом является добавление Android PAL SDK в ваше приложение.
Добавьте Android PAL SDK в качестве библиотеки.
Начиная с версии 18.0.0, PAL SDK размещается в репозитории Google Maven и может быть добавлен в ваше приложение следующим образом:
приложение/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:20.2.0'
...
}
Альтернативно, PAL SDK можно загрузить из репозитория Google Maven и вручную добавить в ваше приложение.
Создать одноразовый номер
«Nonce» — это одна зашифрованная строка, созданная PAL с использованием NonceLoader
. PAL SDK требует, чтобы каждый новый запрос потока сопровождался вновь созданным одноразовым номером. Однако одноразовые номера можно повторно использовать для нескольких запросов объявлений в одном потоке. Чтобы сгенерировать одноразовый номер с помощью PAL SDK, внесите изменения в MyActivity.java
. Чтобы увидеть пример приложения, использующего PAL для генерации nonce, загрузите пример Android с GitHub .
Сначала вам необходимо импортировать PAL SDK, создать несколько частных свойств для хранения NonceLoader
и NonceManager
, а затем инициализировать NoceLoader.
Мы рекомендуем создавать только один экземпляр класса NonceLoader
для каждого сеанса пользователя в вашем приложении, если только ваше приложение не имеет нескольких страниц или эквивалентных конструкций. Это сохраняет коррелятор страницы ( &correlator
) неизменным на протяжении всего времени существования страницы или сеанса пользователя в приложении. У вас по-прежнему есть контроль над коррелятором потока ( &scor
), который необходимо сбрасывать один раз для каждого нового потока.
Все запросы объявлений одного и того же потока должны использовать одно и то же значение NonceLoader
и коррелятора потока, чтобы функции ограничения частоты показов и конкурентного исключения работали правильно.
import android.app.Activity;
import android.os.Bundle;
import com.google.ads.interactivemedia.pal.NonceLoader;
import com.google.ads.interactivemedia.pal.NonceManager;
import com.google.ads.interactivemedia.pal.NonceRequest;
import com.google.ads.interactivemedia.pal.ConsentSettings;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends Activity {
...
private NonceLoader nonceLoader;
private NonceManager nonceManager = null;
private ConsentSettings consentSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 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 isConsentToStorage = getConsentToStorage();
videoView = findViewById(R.id.video_view);
videoView.setOnTouchListener(this::onVideoViewTouch);
consentSettings = ConsentSettings.builder()
.allowStorage(isConsentToStorage)
.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);
...
}
Затем создайте функцию для запуска генерации nonce. Вам понадобится только один одноразовый номер для всех запросов рекламы в одном потоке воспроизведения. В целях тестирования вы можете вызвать эту функцию при нажатии кнопки в тестовом приложении. Установленные здесь параметры NonceRequest
являются примерами параметров. Вам следует установить параметры на основе характеристик вашего приложения.
Эта функция запускает генерацию nonce асинхронно, поэтому вам необходимо реализовать AsyncTask
для обработки успеха или неудачи запроса nonce:
public void generateNonceForAdRequest() {
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();
NonceCallbackImpl callback = new NonceCallbackImpl();
nonceLoader
.loadNonceManager(nonceRequest)
.addOnSuccessListener(callback)
.addOnFailureListener(callback);
}
private class NonceCallbackImpl implements OnSuccessListener<NonceManager>, OnFailureListener {
@Override
public void onSuccess(NonceManager manager) {
nonceManager = manager;
String nonceString = manager.getNonce();
Log.i("PALSample", "Generated nonce: " + nonceString);
// from here you would trigger your ad request and move on to initialize content
}
@Override
public void onFailure(Exception error) {
Log.e("PALSample", "Nonce generation failed: " + error.getMessage());
}
}
После создания менеджера nonce его можно получить в любое время с помощью nonceManager.getNonce()
.
Прикрепите nonce к запросу объявления
Чтобы использовать сгенерированный номер nonce, добавьте в тег объявления параметр givn
и значение nonce, прежде чем отправлять запросы объявлений.
/**
* The ad tag for your ad request, for example:
* https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external\
* /single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1\
* &cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=
*
* For more sample ad tags, see
* developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
*/
private static final String DEFAULT_AD_TAG = "Your ad tag";
...
@Override
public void onSuccess(NonceManager manager) {
nonceManager = manager;
String nonceString = manager.getNonce();
Log.i("PALSample", "Generated nonce: " + nonceString);
// Append the nonce to the ad tag URL.
makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
}
Отслеживание событий воспроизведения
Наконец, вам необходимо реализовать различные обработчики событий для вашего плеера. В целях тестирования вы можете прикрепить их к событиям нажатия кнопок, но в реальной реализации они будут запускаться соответствующими событиями игрока:
public void sendAdClick() {
if (nonceManager != null) {
nonceManager.sendAdClick();
}
}
public void sendPlaybackStart() {
if (nonceManager != null) {
nonceManager.sendPlaybackStart();
}
}
public void sendPlaybackEnd() {
if (nonceManager != null) {
nonceManager.sendPlaybackEnd();
}
}
public void onVideoViewTouch(MotionEvent e) {
if (nonceManager != null) {
nonceManager.sendTouch(e);
}
}
Вот когда следует вызывать каждую функцию в вашей реализации:
-
sendPlaybackStart()
: когда начинается сеанс воспроизведения видео. -
sendPlaybackEnd()
: когда сеанс воспроизведения видео подходит к концу. -
sendAdClick()
: каждый раз, когда зритель нажимает на рекламу. -
sendTouch()
: при каждом касании взаимодействия с игроком.
(Необязательно) Отправляйте сигналы Google Ad Manager через сторонние рекламные серверы.
Когда вы настраиваете сторонний рекламный сервер для работы с Google Ad Manager, обратитесь к документации вашего сервера, чтобы фиксировать и пересылать значение nonce в каждом запросе объявления. В приведенном примере представлен URL-адрес запроса объявления с включенным параметром nonce. Параметр nonce передается из PAL SDK через ваши промежуточные серверы, а затем в Менеджер рекламы, что обеспечивает лучшую монетизацию.
Настройте свой сторонний рекламный сервер так, чтобы он включал nonce в запрос сервера к Менеджеру рекламы. Вот пример рекламного тега, настроенного на стороннем рекламном сервере:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Дополнительную информацию см. в руководстве по внедрению на стороне сервера Google Ad Manager .
Менеджер рекламы ищет givn=
чтобы определить значение nonce. Сторонний сервер объявлений должен поддерживать какой-либо собственный макрос, например %%custom_key_for_google_nonce%%
, и заменять его параметром запроса nonce, который вы указали на предыдущем шаге. Дополнительную информацию о том, как это сделать, можно найти в документации стороннего рекламного сервера.