ছবিতে-ছবিতে

এই নির্দেশিকাটি IMA প্রকাশকদের জন্য যারা তাদের বিদ্যমান IMA বাস্তবায়নে পিকচার ইন পিকচার সমর্থন যোগ করতে চান।

পূর্বশর্ত

আপনার অ্যাপে পিকচার-ইন-পিকচার সমর্থন যোগ করা হচ্ছে

SDK সংস্করণ 3.1.0 অনুসারে, IMA অ্যাপলের পিকচার ইন পিকচার মোডে আইপ্যাডের জন্য সমর্থন করে। আপনার অ্যাপে পিকচার ইন পিকচারের জন্য সমর্থন যোগ করতে, আপনাকে কয়েকটি সেটিংস পরিবর্তন করতে হবে এবং কয়েকটি নতুন IMA ক্লাস বাস্তবায়ন করতে হবে, যেমনটি নীচে দেখানো হয়েছে।

পটভূমি প্লেব্যাকের অনুমতি দিতে সেটিংস আপডেট করা হচ্ছে

পিকচার মোডে পিকচারের জন্য আপনাকে আপনার অ্যাপে ব্যাকগ্রাউন্ড মিডিয়া প্লেব্যাকের অনুমতি দিতে হবে।

  1. নিচে দেখানো হিসাবে অডিও, এয়ারপ্লে এবং পিকচার ইন পিকচারের জন্য পটভূমি মোডগুলি চালু করুন:

  2. ব্যাকগ্রাউন্ড প্লেব্যাক সমর্থন করার জন্য AVAudioSession বৈশিষ্ট্যগুলি সেট করুন, সেইসাথে IMASettings ব্যাকগ্রাউন্ড প্লেব্যাক সক্ষম করুন:

    ...
    – (void)viewDidLoad {
     [super viewDidLoad];
    
     self.playButton.layer.zPosition = MAXFLOAT;
    
     [[AVAudioSession sharedInstance] setActive:YES error:nil];
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    
     [self setupAdsLoader];
     [self setUpContentPlayer];
    }
    
    – (void)setupAdsLoader {
     IMASettings *settings = [[IMASettings alloc] init];
     settings.enableBackgroundPlayback = YES;
     self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings];
     self.adsLoader.delegate = self;
    }

পিকচার-ইন-পিকচারের জন্য নতুন iOS এবং IMA অবজেক্ট তৈরি করা

পিকচার ইন পিকচার সমর্থন করার জন্য, অ্যাপল AVPictureInPictureController এবং AVPictureinPictureControllerDelegate ক্লাস যোগ করেছে। IMA, তার অংশের জন্য, IMAPictureInPictureProxy যোগ করেছে। আপনার প্রকল্পে এই ক্লাসগুলিকে অন্তর্ভুক্ত করতে, আপনার কোডে নিম্নলিখিত বিবৃতিগুলি যোগ করুন:

...
@interface VideoViewController () <AVPictureInPictureControllerDelegate,
                                   IMAAdsLoaderDelegate,
                                   IMAAdsManagerDelegate,
                                   UIAlertViewDelegate>
...
// PiP objects.
@property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy;
@property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController;
...
@end

- (void)setUpContentPlayer {
  ...
  self.pictureInPictureProxy =
      [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self];
  self.pictureInPictureController =
      [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer];
  self.pictureInPictureController.delegate = self.pictureInPictureProxy;
}

আপনার বিজ্ঞাপনের অনুরোধ পরিবর্তন করা হচ্ছে

তৈরি করার জন্য আরও একটি নতুন বস্তু আছে: IMAAVPlayerVideoDisplay । এটি আপনার IMAAdsRequest কনস্ট্রাক্টরের কাছে পাঠানো হয় এবং যখন আপনার ভিডিও পিকচার ইন পিকচার মোডে চলছে তখন SDK-কে PiP উইন্ডোতে বিজ্ঞাপন ঢোকানোর অনুমতি দেয়:

...
- (void)requestAdsWithTag:(NSString *)adTagUrl {
  [self logMessage:@"Requesting ads"];
  // Create an ad request with our ad tag, display container, and optional user context.
  IMAAdsRequest *request = [[IMAAdsRequest alloc]
           initWithAdTagUrl:adTagUrl
         adDisplayContainer:[self createAdDisplayContainer]
       avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer]
      pictureInPictureProxy:self.pictureInPictureProxy
                userContext:nil];
  [self.adsLoader requestAdsWithRequest:request];
}

বিজ্ঞাপন শুরু হচ্ছে

ছবি মোডে ছবির সময় IMA SDK বিজ্ঞাপনগুলি শুরু করা যাবে না ৷ ফলস্বরূপ, আপনাকে নিশ্চিত করতে হবে যে আপনার ভিডিও স্ট্যান্ডার্ড প্লেব্যাক মোডে থাকলে আপনি শুধুমাত্র [adsManager start] কল করুন:

...
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
  [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]];
  // When the SDK notified you that ads have been loaded, play them.
  switch (event.type) {
    case kIMAAdEvent_LOADED:
      if (![self.pictureInPictureController isPictureInPictureActive]) {
        [adsManager start];
      }
      break;
    ...
    default:
      break;
  }
}

পিকচার-ইন-পিকচার মোডে প্রবেশ করা হচ্ছে

আপনি যদি AVPlayerViewController ছাড়া একটি AVPlayer ব্যবহার করেন, তাহলে আপনাকে আপনার নিজের ছবি ইন পিকচার বোতাম যোগ করতে হবে। আমরা আমাদের উন্নত নমুনায় এর মতো একটি প্রয়োগ করেছি:

- (IBAction)onPipButtonClicked:(id)sender {
  if ([self.pictureInPictureController isPictureInPictureActive]) {
    [self.pictureInPictureController stopPictureInPicture];
  } else {
    [self.pictureInPictureController startPictureInPicture];
  }
}

FAQ

ভিডিওটি পিকচার ইন পিকচার মোডে থাকলে আমি কীভাবে বিজ্ঞাপন শুরু করব?
ভিডিওটি পিকচার ইন পিকচার মোডে থাকা অবস্থায় বিজ্ঞাপন শুরু করা যাবে না; এগুলি শুধুমাত্র স্ট্যান্ডার্ড প্লেব্যাক মোডে শুরু করা যেতে পারে।
আমার বিদ্যমান পিকচার ইন পিকচার ইন্টিগ্রেশনকে আমার নিজের ক্লাসে self.pictureInPictureController.delegate সেট করতে হবে। আমি কীভাবে আইএমএ বিজ্ঞাপনগুলি ছবিতে ছবিতে প্রয়োগ করতে পারি এবং এখনও প্রতিনিধি হতে পারি?
IMA SDK-কে পিকচার ইন পিকচার মোডে বিজ্ঞাপন প্লেব্যাক সক্ষম করতে AVPictureinPictureControllerDelegate বার্তাগুলিও গ্রহণ করতে হবে। এই কারণেই আমরা আপনাকে IMAPictureInPicturyProxy এর একটি উদাহরণে AVPictureinPictureController এর জন্য প্রতিনিধি সেট করতে বলি। এই প্রক্সি অবজেক্টটি আপনার অ্যাপে সমস্ত AVPictureinPictureControllerDelegate বার্তাগুলিকে ফরোয়ার্ড করে, তবে পিকচার ইন পিকচার সমর্থন সক্ষম করতে IMA-তে কলগুলিও ফরোয়ার্ড করে৷ মনে রাখবেন যে আপনাকে অবশ্যই আপনার AVPlayerLayer-এ একটি স্থানীয় হ্যান্ডেল বজায় রাখতে হবে।