با IMA DAI SDK شروع کنید

IMA SDK ادغام تبلیغات چندرسانه ای را در وب سایت ها و برنامه های شما آسان می کند. IMA SDK می‌تواند از هر سرور تبلیغاتی سازگار با VAST آگهی درخواست کند و پخش آگهی را در برنامه‌های شما مدیریت کند. با IMA DAI SDK، برنامه‌ها درخواست پخش جریانی برای آگهی و ویدیوی محتوا را ارائه می‌کنند - اعم از VOD یا محتوای زنده. سپس SDK یک جریان ویدیوی ترکیبی را برمی‌گرداند، به طوری که نیازی به مدیریت جابجایی بین آگهی و ویدیوی محتوا در برنامه خود ندارید.

راه حل DAI مورد علاقه خود را انتخاب کنید

خدمات کامل DAI

این راهنما نحوه ادغام IMA DAI SDK را در یک برنامه پخش کننده ویدیوی ساده نشان می دهد. اگر می‌خواهید نمونه یکپارچه‌سازی کامل شده را مشاهده یا دنبال کنید، BasicExample را از GitHub دانلود کنید.

نمای کلی IMA DAI

پیاده سازی IMA DAI شامل چهار جزء اصلی SDK است که در این راهنما نشان داده شده است:

  • IMAAdDisplayContainer - یک شی کانتینری که در بالای عنصر پخش ویدیو قرار می گیرد و عناصر رابط کاربری تبلیغات را در خود جای می دهد.
  • IMAAdsLoader – شی ای که جریان ها را درخواست می کند و رویدادهای ایجاد شده توسط اشیاء پاسخ درخواست جریان را مدیریت می کند. شما باید فقط یک بارکننده تبلیغات را نمونه برداری کنید، که می تواند در طول عمر برنامه مجددا استفاده شود.
  • IMAStreamRequest – یا IMAVODStreamRequest یا IMALiveStreamRequest . یک شی که یک درخواست جریان را تعریف می کند. درخواست‌های جریان می‌تواند برای ویدیوی درخواستی یا پخش مستقیم باشد. درخواست ها یک شناسه محتوا و همچنین یک کلید API یا نشانه احراز هویت و سایر پارامترها را مشخص می کنند.
  • IMAStreamManager – شیئی که جریانهای درج آگهی پویا و تعاملات با باطن DAI را مدیریت می کند. مدیر جریان همچنین پینگ‌های ردیابی را مدیریت می‌کند و جریان‌ها و رویدادهای تبلیغاتی را به ناشر ارسال می‌کند.

پیش نیازها

قبل از شروع به موارد زیر نیاز دارید:

شما همچنین به پارامترهایی نیاز دارید که برای درخواست جریان خود از IMA SDK استفاده می شود. برای مثال‌هایی از پارامترهای درخواست، نمونه جریان‌ها را ببینید.

پارامترهای پخش زنده
کلید دارایی کلید دارایی شناسایی پخش زنده شما در Google Ad Manager .
مثال: c-rArva4ShKVIAkNfy6HUQ
پارامترهای جریان VOD
شناسه منبع محتوا شناسه منبع محتوا از Google Ad Manager.
مثال: 2548831
شناسه ویدیو شناسه ویدیو از Google Ad Manager.
مثال: tears-of-steel

یک پروژه Xcode جدید ایجاد کنید

در Xcode، یک پروژه جدید iOS با استفاده از Objective-C ایجاد کنید. از BasicExample به عنوان نام پروژه استفاده کنید.

IMA DAI SDK را به پروژه Xcode اضافه کنید

برای نصب IMA DAI SDK از یکی از این سه روش استفاده کنید.

SDK را با استفاده از CocoaPods نصب کنید (ترجیحا)

