IMA SDK গুলি আপনার ওয়েবসাইট এবং অ্যাপগুলিতে মাল্টিমিডিয়া বিজ্ঞাপনগুলিকে একীভূত করা সহজ করে তোলে। IMA SDK গুলি যেকোনো VAST-সম্মত বিজ্ঞাপন সার্ভার থেকে বিজ্ঞাপনের অনুরোধ করতে পারে এবং আপনার অ্যাপগুলিতে বিজ্ঞাপন প্লেব্যাক পরিচালনা করতে পারে। IMA DAI SDK গুলির সাহায্যে, অ্যাপগুলি বিজ্ঞাপন এবং কন্টেন্ট ভিডিওর জন্য একটি স্ট্রিম অনুরোধ করে—হয় VOD অথবা লাইভ কন্টেন্ট। SDK তারপর একটি সম্মিলিত ভিডিও স্ট্রিম প্রদান করে, যাতে আপনাকে আপনার অ্যাপের মধ্যে বিজ্ঞাপন এবং কন্টেন্ট ভিডিওর মধ্যে স্যুইচ করার ব্যবস্থা করতে না হয়।
আপনার আগ্রহের DAI সমাধানটি নির্বাচন করুন।
পূর্ণাঙ্গ পরিষেবা DAI
এই নির্দেশিকাটি IMA DAI SDK কে একটি সাধারণ ভিডিও প্লেয়ার অ্যাপের সাথে কীভাবে একীভূত করতে হয় তা দেখায়। আপনি যদি একটি সম্পূর্ণ নমুনা একীভূতকরণ দেখতে বা অনুসরণ করতে চান, তাহলে GitHub থেকে BasicExample ডাউনলোড করুন।
IMA DAI ওভারভিউ
IMA DAI বাস্তবায়নে তিনটি প্রধান SDK উপাদান জড়িত, যেমনটি এই নির্দেশিকায় দেখানো হয়েছে:
-
IMAAdDisplayContainer: একটি কন্টেইনার অবজেক্ট যা ভিডিও প্লেব্যাক এলিমেন্টের উপরে থাকে এবং বিজ্ঞাপন UI এলিমেন্টগুলিকে ধারণ করে। -
IMAAdsLoader: এমন একটি অবজেক্ট যা স্ট্রিম অনুরোধ করে এবং স্ট্রিম অনুরোধ প্রতিক্রিয়া অবজেক্ট দ্বারা ট্রিগার হওয়া ইভেন্টগুলি পরিচালনা করে। আপনার কেবল একটি বিজ্ঞাপন লোডার চালু করা উচিত, যা অ্যাপ্লিকেশনের পুরো সময় জুড়ে পুনরায় ব্যবহার করা যেতে পারে। -
IMAStreamRequest– হয় একটিIMAVODStreamRequestঅথবা একটিIMALiveStreamRequest: একটি অবজেক্ট যা একটি স্ট্রিম অনুরোধকে সংজ্ঞায়িত করে। স্ট্রিম অনুরোধগুলি ভিডিও-অন-ডিমান্ড বা লাইভ স্ট্রিমের জন্য হতে পারে। লাইভ স্ট্রিম অনুরোধগুলি একটি সম্পদ কী নির্দিষ্ট করে, যখন VOD অনুরোধগুলি একটি CMS আইডি এবং ভিডিও আইডি নির্দিষ্ট করে। উভয় অনুরোধের ধরণে ঐচ্ছিকভাবে নির্দিষ্ট স্ট্রিমগুলি অ্যাক্সেস করার জন্য প্রয়োজনীয় একটি API কী এবং Google বিজ্ঞাপন ম্যানেজার সেটিংসে নির্দিষ্ট বিজ্ঞাপন শনাক্তকারী পরিচালনা করার জন্য IMA SDK-এর জন্য একটি Google বিজ্ঞাপন ম্যানেজার নেটওয়ার্ক কোড অন্তর্ভুক্ত থাকতে পারে। -
IMAStreamManager: একটি অবজেক্ট যা DAI ব্যাকএন্ডের সাথে গতিশীল বিজ্ঞাপন সন্নিবেশ স্ট্রিম এবং ইন্টারঅ্যাকশন পরিচালনা করে। স্ট্রিম ম্যানেজার ট্র্যাকিং পিংগুলিও পরিচালনা করে এবং স্ট্রিম এবং বিজ্ঞাপন ইভেন্টগুলি প্রকাশকের কাছে ফরোয়ার্ড করে।
পূর্বশর্ত
শুরু করার আগে, আপনার নিম্নলিখিতগুলি প্রয়োজন:
- এক্সকোড ১৩ বা তার পরবর্তী সংস্করণ
- CocoaPods (পছন্দের), Swift Package Manager, অথবা tvOS-এর জন্য IMA DAI SDK- এর ডাউনলোড করা কপি
একটি নতুন Xcode প্রকল্প তৈরি করুন
Xcode-এ, Objective-C ব্যবহার করে একটি নতুন tvOS প্রকল্প তৈরি করুন। প্রকল্পের নাম হিসেবে BasicExample ব্যবহার করুন।
Xcode প্রজেক্টে IMA DAI SDK যোগ করুন
IMA DAI SDK ইনস্টল করতে এই তিনটি পদ্ধতির যেকোনো একটি ব্যবহার করুন।
CocoaPods ব্যবহার করে SDK ইনস্টল করুন (পছন্দসই)
CocoaPods হল Xcode প্রকল্পের জন্য একটি নির্ভরতা ব্যবস্থাপক এবং IMA DAI SDK ইনস্টল করার জন্য এটি প্রস্তাবিত পদ্ধতি। CocoaPods ইনস্টল বা ব্যবহার সম্পর্কে আরও তথ্যের জন্য, CocoaPods ডকুমেন্টেশন দেখুন। CocoaPods ইনস্টল হয়ে গেলে, IMA DAI SDK ইনস্টল করতে নিম্নলিখিত নির্দেশাবলী ব্যবহার করুন:
আপনার BasicExample.xcodeproj ফাইলের মতো একই ডিরেক্টরিতে, Podfile নামে একটি টেক্সট ফাইল তৈরি করুন এবং নিম্নলিখিত কনফিগারেশনটি যোগ করুন:
source 'https://github.com/CocoaPods/Specs.git' platform :tvos, '15' target "BasicExample" do pod 'GoogleAds-IMA-tvOS-SDK', '~> 4.16.0' endপডফাইল ধারণকারী ডিরেক্টরি থেকে, চালান:
pod install --repo-update`ইনস্টলেশনটি সফল হয়েছে কিনা তা যাচাই করতে BasicExample.xcworkspace ফাইলটি খুলে নিশ্চিত করুন যে এতে দুটি প্রকল্প রয়েছে: BasicExample এবং Pods (CocoaPods দ্বারা ইনস্টল করা নির্ভরতা)।
সুইফট প্যাকেজ ম্যানেজার ব্যবহার করে SDK ইনস্টল করুন
ইন্টারেক্টিভ মিডিয়া বিজ্ঞাপন SDK 4.8.2 সংস্করণ থেকে সুইফট প্যাকেজ ম্যানেজার সমর্থন করে। সুইফট প্যাকেজ আমদানি করতে এই পদক্ষেপগুলি অনুসরণ করুন।
Xcode-এ, File > Add Packages- এ নেভিগেট করে GoogleInteractiveMediaAds Swift প্যাকেজটি ইনস্টল করুন।
প্রদর্শিত প্রম্পটে, GoogleInteractiveMediaAds Swift Package GitHub সংগ্রহস্থলটি অনুসন্ধান করুন:
https://github.com/googleads/swift-package-manager-google-interactive-media-ads-tvosআপনি যে GoogleInteractiveMediaAds Swift প্যাকেজটি ব্যবহার করতে চান তার সংস্করণটি নির্বাচন করুন। নতুন প্রকল্পগুলির জন্য, আমরা Up to Next Major Version ব্যবহার করার পরামর্শ দিচ্ছি।
আপনার কাজ শেষ হয়ে গেলে, Xcode আপনার প্যাকেজ নির্ভরতা সমাধান করে এবং ব্যাকগ্রাউন্ডে ডাউনলোড করে। প্যাকেজ নির্ভরতা কীভাবে যোগ করবেন সে সম্পর্কে আরও তথ্যের জন্য, Apple এর নিবন্ধটি দেখুন।
SDK ম্যানুয়ালি ডাউনলোড এবং ইনস্টল করা
আপনি যদি Swift Package Manager বা CocoaPods ব্যবহার করতে না চান, তাহলে আপনি IMA DAI SDK ডাউনলোড করে ম্যানুয়ালি আপনার প্রোজেক্টে যোগ করতে পারেন।
একটি সহজ ভিডিও প্লেয়ার তৈরি করুন
প্রথমে, একটি বেসিক ভিডিও প্লেয়ার চালু করুন। প্রাথমিকভাবে, এই প্লেয়ারটি IMA DAI SDK ব্যবহার করে না এবং এতে প্লেব্যাক ট্রিগার করার কোনও পদ্ধতিও নেই।
ভিউকন্ট্রোলার.এম
#import "ViewController.h"
#import <AVKit/AVKit.h>
@interface ViewController ()
@property(nonatomic) AVPlayerViewController *playerViewController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
// Create a stream video player.
AVPlayer *player = [[AVPlayer alloc] init];
self.playerViewController = [[AVPlayerViewController alloc] init];
self.playerViewController.player = player;
// Attach the video player to the view hierarchy.
[self addChildViewController:self.playerViewController];
self.playerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.playerViewController.view];
[self.playerViewController didMoveToParentViewController:self];
}
@end
SDK ইমপোর্ট করুন এবং IMA ইন্টারঅ্যাকশনের জন্য স্টাব যোগ করুন
আপনার প্রকল্পে IMA DAI SDK যোগ করার পরে, SDK আমদানি করুন এবং IMA ইন্টারঅ্যাকশনের প্রাথমিক পয়েন্টগুলির জন্য স্টাব যোগ করুন।
ভিউকন্ট্রোলার.এম
#import "ViewController.h"
#import <AVKit/AVKit.h>
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
@interface ViewController ()
@property(nonatomic) IMAAdsLoader *adsLoader;
@property(nonatomic) UIView *adContainerView;
@property(nonatomic) IMAStreamManager *streamManager;
@property(nonatomic) AVPlayerViewController *playerViewController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
[self setupAdsLoader];
// Create a stream video player.
AVPlayer *player = [[AVPlayer alloc] init];
self.playerViewController = [[AVPlayerViewController alloc] init];
self.playerViewController.player = player;
// Attach the video player to the view hierarchy.
[self addChildViewController:self.playerViewController];
self.playerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.playerViewController.view];
[self.playerViewController didMoveToParentViewController:self];
[self attachAdContainer];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self requestStream];
}
- (void)setupAdsLoader {}
- (void)attachAdContainer {}
- (void)requestStream {}
@end
IMAAdsLoader বাস্তবায়ন করুন
এরপর, IMAAdsLoader ইনস্ট্যান্ট করুন এবং ভিউ হায়ারার্কির সাথে বিজ্ঞাপন কন্টেইনার ভিউ সংযুক্ত করুন।
ভিউকন্ট্রোলার.এম
- (void)setupAdsLoader {
self.adsLoader = [[IMAAdsLoader alloc] init];
self.adsLoader.delegate = self;
}
- (void)attachAdContainer {
self.adContainerView = [[UIView alloc] init];
[self.view addSubview:self.adContainerView];
self.adContainerView.frame = self.view.bounds;
}
একটি স্ট্রিম অনুরোধ করুন
স্ট্রিম তথ্য ধরে রাখার জন্য কয়েকটি ধ্রুবক তৈরি করুন এবং তারপর অনুরোধটি করার জন্য স্ট্রিম অনুরোধ ফাংশনটি বাস্তবায়ন করুন।
ভিউকন্ট্রোলার.এম
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
static NSString *const kAssetKey = @"sN_IYUG8STe1ZzhIIE_ksA";
static NSString *const kContentSourceID = @"2548831";
static NSString *const kVideoID = @"tears-of-steel";
static NSString *const kNetworkCode = @"21775744923";
@interface ViewController ()
...
- (void)requestStream {
IMAAVPlayerVideoDisplay *videoDisplay =
[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.playerViewController.player];
IMAAdDisplayContainer *adDisplayContainer =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.adContainerView];
IMALiveStreamRequest *request = [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey
networkCode:kNetworkCode
adDisplayContainer:adDisplayContainer
videoDisplay:videoDisplay];
// VOD request. Comment out the IMALiveStreamRequest above and uncomment this IMAVODStreamRequest
// to switch from a livestream to a VOD stream.
// IMAVODStreamRequest *request =
// [[IMAVODStreamRequest alloc] initWithContentSourceId:kContentSourceID
// videoId:kVideoID
// networkCode:kNetworkCode
// adDisplayContainer:adDisplayContainer
// videoDisplay:videoDisplay];
[self.adsLoader requestStreamWithRequest:request];
}
স্ট্রিম ইভেন্টগুলি পরিচালনা করুন
IMAAdsLoader এবং IMAStreamManager ইভেন্টগুলিকে ফায়ার করে যা স্ট্রিম স্টেটের ইনিশিয়ালাইজেশন, ত্রুটি এবং পরিবর্তনগুলি পরিচালনা করতে ব্যবহৃত হয়। এই ইভেন্টগুলি IMAAdsLoaderDelegate এবং IMAStreamManagerDelegate প্রোটোকলের মাধ্যমে ফায়ার করা হয়। বিজ্ঞাপন লোড করা ইভেন্টটি শুনুন এবং স্ট্রিমটি ইনিশিয়ালাইজ করুন। যদি কোনও বিজ্ঞাপন লোড না হয়, তাহলে পরিবর্তে একটি ব্যাকআপ স্ট্রিম চালান।
ভিউকন্ট্রোলার.এম
static NSString *const kAssetKey = @"sN_IYUG8STe1ZzhIIE_ksA";
static NSString *const kContentSourceID = @"2548831";
static NSString *const kVideoID = @"tears-of-steel";
static NSString *const kNetworkCode = @"21775744923";
static NSString *const kBackupStreamURLString =
@"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
[self.adsLoader requestStreamWithRequest:request];
}
- (void)playBackupStream {
NSURL *backupStreamURL = [NSURL URLWithString:kBackupStreamURLString];
AVPlayerItem *backupStreamItem = [AVPlayerItem playerItemWithURL:backupStreamURL];
[self.playerViewController.player replaceCurrentItemWithPlayerItem:backupStreamItem];
[self.playerViewController.player play];
}
#pragma mark - IMAAdsLoaderDelegate
- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
// Initialize and listen to stream manager's events.
self.streamManager = adsLoadedData.streamManager;
self.streamManager.delegate = self;
[self.streamManager initializeWithAdsRenderingSettings:nil];
NSLog(@"Stream created with: %@.", self.streamManager.streamId);
}
- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
// Fall back to playing the backup stream.
NSLog(@"Error loading ads: %@", adErrorData.adError.message);
[self playBackupStream];
}
#pragma mark - IMAStreamManagerDelegate
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {}
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {}
- (void)streamManager:(IMAStreamManager *)streamManager
adDidProgressToTime:(NSTimeInterval)time
adDuration:(NSTimeInterval)adDuration
adPosition:(NSInteger)adPosition
totalAds:(NSInteger)totalAds
adBreakDuration:(NSTimeInterval)adBreakDuration {}
@end
লগিং এবং ত্রুটির ঘটনাগুলি পরিচালনা করুন
স্ট্রিম ম্যানেজার ডেলিগেট দ্বারা বেশ কিছু ইভেন্ট পরিচালনা করা যেতে পারে, তবে মৌলিক বাস্তবায়নের জন্য, সবচেয়ে গুরুত্বপূর্ণ ব্যবহার হল ইভেন্ট লগিং করা, বিজ্ঞাপন চালানোর সময় সিক অ্যাকশন প্রতিরোধ করা এবং ত্রুটিগুলি পরিচালনা করা।
ভিউকন্ট্রোলার.এম
#pragma mark - IMAStreamManagerDelegate
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
NSLog(@"StreamManager event (%@).", event.typeString);
switch (event.type) {
case kIMAAdEvent_STARTED: {
// Log extended data.
NSString *extendedAdPodInfo = [[NSString alloc]
initWithFormat:@"Showing ad %zd/%zd, bumper: %@, title: %@, description: %@, contentType:"
@"%@, pod index: %zd, time offset: %lf, max duration: %lf.",
event.ad.adPodInfo.adPosition, event.ad.adPodInfo.totalAds,
event.ad.adPodInfo.isBumper ? @"YES" : @"NO", event.ad.adTitle,
event.ad.adDescription, event.ad.contentType, event.ad.adPodInfo.podIndex,
event.ad.adPodInfo.timeOffset, event.ad.adPodInfo.maxDuration];
NSLog(@"%@", extendedAdPodInfo);
break;
}
case kIMAAdEvent_AD_BREAK_STARTED: {
// Prevent user seek through when an ad starts and show the ad controls.
self.adContainerView.hidden = NO;
break;
}
case kIMAAdEvent_AD_BREAK_ENDED: {
// Allow user seek through after an ad ends and hide the ad controls.
self.adContainerView.hidden = YES;
break;
}
default:
break;
}
}
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {
// Fall back to playing the backup stream.
NSLog(@"StreamManager error: %@", error.message);
[self playBackupStream];
}
@end
ব্যস! আপনি এখন IMA DAI SDK ব্যবহার করে বিজ্ঞাপনের অনুরোধ করছেন এবং প্রদর্শন করছেন। আরও উন্নত SDK বৈশিষ্ট্য সম্পর্কে জানতে, GitHub-এর অন্যান্য নির্দেশিকা বা নমুনাগুলি দেখুন।

