iPad에서 멀티 윈도우 기능 지원하기

iOS 13부터 iPad 앱에서 멀티 윈도우 기능이 지원되면서 앱 UI의 여러 창과 동시에 상호작용할 수 있게 되었습니다. 각 창을 서로 다른 크기로 만들고 창 크기를 언제든지 조절할 수 있으며, 이에 따라 광고가 로드 및 표시되는 방식도 영향을 받게 됩니다.

본 가이드에는 멀티 윈도우 기능을 지원하는 iPad 환경에서 광고를 가장 효과적으로 렌더링하는 방법이 나와 있습니다.

기본 요건

광고 요청에서 장면 설정하기

창에 딱 맞는 광고를 수신하려면 광고 요청에 뷰의 windowScene을 전달해야 합니다. Google 모바일 광고 SDK가 장면에 적합한 크기의 광고를 반환합니다.

- (void)loadInterstitial {
  GADRequest *request = [GADRequest request];
  request.scene = self.view.window.windowScene;

  [self.interstitial loadRequest:request];
}
<Google> Invalid Request. The GADRequest scene property should be set for
applications that support multi-scene. Treating the unset property as an error
while in test mode.

viewDidAppear에서 광고 요청 구성하기

멀티 윈도우 기능이 도입되면서 창 장면에서 광고 요청을 보내야 한다는 요건이 생겼습니다. viewDidLoad:의 창에 뷰가 아직 추가되지 않았으므로 viewDidAppear:에서 광고 요청을 구성해야 합니다. 광고 요청을 구성할 때쯤에 창 장면이 설정됩니다.

앱의 수명 주기 동안 viewDidAppear:를 두 번 이상 호출할 수 있습니다. 광고 요청의 완료 여부를 나타내는 플래그 안에 광고 요청 초기화 코드를 넣는 것이 좋습니다.

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  if (!_requestInitialized) {
    [self loadInterstitial];
    _requestInitialized = YES;
  }
}

크기 조절 처리하기

언제든지 장면을 드래그할 수 있으며, 이때 광고 요청이 완료되었으면 창 크기가 변할 수 있습니다. 창 크기가 조절될 때 새 광고를 요청할지 여부는 게시자가 정합니다. 아래의 샘플 코드에서는 루트 뷰 컨트롤러의 창이 회전하거나 크기가 변경될 때 viewWillTransitionToSize:withTransitionCoordinator:를 통해 알림이 표시되지만, windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:을 리스닝하여 창 장면별 변경을 확인할 수도 있습니다.

전면 광고 및 보상형 광고

Google 모바일 광고 SDK에서는 canPresentFromViewController:error: 메서드를 통해 전면 광고 또는 보상형 광고가 유효한지를 확인하므로 창 크기가 변할 때마다 전체 화면 광고를 새로고침해야 하는지를 알 수 있습니다.

- (void)viewWillTransitionToSize:(CGSize)size  withTransitionCoordinator:(id)coordinator {
  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

  [coordinator animateAlongsideTransition:nil
                               completion:^(id _Nonnull context) {
    if (![self.interstitial canPresentFromRootViewController:self error:nil]) {
      [self loadInterstitial];
    }
  }];
}

창을 회전할 때와 같은 방식으로 창 크기 조절을 처리할 수 있습니다. 새 창 크기에 맞는 배너 광고를 게재하는 작업은 앱에서 처리합니다.

아래의 예에는 새로운 창 너비에 맞는 새 적응형 배너를 생성하는 방법이 나와 있습니다.

- (void)viewWillTransitionToSize:(CGSize)size
      withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  [coordinator animateAlongsideTransition:nil
                               completion:^(id _Nonnull context) {
    [self loadBannerAd];
  }];
}

- (void)loadBannerAd {
  CGFloat bannerWidth = self.view.frame.size.width;

  self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth);

  GADRequest *request = [GADRequest request];
  request.scene = self.view.window.windowScene;
  [self.bannerView loadRequest:request];
}

네이티브 광고

네이티브 광고 렌더링을 관리하고, 크기가 변한 뷰에서 앱의 다른 콘텐츠와 비슷하도록 네이티브 광고가 렌더링되게 하는 작업은 게시자가 처리합니다.

알려진 문제

현재 멀티 윈도우 및 화면 분할 광고는 세로 모드에서만 지원됩니다. 가로 모드에서 광고를 요청하면 아래의 로그 메시지가 표시됩니다.

<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.