iOS के लिए Media Ads (IMA) SDK.
यह गाइड, IMA पब्लिशर के लिए है. ये पब्लिशर, IMA को लागू करने के मौजूदा तरीके में पिक्चर में पिक्चर मोड की सुविधा जोड़ना चाहते हैं.
ज़रूरी शर्तें
- शुरू करने से जुड़ी गाइड में दिया गया तरीका अपनाएं.
अपने ऐप्लिकेशन में पिक्चर में पिक्चर की सुविधा जोड़ना
एसडीके के 3.1.0 वर्शन से, IMA, iPad के लिए Apple के Picture in Picture मोड के साथ काम करता है. अपने ऐप्लिकेशन में Picture in Picture मोड की सुविधा जोड़ने के लिए, आपको कुछ सेटिंग में बदलाव करना होगा. साथ ही, IMA की कुछ नई क्लास लागू करनी होंगी. इसके बारे में यहां बताया गया है.
बैकग्राउंड में वीडियो चलाने की अनुमति देने के लिए सेटिंग अपडेट करना
पिक्चर में पिक्चर मोड के लिए, यह ज़रूरी है कि आपने अपने ऐप्लिकेशन में बैकग्राउंड में मीडिया चलाने की अनुमति दी हो.
नीचे दिखाए गए तरीके से, ऑडियो, AirPlay, और पिक्चर में पिक्चर के लिए, बैकग्राउंड मोड को चालू करें पर सेट करें:
बैकग्राउंड में वीडियो चलाने की सुविधा के साथ-साथ
IMASettings
में बैकग्राउंड में वीडियो चलाने की सुविधा चालू करने के लिए,AVAudioSession
प्रॉपर्टी सेट करें:... – (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 ऑब्जेक्ट बनाना
पिक्चर में पिक्चर की सुविधा के लिए, Apple ने 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 टूल को, पीआईपी विंडो में विज्ञापन डालने की अनुमति मिलती है. ऐसा तब होता है, जब आपका वीडियो पिक्चर में पिक्चर मोड में चल रहा हो:
... - (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
का इस्तेमाल किया जा रहा है, तो आपको खुद ही Picture in Picture बटन जोड़ना होगा. हमने ऐडवांस सैंपल में इस तरह से एक लागू किया है:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
अक्सर पूछे जाने वाले सवाल
- वीडियो को Picture in Picture मोड में देखने के दौरान विज्ञापन कैसे दिखाए जाएं?
- वीडियो को Picture in Picture मोड में देखने के दौरान विज्ञापन नहीं दिखाए जा सकते. विज्ञापन सिर्फ़ स्टैंडर्ड प्लेबैक मोड में दिखाए जा सकते हैं.
- मेरे मौजूदा Picture in Picture इंटिग्रेशन को मेरी क्लास के लिए
self.pictureInPictureController.delegate
सेट करना है. मैं Picture in Picture मोड में IMA विज्ञापन कैसे लागू करूं और डेलिगेट के तौर पर काम करना जारी रखूं? - पिक्चर इन पिक्चर मोड में विज्ञापन चलाने के लिए, IMA SDK को भी
AVPictureinPictureControllerDelegate
मैसेज मिलने चाहिए. इसलिए, हम आपसेAVPictureinPictureController
के लिए डेलिगेट कोIMAPictureInPicturyProxy
के इंस्टेंस पर सेट करने के लिए कहते हैं. यह प्रॉक्सी ऑब्जेक्ट, आपके ऐप्लिकेशन को सभीAVPictureinPictureControllerDelegate
मैसेज फ़ॉरवर्ड करता है. साथ ही, यह IMA को कॉल भी फ़ॉरवर्ड करता है, ताकि Picture in Picture मोड की सुविधा चालू की जा सके. ध्यान दें कि आपको अपने AVPlayerLayer के लिए, लोकल हैंडल भी बनाए रखना होगा.