Предварительная загрузка объявлений – это функция Google в Google Mobile Ads SDK, которая управляет загрузкой и кешированием объявлений от вашего имени. Чтобы использовать предварительную загрузку объявлений, вам нужно изменить способ управления загрузкой объявлений. Чтобы оптимизировать эффективность с помощью предварительной загрузки объявлений, отключите собственное кеширование и делегируйте эту задачу Google Mobile Ads SDK.
Предварительная загрузка объявлений имеет следующие преимущества по сравнению с загрузкой вручную:
- Управление ссылками. Загруженные объявления хранятся в памяти, поэтому вам не нужно поддерживать ссылки до тех пор, пока вы не будете готовы к показу.
- Автоматическая перезагрузка. Новое объявление загружается автоматически, когда вы извлекаете объявление из кеша.
- Управляемые повторные попытки. Автоматически повторяет неудачные запросы, используя экспоненциальную выдержку.
- Обработка истечения срока действия. Автоматически обновляет объявления до истечения срока их действия (обычно через час).
- Оптимизация кеша. Если размер кеша больше единицы, Google Mobile Ads SDK оптимизирует порядок кеширования, чтобы показывать наиболее подходящие объявления.
В этом руководстве рассказывается, как настроить предзагрузку объявлений, проверить их доступность и показать их.
Требования
Прежде чем продолжить, настройте Google Mobile Ads SDK.
Начать предзагрузку объявлений
При запуске приложения вызовите метод preload один раз. После вызова метода preload Google Mobile Ads SDK автоматически выполняет предварительную загрузку объявлений и повторно отправляет запросы, которые не удалось выполнить для предварительно загруженных конфигураций.
В примере ниже запускается предварительная загрузка объявлений:
Swift
// Start the preloading initialization process.
let request = Request()
let interstitialConfig = PreloadConfigurationV2(
adUnitID: adUnitID, request: request)
InterstitialAdPreloader.shared.preload(
for: adUnitID, configuration: interstitialConfig, delegate: self)
Objective-C
// Start the preloading initialization process.
GADRequest *request = [GADRequest request];
GADPreloadConfigurationV2 *interstitialConfig =
[[GADPreloadConfigurationV2 alloc] initWithAdUnitID:adUnitID
request:request];
[GADInterstitialAdPreloader.sharedInstance preloadForPreloadID:adUnitID
configuration:interstitialConfig
delegate:self];
Получите и покажите предварительно загруженное объявление
При использовании предварительной загрузки объявлений Google Mobile Ads SDK хранит кешированные объявления.
Чтобы показать объявление, вызовите метод adWithPreloadID.
Google Mobile Ads SDK получает доступное объявление и автоматически загружает следующее в фоновом режиме.
Не вызывайте метод adWithPreloadID, пока не будете готовы показать объявление. Если объявления хранятся в кеше, Google Mobile Ads SDK может автоматически обновлять просроченные объявления и оптимизировать кеш.
В следующем примере показано, как получить и показать предварительно загруженное объявление:
Swift
private func showInterstitialAd(adUnitID: String) {
// Verify that the preloaded ad is available before polling.
guard isInterstitialAvailable(adUnitID: adUnitID) else {
print("Preloaded interstitial ad is not available.")
return
}
// Polling returns the next available ad and loads another ad in the background.
let ad = InterstitialAdPreloader.shared.ad(with: adUnitID)
// Interact with the ad object as needed.
print("Interstitial ad response info: \(String(describing: ad?.responseInfo))")
ad?.paidEventHandler = { (value: AdValue) in
print("Interstitial ad paid event: \(value.value), \(value.currencyCode)")
}
ad?.fullScreenContentDelegate = self
ad?.present(from: self)
}
Objective-C
- (void)showInterstitialAdWithAdUnitID:(nonnull NSString *)adUnitID {
// Verify that the preloaded ad is available before polling.
if (![self isInterstitialAvailableWithAdUnitID:adUnitID]) {
NSLog(@"Preloaded interstitial ad is not available.");
return;
}
// Getting the preloaded ad loads another ad in the background.
GADInterstitialAd *ad =
[GADInterstitialAdPreloader.sharedInstance adWithPreloadID:adUnitID];
// Interact with the ad object as needed.
NSLog(@"Interstitial ad response info: %@", ad.responseInfo);
ad.paidEventHandler = ^(GADAdValue *_Nonnull value) {
NSLog(@"Interstitial ad paid event: %@ %@ ", value.value, value.currencyCode);
};
ad.fullScreenContentDelegate = self;
[ad presentFromRootViewController:self];
}
Получение метаданных предзагруженного объявления
Чтобы получить метаданные предварительно загруженного объявления, найдите объект с информацией об ответе на запрос объявления. Это позволяет проверить метаданные объявления, не удаляя его из кеша.
В примере ниже показано, как получить метаданные предварительно загруженного объявления из объекта с информацией об ответе.
Swift
private func getInterstitialAdResponseInfo(preloadID: String) {
// Get the response info for the preloaded ad.
if let responseInfo = InterstitialAdPreloader.shared.responseInfo(
with: preloadID)
{
print("Ad response ID: \(responseInfo.responseIdentifier ?? "")")
}
}
Objective-C
- (void)getInterstitialAdResponseInfoWithPreloadID:(nonnull NSString *)preloadID {
// Get the response info for the preloaded ad.
GADResponseInfo *responseInfo =
[GADInterstitialAdPreloader.sharedInstance
adResponseInfoWithPreloadID:preloadID];
if (responseInfo) {
NSLog(@"Ad response ID: %@", responseInfo.responseIdentifier);
}
}
Как проверить доступность предзагрузки объявлений
Чтобы проверить доступность объявлений, выполните одно из следующих действий:
- Как узнать, доступна ли предварительная загрузка объявлений
- Прослушивание доступности предварительно загруженных объявлений
Как проверить доступность предзагруженного объявления
В следующем примере проверяется доступность объявления:
Swift
private func isInterstitialAvailable(adUnitID: String) -> Bool {
// Verify that an ad is available before polling.
return InterstitialAdPreloader.shared.isAdAvailable(with: adUnitID)
}
Objective-C
- (BOOL)isInterstitialAvailableWithAdUnitID:(nonnull NSString *)adUnitID {
// Verify that an ad is available before polling.
return [GADInterstitialAdPreloader.sharedInstance isAdAvailableWithPreloadID:adUnitID];
}
Прослушать информацию о доступности предзагруженных объявлений
Зарегистрируйтесь для получения событий предзагрузки, чтобы получать уведомления об успешной или неудавшейся предзагрузке объявлений или об исчерпании кеша объявлений.
События предзагрузки предназначены для аналитики. Внутри обратных вызовов событий предзагрузки:
- Не вызывать
preload. - Не вызывайте метод
adWithPreloadID, если объявление не будет показано сразу.
В примере ниже показано, как зарегистрировать события объявлений.
Swift
func adAvailable(forPreloadID preloadID: String, responseInfo: ResponseInfo) {
// This callback indicates that an ad is available for the specified configuration.
// No action is required here, but updating the UI can be useful in some cases.
print("Ad preloaded successfully for ad preload ID: \(preloadID)")
}
func adsExhausted(forPreloadID preloadID: String) {
// This callback indicates that all the ads for the specified configuration have been
// consumed and no ads are available to show. No action is required here, but updating
// the UI can be useful in some cases.
// Don't call InterstitialAdPreloader.shared.preload or
// InterstitialAdPreloader.shared.ad from adsExhausted.
print("Ad exhausted for ad preload ID: \(preloadID)")
}
func adFailedToPreload(forPreloadID preloadID: String, error: Error) {
print(
"Ad failed to load with ad preload ID: \(preloadID), Error: \(error.localizedDescription)"
)
}
Objective-C
- (void)adAvailableForPreloadID:(nonnull NSString *)preloadID
responseInfo:(nonnull GADResponseInfo *)responseInfo {
// This callback indicates that an ad is available for the specified configuration.
// No action is required here, but updating the UI can be useful in some cases.
NSLog(@"Ad preloaded successfully for ad unit ID: %@", preloadID);
}
- (void)adsExhaustedForPreloadID:(nonnull NSString *)preloadID {
// This callback indicates that all the ads for the specified configuration have been
// consumed and no ads are available to show. No action is required here, but updating
// the UI can be useful in some cases.
// Don't call [GAD<Format>AdPreloader preloadForPreloadID:] or
// [GAD<Format>AdPreloader adWithPreloadID:] from adsExhaustedForPreloadID.
NSLog(@"Ad exhausted for ad preload ID: %@", preloadID);
}
- (void)adFailedToPreloadForPreloadID:(nonnull NSString *)preloadID
error:(nonnull NSError *)error {
NSLog(@"Ad failed to load with ad preload ID: %@, Error: %@", preloadID,
error.localizedDescription);
}
Как отключить предварительную загрузку объявлений
Если вам больше не нужно показывать объявления для идентификатора предварительной загрузки в рамках сеанса, вы можете остановить предварительную загрузку объявлений. Чтобы прекратить предварительную загрузку объявлений для определенного идентификатора предзагрузки, вызовите stopPreloadingAndRemoveAdsForPreloadID с этим идентификатором предзагрузки. Чтобы остановить предзагрузку для всех предзагрузчиков, вызовите stopPreloadingAndRemoveAllAds.
Как задать размер буфера
Размер буфера определяет количество предварительно загруженных объявлений, хранящихся в памяти. По умолчанию Google оптимизирует размер буфера, чтобы сбалансировать потребление памяти и задержку показа объявлений. Если в вашем приложении объявления показываются до загрузки следующего объявления, вы можете задать собственный размер буфера, чтобы увеличить количество объявлений, хранящихся в памяти.
Swift
let preloadConfig = PreloadConfigurationV2(adUnitID: adUnitID)
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
preloadConfig.bufferSize = 2
Objective-C
GADPreloadConfigurationV2 *preloadConfig =
[[GADPreloadConfigurationV2 alloc] initWithAdUnitID:adUnitID];
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
preloadConfig.bufferSize = 2;
Ограничения на предварительное кеширование
Google Mobile Ads SDK ограничивает общее количество предварительно загруженных объявлений во всех рекламных блоках и идентификаторах предварительной загрузки:
- Ограничение по умолчанию: Google Mobile Ads SDK хранит в памяти не более шести предварительно загруженных объявлений. Это ограничение распространяется на все форматы и идентификаторы предварительной загрузки.
- Рекомендуем использовать размер буфера, равный двум, для каждого идентификатора предварительной загрузки.