Как перенести нативные объявления

На этой странице сравниваются реализации нативных объявлений в Google Mobile Ads SDK (Legacy) и GMA Next-Gen SDK.

Загрузка объявления

В таблице ниже сравниваются основные реализации при загрузке нативного объявления.

Цель реализации Google Mobile Ads SDK (Legacy) GMA Next-Gen SDK
Как указать типы нативных объявлений С помощью уникальных методов в AdLoader. В запросе объявления.
Обработка обратного вызова при успешной загрузке объявления Для каждого типа нативного объявления предусмотрен отдельный обратный вызов. Один интерфейс NativeAdLoaderCallback обрабатывает успешную загрузку объявлений всех нативных типов.
Обработка обратного вызова при ошибке загрузки объявления В отдельном прослушивателе. В этом месте: NativeAdLoaderCallback.

Загрузка нативного объявления

Ниже приведены примеры загрузки нативного объявления.

Google Mobile Ads SDK (Legacy)

Kotlin

val adLoader =
  AdLoader.Builder(this, AD_UNIT_ID)
    .forNativeAd(object : NativeAd.OnNativeAdLoadedListener {
      override fun onNativeAdLoaded(nativeAd: NativeAd) {
        // Native ad loaded.
      }
    })
    .withAdListener(
      object : AdListener() {
        override fun onAdFailedToLoad(loadAdError: LoadAdError) {
          // Native ad failed to load.
        }
      }
    )
    .build()

adLoader.loadAd(AdRequest.Builder().build())

Java

AdLoader adLoader = new AdLoader.Builder(this, AD_UNIT_ID)
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
      @Override
      public void onNativeAdLoaded(NativeAd nativeAd) {
        // Native ad loaded.
      }
    })
    .withAdListener(new AdListener() {
      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        // Native ad failed to load.
      }
    })
    .build();

adLoader.loadAd(new AdRequest.Builder().build());
GMA Next-Gen SDK

Kotlin

NativeAdLoader.load(
  NativeAdRequest.Builder(AD_UNIT_ID, listOf(NativeAd.NativeAdType.NATIVE)).build(),
  object : NativeAdLoaderCallback {
    override fun onNativeAdLoaded(nativeAd: NativeAd) {
      // Native ad loaded.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Native ad failed to load.
    }
  }
)

Java

NativeAdLoader.load(
  new NativeAdRequest.Builder(AD_UNIT_ID, List.of(NativeAd.NativeAdType.NATIVE)).build(),
  new NativeAdLoaderCallback() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
      // Native ad loaded.
    }

    @Override
    public void onAdFailedToLoad(LoadAdError adError) {
      // Native ad failed to load.
    }
  }
);

Как загрузить специальное нативное объявление

Ниже приведены примеры загрузки специального нативного объявления.

Google Mobile Ads SDK (Legacy)

Kotlin

val adLoader =
  AdLoader.Builder(this, AD_UNIT_ID)
    .forCustomFormatAd(CUSTOM_FORMAT_ID,
      object: NativeCustomFormatAd.OnCustomFormatAdLoadedListener {
        override fun onCustomFormatAdLoaded(nativeCustomFormatAd: NativeCustomFormatAd) {
          // Custom native ad loaded.
        }
      },
      object: NativeCustomFormatAd.OnCustomClickListener {
        override fun onCustomClick(
          nativeCustomFormatAd: NativeCustomFormatAd,
          assetName: String
        ) {
          // Custom native ad recorded a click.
        }
      })
    .withAdListener(
      object : AdListener() {
        override fun onAdFailedToLoad(loadAdError: LoadAdError) {
          // Custom native ad failed to load.
        }
      }
    )
    .build()

adLoader.loadAd(AdRequest.Builder().build())

Java

AdLoader adLoader = new AdLoader.Builder(this, AD_UNIT_ID)
    .forCustomFormatAd(CUSTOM_FORMAT_ID,
        new NativeCustomFormatAd.OnCustomFormatAdLoadedListener() {
          @Override
          public void onCustomFormatAdLoaded(NativeCustomFormatAd nativeCustomFormatAd) {
            // Custom native ad loaded.
          }
        },
        new NativeCustomFormatAd.OnCustomClickListener() {
          @Override
          public void onCustomClick(NativeCustomFormatAd nativeCustomFormatAd, String assetName) {
            // Custom native ad recorded a click.
          }
        })
    .withAdListener(new AdListener() {
      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        // Custom native ad failed to load.
      }
    })
    .build();

adLoader.loadAd(new AdRequest.Builder().build());
GMA Next-Gen SDK

Kotlin

NativeAdLoader.load(
  NativeAdRequest
    .Builder(AD_UNIT_ID, listOf(NativeAd.NativeAdType.CUSTOM_NATIVE))
    .setCustomFormatIds(listOf(CUSTOM_FORMAT_ID))
    .build(),
  object : NativeAdLoaderCallback {
    override fun onCustomNativeAdLoaded(customNativeAd: CustomNativeAd) {
      // Custom native ad loaded.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Custom native ad failed to load.
    }
  }
)

