Первым шагом является добавление 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. Вам понадобится только один одноразовый номер для всех запросов рекламы в одном потоке воспроизведения. В целях тестирования вы можете вызвать эту функцию при нажатии кнопки в тестовом приложении.
Эта функция запускает генерацию 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(true)
.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, который вы указали на предыдущем шаге. Дополнительную информацию о том, как это сделать, можно найти в документации стороннего рекламного сервера.