پیش‌بارگذاری وقفه‌های آگهی برای جاری‌سازی‌ها

انتخاب پلاتفرم: HTML5 Android iOS tvOS

از «کیت توسعه نرم‌افزار IMA» می‌توان برای درآمدزایی از جاری‌سازی‌های زنده و همچنین ویدیو درخواستی استفاده کرد. برای جاری‌سازی‌های زنده، باید برای هر وقفه آگهی درخواست آگهی جدیدی ایجاد کنید. این درخواست‌ها را به‌صورت متناوب ارسال کنید تا مطمئن شوید که همه بینندگان شما به‌طور هم‌زمان درخواست آگهی نمی‌کنند و سرور(های) آگهی را تحت فشار قرار نمی‌دهند.

برای کمک به این امر، «کیت توسعه نرم‌افزار IMA» دارای دارایی AdsRequest.liveStreamPrefetchSeconds است. این دارایی حداکثر تعداد ثانیه‌هایی را که «کیت توسعه نرم‌افزار» باید قبل‌از تماس با سرور آگهی پس‌از فراخوانی AdsLoader.requestAds() منتظر بماند مشخص می‌کند. زمان درخواست واقعی تصادفی خواهد بود. برای مثال، اگر AdsRequest.liveStreamPrefetchSeconds را روی ۳۰ تنظیم کنید، «کیت توسعه نرم‌افزار» پس‌از اینکه AdsLoader.requestAds() را فراخوانی کردید، بین ۰ تا ۳۰ ثانیه صبر می‌کند تا درخواست را به سرور ارسال کند.

پیش‌دریافت جاری‌سازی زنده در عمل

توصیه می‌کنیم به‌محض تکمیل یک وقفه آگهی، وقفه آگهی بعدی را پیش‌دریافت کنید. این کار تضمین می‌کند که حداکثر زمان برای پنجره پیش‌واکشی شما دردسترس باشد. فرض کنید ۵ دقیقه بین وقفه‌های آگهی فاصله دارید. وقتی وقفه آگهی تکمیل می‌شود، می‌توانید وقفه آگهی بعدی را با پنجره پیش‌دریافت ۲۹۰ ثانیه‌ای درخواست کنید (۵ دقیقه منهای ۱۰ ثانیه، برای اطمینان از اینکه درخواست‌های ارسال‌شده در انتهای پنجره پیش‌دریافت زمان کافی برای حل‌وفصل شدن دارند):

آبجکتیو-سی


- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {

  ...

  switch (event.type) {

    ...

    case kIMAAdEvent_ALL_ADS_COMPLETED:

      IMAAdsRequest *request = [[IMAAdsRequest alloc]
             initWithAdTagUrl: self.adTagUrl
           adDisplayContainer: self.adDisplayContainer
         avPlayerVideoDisplay: self.avPlayerVideoDisplay
        pictureInPictureProxy: self.pictureInPictureProxy
                  userContext: nil];

      // set a delay between the end of the last ad
      // in the last request, and the first ad from
      // the new request
      Float64 adGap = 30;
      // make sure the request occurs at least five
      // seconds before starting the new set of ads
      request.liveStreamPrefetchSeconds = adGap - 5;
      [self.adsLoader requestAdsWithRequest:request];
      // start new ads after adGap seconds have elapsed
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, adGap * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [adsManager start];
      });

      break;

    ...

  }

  ...

}

Swift

func adsManager(_ adsManager: IMAAdsManager!, didReceive event: IMAAdEvent!) {
  switch event.type {

    ...

    case IMAAdEventType.ALL_ADS_COMPLETED:

      let request = IMAAdsRequest(
        adTagUrl: AdTagUrl,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: nil)

      // set a delay between the end of the last ad
      // in the last request, and the first ad from
      // the new request
      let adGap = 30
      // make sure the request occurs at least five
      // seconds before starting the new set of ads
      request.liveStreamPrefetchSeconds = adGap - 5
      adsLoader.requestAds(with: request)
      // start new ads after adGap seconds have elapsed
      DispatchQueue.main.asyncAfter(deadline: .now() + adGap) {
        adsManager.start()
      }

      break

    ...
  }
}