Java

NativeAdLoader.load(
    new NativeAdRequest.Builder(AD_UNIT_ID, List.of(NativeAdType.CUSTOM_NATIVE))
        .setCustomFormatIds(List.of(CUSTOM_FORMAT_ID))
        .build(),
    new NativeAdLoaderCallback() {
      @Override
      public void onCustomNativeAdLoaded(CustomNativeAd customNativeAd) {
        // Custom native ad loaded.
      }

      @Override
      public void onAdFailedToLoad(LoadAdError adError) {
        // Custom native ad failed to load.
      }
    }
);

Как задать настройки нативных объявлений

В следующих примерах задаются настройки нативных объявлений:

Google Mobile Ads SDK (Legacy)

В Google Mobile Ads SDK (Legacy) задайте настройки нативных объявлений в AdLoader.Builder.

Kotlin

val videoOptions = VideoOptions.Builder().setStartMuted(true).build()

val adLoader =
  AdLoader.Builder(this, AD_UNIT_ID)
    .withNativeAdOptions(NativeAdOptions.Builder().setVideoOptions(videoOptions).build())
    .build()

Java

VideoOptions videoOptions = new VideoOptions.Builder()
    .setStartMuted(true)
    .build();

AdLoader adLoader = new AdLoader.Builder(this, AD_UNIT_ID)
    .withNativeAdOptions(new NativeAdOptions.Builder()
        .setVideoOptions(videoOptions)
        .build())
    .build();
GMA Next-Gen SDK

В GMA Next-Gen SDK задайте настройки нативных объявлений в NativeAdRequest.Builder.

Kotlin

val videoOptions = VideoOptions.Builder().setStartMuted(true).build()

val nativeAdRequest = NativeAdRequest
  .Builder(AD_UNIT_ID, listOf(NativeAd.NativeAdType.NATIVE))
  .setVideoOptions(videoOptions)
  .build()

Java

VideoOptions videoOptions = new VideoOptions.Builder().setStartMuted(true).build();

NativeAdRequest nativeAdRequest = new NativeAdRequest
    .Builder(AD_UNIT_ID, List.of(NativeAd.NativeAdType.NATIVE))
    .setVideoOptions(videoOptions)
    .build();

Как настроить обратные вызовы для событий нативных объявлений

В примерах ниже показано, как настроить обратные вызовы для событий нативных объявлений.

Google Mobile Ads SDK (Legacy)

Обратные вызовы событий нативных объявлений должны быть зарегистрированы до загрузки объявления.

Kotlin

val adLoader =
  AdLoader.Builder(this, AD_UNIT_ID)
    .forNativeAd(object : NativeAd.OnNativeAdLoadedListener {
      override fun onNativeAdLoaded(nativeAd: NativeAd) {
        // Native ad loaded.
      }
    })
    .withAdListener(
      object : AdListener() {
        override fun onAdOpened() {
          // Native ad opened an overlay that covered the screen.
        }

        override fun onAdClosed() {
          // Native ad closed.
        }

        override fun onAdImpression() {
          // Native ad recorded an impression.
        }

        override fun onAdClicked() {
          // Native ad recorded a click.
        }
      }
    )
    .build()

adLoader.loadAd(AdRequest.Builder().build())

Java

AdLoader adLoader = new AdLoader.Builder(this, AD_UNIT_ID)
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
      @Override
      public void onNativeAdLoaded(NativeAd nativeAd) {
        // Native ad loaded.
      }
    })
    .withAdListener(new AdListener() {
      @Override
      public void onAdOpened() {
        // Native ad opened an overlay that covered the screen.
      }

      @Override
      public void onAdClosed() {
        // Native ad closed.
      }

      @Override
      public void onAdImpression() {
        // Native ad recorded an impression.
      }

      @Override
      public void onAdClicked() {
        // Native ad recorded a click.
      }
    })
    .build();

adLoader.loadAd(new AdRequest.Builder().build());
GMA Next-Gen SDK

GMA Next-Gen SDK поддерживает регистрацию обратных вызовов событий объявлений после загрузки нативного объявления.

Kotlin

NativeAdLoader.load(
  NativeAdRequest
    .Builder(AD_UNIT_ID, listOf(NativeAd.NativeAdType.NATIVE))
    .build(),
  object : NativeAdLoaderCallback {
    override fun onNativeAdLoaded(nativeAd: NativeAd) {
      // Native ad loaded.
      nativeAd.adEventCallback =
        object : NativeAdEventCallback {
          override fun onAdShowedFullScreenContent() {
            // Native ad showed full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: onAdOpened()
          }

          override fun onAdDismissedFullScreenContent() {
            // Native ad dismissed full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: onAdClosed()
          }

          override fun onAdFailedToShowFullScreenContent(
            fullScreenContentError: FullScreenContentError
          ) {
            // Native ad failed to show full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: N/A
          }

          override fun onAdImpression() {
            // Native ad recorded an impression.
          }

          override fun onAdClicked() {
            // Native ad recorded a click.
          }
        }
    }
  }
)

