Hỗ trợ nhiều cửa sổ trên iPad

Kể từ phiên bản iOS 13, các ứng dụng có thể hỗ trợ nhiều cửa sổ trên iPad. Điều này đồng nghĩa với việc người dùng có thể tương tác đồng thời với nhiều bản sao giao diện người dùng của ứng dụng. Mỗi cửa sổ có thể có kích thước khác nhau và bạn có thể đổi kích thước bất kỳ lúc nào. Việc đổi kích thước có thể ảnh hưởng đến cách tải và hiển thị quảng cáo.

Hướng dẫn này cho bạn biết các phương pháp hay nhất để hiển thị quảng cáo chính xác trong tình huống có nhiều cửa sổ trên iPad.

Điều kiện tiên quyết

Đặt cảnh trong yêu cầu quảng cáo

Để quảng cáo hiển thị vừa vặn trong một cửa sổ cụ thể, bạn nên chuyển windowScene của chế độ xem sang yêu cầu quảng cáo. SDK quảng cáo trên thiết bị di động của Google sẽ trả về quảng cáo có kích thước phù hợp cho cảnh đó.

- (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.

Tạo yêu cầu quảng cáo trong viewDidAppear:

Trong trường hợp bạn sử dụng tính năng nhiều cửa sổ, hệ thống sẽ đưa ra yêu cầu phải có cảnh cửa sổ để gửi yêu cầu quảng cáo. Vì bạn chưa thêm chế độ xem vào cửa sổ trong viewDidLoad:, bạn nên tạo yêu cầu quảng cáo trong viewDidAppear:, nơi mà cảnh cửa sổ do điểm đó đặt.

Xin lưu ý rằng hệ thống có thể gọi viewDidAppear: nhiều lần trong suốt thời gian hoạt động của ứng dụng. Bạn nên bọc mã khởi chạy yêu cầu quảng cáo bằng cờ. Cờ này sẽ cho biết liệu mã đó đã được thực hiện hay chưa.

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

Xử lý việc đổi kích thước

Người dùng có thể kéo cảnh xung quanh bất kỳ lúc nào, thay đổi kích thước cửa sổ sau khi thực hiện yêu cầu quảng cáo. Bạn có thể yêu cầu một quảng cáo mới khi người dùng đổi kích thước. Mã mẫu dưới đây sử dụng viewWillTransitionToSize:withTransitionCoordinator: để nhận thông báo khi cửa sổ của trình kiểm soát chế độ xem gốc xoay hoặc đổi kích thước, nhưng bạn cũng có thể theo dõi windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: cho các thay đổi cụ thể về cảnh của cửa sổ.

Quảng cáo xen kẽ và Quảng cáo có tặng thưởng

SDK quảng cáo trên thiết bị di động của Google cung cấp phương thức canPresentFromViewController:error: để xác định liệu một quảng cáo xen kẽ hoặc quảng cáo có tặng thưởng có hợp lệ hay không, cho phép bạn kiểm tra xem liệu có cần làm mới mọi quảng cáo toàn màn hình mỗi khi kích thước cửa sổ thay đổi hay không.

- (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];
    }
  }];
}

Bạn có thể xử lý việc đổi kích thước cửa sổ giống như cách xoay cửa sổ. Ứng dụng của bạn chịu trách nhiệm đảm bảo việc quảng cáo biểu ngữ hiển thị vừa vặn với kích thước mới của cửa sổ.

Ví dụ dưới đây sẽ tạo biểu ngữ thích ứng mới vừa với chiều rộng mới của cửa sổ:

- (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];
}

Quảng cáo gốc

Bạn có quyền kiểm soát việc hiển thị quảng cáo gốc và chịu trách nhiệm đảm bảo quảng cáo gốc đó hiển thị bên trong chế độ xem đã đổi kích thước, tương tự như phần còn lại của nội dung ứng dụng.

Vấn đề đã biết

Hiện tại, Google chỉ hỗ trợ quảng cáo chia đôi màn hình và nhiều cửa sổ ở chế độ dọc. Bạn sẽ nhận được thông báo nhật ký sau đây khi yêu cầu quảng cáo ở chế độ ngang.

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