تبلیغات بینابینی

تبلیغات بینابینی، تبلیغات تمام صفحه ای هستند که تا زمانی که کاربر بسته شود، رابط کاربری یک برنامه را پوشش می دهد. آنها معمولاً در نقاط انتقال طبیعی در جریان یک برنامه نمایش داده می شوند، مانند بین فعالیت ها یا در طول مکث بین سطوح در یک بازی. هنگامی که یک برنامه یک تبلیغ بینابینی را نشان می دهد، کاربر این انتخاب را دارد که یا روی تبلیغ ضربه زده و به مقصد خود ادامه دهد یا آن را ببندد و به برنامه بازگردد. مطالعه موردی .

این راهنما به شما نشان می دهد که چگونه تبلیغات بینابینی را در یک برنامه iOS ادغام کنید.

پیش نیازها

همیشه با تبلیغات آزمایشی تست کنید

هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.

ساده‌ترین راه برای بارگیری آگهی‌های آزمایشی، استفاده از شناسه واحد آگهی آزمایشی اختصاصی ما برای فایل‌های بینابینی iOS است:
/21775744923/example/interstitial

این به‌طور ویژه پیکربندی شده است تا تبلیغات آزمایشی را برای هر درخواست بازگرداند، و شما می‌توانید هنگام کدنویسی، آزمایش و اشکال‌زدایی از آن در برنامه‌های خود استفاده کنید. فقط مطمئن شوید که قبل از انتشار برنامه خود، آن را با شناسه واحد تبلیغاتی خود جایگزین کنید.

برای کسب اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK Ads Mobile، به Test Ads مراجعه کنید.

پیاده سازی

مراحل اصلی برای یکپارچه سازی تبلیغات بینابینی عبارتند از:

  1. یک تبلیغ را بارگیری کنید.
  2. برای پاسخ به تماس ها ثبت نام کنید.
  3. نمایش آگهی

یک تبلیغ را بارگیری کنید

بارگذاری یک تبلیغ با استفاده از روش load(adUnitID:request) در کلاس GAMInterstitialAd انجام می شود.

سویفت

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
  private var interstitialAd: GADInterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

هدف-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

برای پاسخ به تماس ها ثبت نام کنید

برای دریافت اعلان‌ها برای رویدادهای ارائه، باید پروتکل GADFullScreenContentDelegate را پیاده‌سازی کنید و آن را به ویژگی fullScreenContentDelegate تبلیغ برگشتی اختصاص دهید. پروتکل GADFullScreenContentDelegate برای زمانی که تبلیغ با موفقیت یا ناموفق نمایش داده می شود و زمانی که رد می شود، پاسخ به تماس ها را کنترل می کند. کد زیر نحوه پیاده سازی پروتکل و اختصاص آن به تبلیغ را نشان می دهد:

سویفت

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
        interstitial?.fullScreenContentDelegate = self
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

ویژگی fullScreenContentDelegate را به تبلیغ برگشتی اختصاص دهید:

interstitialAd?.fullScreenContentDelegate = self

اجرای پروتکل:

func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: GADFullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

هدف-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

GAMInterstitialAd یک شی یک بار مصرف است. این بدان معنی است که وقتی یک تبلیغ بینابینی نشان داده شد، دیگر نمی توان آن را نشان داد. بهترین روش این است که یک تبلیغ بینابینی دیگر را در روش adDidDismissFullScreenContent: در GADFullScreenContentDelegate بارگیری کنید تا به محض رد شدن آگهی قبلی، آگهی بینابینی بعدی بارگیری شود.

نمایش آگهی

بینابینی ها باید در طول مکث های طبیعی در جریان برنامه نمایش داده شوند. بین سطوح یک بازی مثال خوبی است، یا پس از اتمام کار کاربر.

سویفت

guard let interstitial = interstitial else {
  return print("Ad wasn't ready.")
}

// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)

SwiftUI

برای تعیین زمان نمایش آگهی، به رویدادهای رابط کاربری در نما گوش دهید.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