Java

NativeAdLoader.load(
    new NativeAdRequest.Builder(AD_UNIT_ID, List.of(NativeAd.NativeAdType.NATIVE))
        .build(),
    new NativeAdLoaderCallback() {
      @Override
      public void onNativeAdLoaded(NativeAd nativeAd) {
        // Native ad loaded.
        nativeAd.setAdEventCallback(new NativeAdEventCallback() {
          @Override
          public void onAdShowedFullScreenContent() {
            // Native ad showed full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: onAdOpened()
          }

          @Override
          public void onAdDismissedFullScreenContent() {
            // Native ad dismissed full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: onAdClosed()
          }

          @Override
          public void onAdFailedToShowFullScreenContent(FullScreenContentError fullScreenContentError) {
            // Native ad failed to show full screen content.
            // Google Mobile Ads SDK (Legacy) equivalent: N/A
          }

          @Override
          public void onAdImpression() {
            // Native ad recorded an impression.
          }

          @Override
          public void onAdClicked() {
            // Native ad recorded a click.
          }
        });
      }
    }
);

Показать объявление

В этом разделе рассматриваются различия в показе нативных объявлений:

Используйте название пакета GMA Next-Gen SDK

При создании NativeAdView в XML обновите название пакета:

Google Mobile Ads SDK (Legacy)

<com.google.android.gms.ads.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <!-- Layout assets such as the media view and call to action. -->
</com.google.android.gms.ads.nativead.NativeAdView>
GMA Next-Gen SDK

<com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <!-- Layout assets such as the media view and call to action. -->
</com.google.android.libraries.ads.mobile.sdk.nativead.NativeAdView>

Зарегистрируйте объект медиаконтента с помощью NativeAdView.

В примерах ниже показано, как зарегистрировать объект медиаконтента с помощью NativeAdView.

Google Mobile Ads SDK (Legacy)

Google Mobile Ads SDK (Legacy) ожидает, что представление медиаконтента будет зарегистрировано в представлении нативного объявления до регистрации нативного объявления. Однако API не обеспечивает соблюдение этого правила.

Kotlin

private fun displayNativeAd(nativeAd: NativeAd) {
  // Inflate the NativeAdView layout.
  val nativeAdBinding = NativeAdBinding.inflate(layoutInflater)

  // Add the NativeAdView to the view hierarchy.
  binding.nativeViewContainer.addView(nativeAdBinding.root)
  val nativeAdView = nativeAdBinding.root

  // Populate and register the asset views.
  nativeAdView.mediaView = nativeAdBinding.adMedia
  // ...

  // Register the native ad with the NativeAdView.
  nativeAdView.setNativeAd(nativeAd)
}

Java

private void displayNativeAd(NativeAd nativeAd) {
  // Inflate the NativeAdView layout
  NativeAdBinding nativeAdBinding = NativeAdBinding.inflate(getLayoutInflater());

  // Add the NativeAdView to the view hierarchy
  binding.nativeViewContainer.addView(nativeAdBinding.getRoot());
  NativeAdView nativeAdView = nativeAdBinding.getRoot();

  // Populate and register the asset views
  nativeAdView.setMediaView(nativeAdBinding.adMedia);
  // ...

  // Register the native ad with the NativeAdView
  nativeAdView.setNativeAd(nativeAd);
}
GMA Next-Gen SDK

GMA Next-Gen SDK обеспечивает одновременную регистрацию просмотра медиаконтента и нативного объявления.

Kotlin

private fun displayNativeAd(nativeAd: NativeAd) {
  // Inflate the NativeAdView layout.
  val nativeAdBinding = NativeAdBinding.inflate(layoutInflater)

  // Add the NativeAdView to the view hierarchy.
  binding.nativeViewContainer.addView(nativeAdBinding.root)
  val nativeAdView = nativeAdBinding.root

  // Populate and register the asset views.
  // ...

  // Register the native ad and media content asset with the NativeAdView.
  val mediaView = nativeAdBinding.adMedia
  nativeAdView.registerNativeAd(nativeAd, mediaView)
}

Java

private void displayNativeAd(NativeAd nativeAd) {
  // Inflate the NativeAdView layout.
  NativeAdBinding nativeAdBinding = NativeAdBinding.inflate(getLayoutInflater());

  // Add the NativeAdView to the view hierarchy.
  binding.nativeViewContainer.addView(nativeAdBinding.getRoot());
  NativeAdView nativeAdView = nativeAdBinding.getRoot();

  // Populate and register the asset views.
  // ...

  // Register the native ad and media content asset with the NativeAdView.
  MediaView mediaView = nativeAdBinding.adMedia;
  nativeAdView.registerNativeAd(nativeAd, mediaView);
}