CocoaPods یک مدیر وابستگی برای پروژه های Xcode است و روش توصیه شده برای نصب IMA DAI SDK است. برای اطلاعات بیشتر در مورد نصب یا استفاده از CocoaPods، به مستندات CocoaPods مراجعه کنید. پس از نصب CocoaPods، از دستورالعمل های زیر برای نصب IMA DAI SDK استفاده کنید:

  1. در همان پوشه فایل BasicExample.xcodeproj خود، یک فایل متنی به نام Podfile ایجاد کنید و پیکربندی زیر را اضافه کنید:

    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '14'
    
    target 'BasicExample' do
      pod 'GoogleAds-IMA-iOS-SDK', '~> 3.23.0'
    end
    
  2. از دایرکتوری حاوی Podfile، اجرا کنید:

    pod install --repo-update`
  3. با باز کردن فایل BasicExample.xcworkspace و تأیید اینکه حاوی دو پروژه است، تأیید کنید که نصب با موفقیت انجام شده است: BasicExample و Pods (وابستگی های نصب شده توسط CocoaPods).

SDK را با استفاده از Swift Package Manager نصب کنید

Interactive Media Ads SDK از Swift Package Manager با شروع نسخه 3.18.4 پشتیبانی می کند. برای وارد کردن بسته سوئیفت مراحل زیر را دنبال کنید.

  1. در Xcode، بسته IMA DAI SDK Swift را با رفتن به File > Add Packages نصب کنید.

  2. در اعلان ظاهر شده، مخزن IMA DAI SDK Swift Package GitHub را جستجو کنید:

    https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios
    
  3. نسخه IMA DAI SDK Swift Package را که می خواهید استفاده کنید انتخاب کنید. برای پروژه‌های جدید، توصیه می‌کنیم از نسخه اصلی تا بعدی استفاده کنید.

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

SDK را به صورت دستی دانلود و نصب کنید

اگر نمی خواهید از Swift Package Manager یا CocoaPods استفاده کنید، می توانید IMA DAI SDK را دانلود کرده و به صورت دستی آن را به پروژه خود اضافه کنید.

یک پخش کننده ویدیوی ساده ایجاد کنید

با استفاده از پخش کننده AV که در نمای رابط کاربری پیچیده شده است، یک پخش کننده ویدیو را در کنترلر نمای اصلی خود پیاده کنید. IMA SDK از نمای رابط کاربری برای نمایش عناصر رابط کاربری تبلیغات استفاده می کند.

#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

لودر تبلیغات را راه اندازی کنید

IMA SDK را در کنترل‌کننده view خود وارد کنید و پروتکل‌های IMAAdsLoaderDelegate و IMAStreamManagerDelegate را برای مدیریت رویدادهای بارکننده تبلیغات و مدیریت جریان استفاده کنید.

این ویژگی‌های خصوصی را برای ذخیره مؤلفه‌های کلیدی IMA SDK اضافه کنید:

  • IMAAdsLoader - درخواست های جریان را در طول عمر برنامه شما مدیریت می کند.
  • IMAAdDisplayContainer - درج و مدیریت عناصر رابط کاربری تبلیغات را کنترل می کند.
  • IMAAVPlayerVideoDisplay - بین IMA SDK و پخش کننده رسانه شما ارتباط برقرار می کند و ابرداده های زمان بندی شده را مدیریت می کند.
  • IMAStreamManager - پخش جریانی را مدیریت می کند و رویدادهای مرتبط با تبلیغات را فعال می کند.

پس از بارگیری نمایش، بارگیری تبلیغات، محفظه نمایش آگهی و نمایش ویدیو را راه اندازی کنید.

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

درخواست پخش جریانی بدهید

وقتی کاربر دکمه پخش را فشار می‌دهد، یک درخواست پخش جریانی جدید ارائه دهید. برای پخش زنده از کلاس IMALiveStreamRequest استفاده کنید. برای جریان های VOD، از کلاس IMAVODStreamRequest استفاده کنید.

درخواست پخش جریانی به پارامترهای جریان شما و همچنین ارجاع به ظرف نمایش آگهی و نمایش ویدیوی شما نیاز دارد.

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

به جریان رویدادهای بارگذاری گوش دهید

کلاس IMAAdsLoader متدهای IMAAdsLoaderDelegate را در صورت موفقیت آمیز اولیه یا شکست درخواست جریان فراخوانی می کند.

در روش نمایندگی adsLoadedWithData ، IMAStreamManagerDelegate خود را تنظیم کرده و مدیر جریان را مقداردهی اولیه کنید. با مقداردهی اولیه، مدیر جریان پخش را شروع می کند.

در متد نمایندگی failedWithErrorData ، خطا را ثبت کنید. در صورت تمایل، جریان پشتیبان را پخش کنید. بهترین شیوه های 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];
}

به رویدادهای تبلیغاتی گوش دهید

IMAStreamManager متدهای IMAStreamManagerDelegate را فراخوانی می‌کند تا رویدادها و خطاها را به برنامه شما منتقل کند.

برای این مثال، رویدادهای تبلیغاتی اولیه را در کنسول ثبت کنید:

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

برنامه خود را اجرا کنید و در صورت موفقیت آمیز بودن، می توانید جریان های Google DAI را با IMA SDK درخواست و پخش کنید. برای آشنایی با ویژگی‌های پیشرفته‌تر SDK، به سایر راهنماهای فهرست‌شده در نوار کناری سمت چپ یا نمونه‌های GitHub مراجعه کنید.