Начать

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, а также создайте функцию для генерации нонса:

  1. Импортируйте и настройте PAL, выполнив следующие действия:

    1. Импорт классов 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;
      
      
    2. Создайте приватные переменные для хранения экземпляров NonceLoader и NonceManager :

      private NonceLoader nonceLoader;
      private NonceManager nonceManager;
      
    3. Инициализируйте экземпляр 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 и значение коррелятора потока.

  2. Сгенерировать одноразовый номер:

    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, который вы указали на предыдущем шаге. Подробнее о том, как это сделать, см. в документации стороннего сервера рекламы.