تبلیغ بینابینی را از مدل view ارائه دهید:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(fromRootViewController: nil)
}

هدف-C

if (self.interstitial) {
  // The UIViewController parameter is nullable.
  [self.interstitial presentFromRootViewController:nil];
} else {
  NSLog(@"Ad wasn't ready");
}

بهترین شیوه ها

در نظر بگیرید که آیا تبلیغات بینابینی نوع مناسبی از تبلیغات برای برنامه شما هستند یا خیر.
تبلیغات بینابینی در برنامه هایی با نقاط انتقال طبیعی بهترین کارایی را دارند. نتیجه گیری یک کار در یک برنامه، مانند اشتراک گذاری یک تصویر یا تکمیل یک سطح بازی، چنین نقطه ای را ایجاد می کند. از آنجایی که کاربر انتظار یک وقفه در عمل را دارد، ارائه یک تبلیغ بینابینی بدون ایجاد اختلال در تجربه او آسان است. مطمئن شوید که در نظر داشته باشید که در چه نقاطی از گردش کار برنامه خود تبلیغات بینابینی را نمایش می دهید و احتمالاً کاربر چگونه پاسخ می دهد.
به یاد داشته باشید که هنگام نمایش یک تبلیغ بینابینی، اقدام را متوقف کنید.
انواع مختلفی از تبلیغات بینابینی وجود دارد: متن، تصویر، ویدیو و موارد دیگر. مهم است که مطمئن شوید وقتی برنامه شما یک تبلیغ بینابینی را نمایش می‌دهد، استفاده از برخی منابع را نیز به حالت تعلیق در می‌آورد تا تبلیغ بتواند از آنها استفاده کند. به عنوان مثال، هنگامی که برای نمایش یک تبلیغ بینابینی تماس می گیرید، مطمئن شوید که خروجی صوتی تولید شده توسط برنامه شما را متوقف کنید. می‌توانید پخش صداها را در مدیریت رویداد adDidDismissFullScreenContent: که پس از پایان تعامل کاربر با آگهی فراخوانی می‌شود، از سر بگیرید. علاوه بر این، در حین نمایش آگهی، به طور موقت هرگونه کار محاسباتی شدید (مانند حلقه بازی) را متوقف کنید. این تضمین می کند که کاربر گرافیک آهسته یا بی پاسخ یا ویدئویی با لکنت را تجربه نکند.
زمان بارگذاری کافی را در نظر بگیرید.
همانطور که اطمینان از نمایش تبلیغات بینابینی در زمان مناسب بسیار مهم است، اطمینان از اینکه کاربر مجبور نیست منتظر بارگذاری آنها بماند نیز مهم است. بارگیری آگهی از قبل قبل از اینکه قصد نمایش آن را داشته باشید، می تواند اطمینان حاصل کند که برنامه شما یک آگهی بینابینی کاملاً بارگذاری شده در زمان نمایش آن آماده است.
کاربر را با تبلیغات غرق نکنید.
در حالی که افزایش تعداد تبلیغات بینابینی در برنامه شما ممکن است راهی عالی برای افزایش درآمد به نظر برسد، همچنین می تواند تجربه کاربر را کاهش دهد و نرخ کلیک را کاهش دهد. اطمینان حاصل کنید که کاربران آنقدر مکرراً قطع نمی شوند که دیگر نتوانند از استفاده از برنامه شما لذت ببرند.
از پاسخ تماس تکمیل بار برای نشان دادن بینابینی استفاده نکنید.
این می تواند باعث تجربه کاربری ضعیف شود. در عوض، قبل از اینکه نیاز به نمایش آگهی داشته باشید، آن را از قبل بارگیری کنید. سپس متد canPresentFromRootViewController:error: را در GAMInterstitialAd بررسی کنید تا دریابید که آیا آماده نمایش است یا خیر.

نمونه هایی در GitHub

نمونه های کامل تبلیغات بینابینی را به زبان دلخواه خود مشاهده کنید:

مراحل بعدی