Bắt đầu sử dụng SDK IMA DAI

SDK IMA giúp bạn dễ dàng tích hợp quảng cáo đa phương tiện vào trang web và ứng dụng của mình. SDK IMA có thể yêu cầu quảng cáo từ bất kỳ máy chủ quảng cáo nào tuân thủ VAST và quản lý việc phát quảng cáo trong ứng dụng của bạn. Với SDK IMA DAI, ứng dụng sẽ tạo một yêu cầu truyền phát cho quảng cáo và video nội dung – VOD hoặc nội dung trực tiếp. Sau đó, SDK sẽ trả về một luồng video kết hợp để bạn không phải quản lý việc chuyển đổi giữa quảng cáo và video nội dung trong ứng dụng.

Chọn giải pháp DAI mà bạn quan tâm

DAI trọn gói

Hướng dẫn này minh hoạ cách tích hợp SDK IMA DAI vào một ứng dụng trình phát video đơn giản. Nếu bạn muốn xem hoặc làm theo một mẫu tích hợp hoàn chỉnh, hãy tải BasicExample xuống từ GitHub.

Tổng quan về DAI của IMA

Việc triển khai IMA DAI liên quan đến 4 thành phần SDK chính như minh hoạ trong hướng dẫn này:

  • IMAAdDisplayContainer – Một đối tượng vùng chứa nằm trên phần tử phát video và chứa các phần tử giao diện người dùng quảng cáo.
  • IMAAdsLoader – Một đối tượng yêu cầu luồng và xử lý các sự kiện do đối tượng phản hồi yêu cầu luồng kích hoạt. Bạn chỉ nên tạo bản sao của một trình tải quảng cáo, có thể sử dụng lại trong suốt thời gian hoạt động của ứng dụng.
  • IMAStreamRequest IMAVODStreamRequest hoặc IMALiveStreamRequest. Đối tượng xác định yêu cầu truyền phát. Yêu cầu phát trực tuyến có thể là cho video theo yêu cầu hoặc sự kiện phát trực tiếp. Các yêu cầu chỉ định mã nội dung, cũng như khoá API hoặc mã thông báo xác thực và các thông số khác.
  • IMAStreamManager – Một đối tượng xử lý các luồng chèn quảng cáo động và tương tác với phần phụ trợ DAI. Trình quản lý luồng cũng xử lý ping theo dõi và chuyển tiếp sự kiện quảng cáo và luồng đến nhà xuất bản.

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

Trước khi bắt đầu, bạn cần có:

Bạn cũng cần có các thông số dùng để yêu cầu luồng từ SDK IMA. Để biết ví dụ về tham số yêu cầu, hãy xem phần Luồng mẫu.

Thông số của sự kiện phát trực tiếp
Khoá thành phần Khoá thành phần xác định sự kiện phát trực tiếp của bạn trong Google Ad Manager.
Ví dụ: c-rArva4ShKVIAkNfy6HUQ
Thông số luồng VOD
Mã nguồn nội dung Mã nhận dạng nguồn nội dung của Google Ad Manager.
Ví dụ: 2548831
Mã video Mã video trong Google Ad Manager.
Ví dụ: tears-of-steel

Tạo dự án Xcode mới

Trong Xcode, hãy tạo một dự án iOS mới bằng Objective-C. Sử dụng BasicExample làm tên dự án.

Thêm SDK IMA DAI vào dự án Xcode

Sử dụng một trong ba phương thức sau để cài đặt SDK IMA DAI.

Cài đặt SDK bằng CocoaPods (ưu tiên)

CocoaPods là trình quản lý phần phụ thuộc cho các dự án Xcode và là phương pháp được đề xuất để cài đặt SDK IMA DAI. Để biết thêm thông tin về cách cài đặt hoặc sử dụng CocoaPods, hãy xem tài liệu về CocoaPods. Sau khi bạn cài đặt CocoaPods, hãy làm theo hướng dẫn sau để cài đặt SDK IMA DAI:

  1. Trong cùng thư mục với tệp BasicExample.xcodeproj, hãy tạo một tệp văn bản có tên là Podfile rồi thêm cấu hình sau:

    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '14'
    
    target 'BasicExample' do
      pod 'GoogleAds-IMA-iOS-SDK', '~> 3.23.0'
    end
    
  2. Từ thư mục chứa Podfile, hãy chạy:

    pod install --repo-update`
  3. Xác minh rằng quá trình cài đặt đã thành công bằng cách mở tệp BasicExample.xcworkspace và xác nhận rằng tệp này chứa hai dự án: BasicExamplePods (các phần phụ thuộc do CocoaPods cài đặt).

Cài đặt SDK bằng Trình quản lý gói Swift

SDK Quảng cáo trên phương tiện truyền thông tương tác hỗ trợ Trình quản lý gói Swift phiên bản 3.18.4 trở lên. Hãy làm theo các bước sau để nhập gói Swift.

  1. Trong Xcode, hãy cài đặt Gói Swift SDK IMA DAI bằng cách chuyển đến File > Add Packages (Tệp > Thêm gói).

  2. Khi thông báo nhắc xuất hiện, hãy tìm kiếm kho lưu trữ GitHub cho Gói Swift SDK IMA DAI:

    https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios
    
  3. Chọn phiên bản của Gói Swift SDK IMA DAI mà bạn muốn sử dụng. Đối với các dự án mới, bạn nên sử dụng Phiên bản lớn tiếp theo.

Khi bạn hoàn tất, Xcode sẽ phân giải các phần phụ thuộc của gói và tải các phần phụ thuộc đó xuống ở chế độ nền. Để biết thêm thông tin chi tiết về cách thêm các phần phụ thuộc của gói, hãy xem bài viết của Apple.

Tải và cài đặt SDK theo cách thủ công

Nếu không muốn sử dụng Trình quản lý gói Swift hoặc CocoaPods, bạn có thể tải SDK IMA DAI xuống và thêm SDK đó vào dự án theo cách thủ công.

Tạo trình phát video đơn giản

Triển khai trình phát video trong trình điều khiển thành phần hiển thị chính, sử dụng trình phát AV được gói trong thành phần hiển thị giao diện người dùng. SDK IMA sử dụng chế độ xem giao diện người dùng để hiển thị các phần tử giao diện người dùng của quảng cáo.

#import "ViewController.h"

#import <AVKit/AVKit.h>

/// Content URL.
static NSString *const kBackupContentUrl =
    @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";

@interface ViewController ()
/// Play button.
@property(nonatomic, weak) IBOutlet UIButton *playButton;

@property(nonatomic, weak) IBOutlet UIView *videoView;
/// Video player.
@property(nonatomic, strong) AVPlayer *videoPlayer;
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.view.backgroundColor = [UIColor blackColor];

  // Load AVPlayer with the path to your content.
  NSURL *contentURL = [NSURL URLWithString:kBackupContentUrl];
  self.videoPlayer = [AVPlayer playerWithURL:contentURL];

  // Create a player layer for the player.
  AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.videoPlayer];

  // Size, position, and display the AVPlayer.
  playerLayer.frame = self.videoView.layer.bounds;
  [self.videoView.layer addSublayer:playerLayer];
}

- (IBAction)onPlayButtonTouch:(id)sender {
  [self.videoPlayer play];
  self.playButton.hidden = YES;
}

@end

Khởi chạy trình tải quảng cáo

Nhập SDK IMA vào trình điều khiển khung hiển thị và sử dụng các giao thức IMAAdsLoaderDelegateIMAStreamManagerDelegate để xử lý trình tải quảng cáo và sự kiện trình quản lý luồng.

Thêm các thuộc tính riêng tư sau để lưu trữ các thành phần chính của SDK IMA:

  • IMAAdsLoader – Quản lý các yêu cầu truyền trực tuyến trong suốt vòng đời của ứng dụng.
  • IMAAdDisplayContainer – Xử lý việc chèn và quản lý các phần tử giao diện người dùng của quảng cáo.
  • IMAAVPlayerVideoDisplay – Thông báo giữa SDK IMA và trình phát nội dung nghe nhìn, đồng thời xử lý siêu dữ liệu theo thời gian.
  • IMAStreamManager – Quản lý việc phát trực tuyến và kích hoạt các sự kiện liên quan đến quảng cáo.

Khởi chạy trình tải quảng cáo, vùng chứa hiển thị quảng cáo và màn hình video sau khi chế độ xem tải.

@import GoogleInteractiveMediaAds;

// ...

@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
/// The entry point for the IMA DAI SDK to make DAI stream requests.
@property(nonatomic, strong) IMAAdsLoader *adsLoader;
/// The container where the SDK renders each ad's user interface elements and companion slots.
@property(nonatomic, strong) IMAAdDisplayContainer *adDisplayContainer;
/// The reference of your video player for the IMA DAI SDK to monitor playback and handle timed
/// metadata.
@property(nonatomic, strong) IMAAVPlayerVideoDisplay *imaVideoDisplay;
/// References the stream manager from the IMA DAI SDK after successful stream loading.
@property(nonatomic, strong) IMAStreamManager *streamManager;

// ...

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // ...

  self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];
  self.adsLoader.delegate = self;

  // Create an ad display container for rendering each ad's user interface elements and companion
  // slots.
  self.adDisplayContainer =
      [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
                                          viewController:self
                                          companionSlots:nil];

  // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
  self.imaVideoDisplay = [[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.videoPlayer];
}

Tạo yêu cầu truyền trực tuyến

Khi người dùng nhấn vào nút phát, hãy tạo một yêu cầu truyền trực tuyến mới. Sử dụng lớp IMALiveStreamRequest cho sự kiện phát trực tiếp. Đối với luồng VOD, hãy sử dụng lớp IMAVODStreamRequest.

Yêu cầu truyền trực tuyến yêu cầu các thông số truyền trực tuyến, cũng như tham chiếu đến vùng chứa hiển thị quảng cáo và vùng hiển thị video.

- (IBAction)onPlayButtonTouch:(id)sender {
  [self requestStream];
  self.playButton.hidden = YES;
}

- (void)requestStream {
  // Create a stream request. Use one of "Live stream request" or "VOD request", depending on your
  // type of stream.
  IMAStreamRequest *request;
  // Switch this variable to NO to make a VOD request.
  BOOL useLiveStream = YES;
  if (useLiveStream) {
    // Live stream request. Replace the asset key with your value.
    request = [[IMALiveStreamRequest alloc] initWithAssetKey:@"c-rArva4ShKVIAkNfy6HUQ"
                                          adDisplayContainer:self.adDisplayContainer
                                                videoDisplay:self.imaVideoDisplay
                                                 userContext:nil];
  } else {
    // VOD request. Replace the content source ID and video ID with your values.
    request = [[IMAVODStreamRequest alloc] initWithContentSourceID:@"2548831"
                                                           videoID:@"tears-of-steel"
                                                adDisplayContainer:self.adDisplayContainer
                                                      videoDisplay:self.imaVideoDisplay
                                                       userContext:nil];
  }
  [self.adsLoader requestStreamWithRequest:request];
}

Theo dõi các sự kiện tải luồng

Lớp IMAAdsLoader gọi các phương thức IMAAdsLoaderDelegate khi khởi chạy thành công hoặc không thành công yêu cầu luồng.

Trong phương thức uỷ quyền adsLoadedWithData, hãy đặt IMAStreamManagerDelegate và khởi chạy trình quản lý luồng. Khi khởi động, trình quản lý luồng sẽ bắt đầu phát.

Trong phương thức uỷ quyền failedWithErrorData, hãy ghi lại lỗi. Bạn có thể phát luồng dự phòng (không bắt buộc). Xem các phương pháp hay nhất về DAI.

- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
  NSLog(@"Stream created with: %@.", adsLoadedData.streamManager.streamId);
  self.streamManager = adsLoadedData.streamManager;
  self.streamManager.delegate = self;
  [self.streamManager initializeWithAdsRenderingSettings:nil];
}

- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
  // Log the error and play the content.
  NSLog(@"AdsLoader error, code:%ld, message: %@", adErrorData.adError.code,
        adErrorData.adError.message);
  [self.videoPlayer play];
}

Theo dõi các sự kiện quảng cáo

IMAStreamManager gọi các phương thức IMAStreamManagerDelegate để truyền sự kiện và lỗi phát trực tuyến đến ứng dụng của bạn.

Trong ví dụ này, hãy ghi lại các sự kiện quảng cáo chính vào bảng điều khiển:

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  NSLog(@"Ad event (%@).", event.typeString);
  switch (event.type) {
    case kIMAAdEvent_STARTED: {
      // Log extended data.
      NSString *extendedAdPodInfo = [[NSString alloc]
          initWithFormat:@"Showing ad %ld/%ld, bumper: %@, title: %@, description: %@, contentType:"
                         @"%@, pod index: %ld, time offset: %lf, max duration: %lf.",
                         (long)event.ad.adPodInfo.adPosition, (long)event.ad.adPodInfo.totalAds,
                         event.ad.adPodInfo.isBumper ? @"YES" : @"NO", event.ad.adTitle,
                         event.ad.adDescription, event.ad.contentType,
                         (long)event.ad.adPodInfo.podIndex, event.ad.adPodInfo.timeOffset,
                         event.ad.adPodInfo.maxDuration];

      NSLog(@"%@", extendedAdPodInfo);
      break;
    }
    case kIMAAdEvent_AD_BREAK_STARTED: {
      NSLog(@"Ad break started");
      break;
    }
    case kIMAAdEvent_AD_BREAK_ENDED: {
      NSLog(@"Ad break ended");
      break;
    }
    case kIMAAdEvent_AD_PERIOD_STARTED: {
      NSLog(@"Ad period started");
      break;
    }
    case kIMAAdEvent_AD_PERIOD_ENDED: {
      NSLog(@"Ad period ended");
      break;
    }
    default:
      break;
  }
}

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {
  NSLog(@"StreamManager error with type: %ld\ncode: %ld\nmessage: %@", error.type, error.code,
        error.message);
  [self.videoPlayer play];
}

Chạy ứng dụng của bạn. Nếu thành công, bạn có thể yêu cầu và phát luồng DAI của Google bằng SDK IMA. Để tìm hiểu về các tính năng SDK nâng cao hơn, hãy xem các hướng dẫn khác được liệt kê trong thanh bên trái hoặc các mẫu trên GitHub.