IMA SDK আপনার ওয়েবসাইট ও অ্যাপে মাল্টিমিডিয়া বিজ্ঞাপন ইন্টিগ্রেট করা সহজ করে তোলে। IMA SDK যেকোনও VAST-এর সাথে মানানসই বিজ্ঞাপন সার্ভার থেকে বিজ্ঞাপনের অনুরোধ করতে এবং আপনার অ্যাপে বিজ্ঞাপন প্লেব্যাক ম্যানেজ করতে পারে। IMA ক্লায়েন্ট-সাইড SDK-এর সাহায্যে, আপনি কন্টেন্ট ভিডিও প্লেব্যাকের নিয়ন্ত্রণ বজায় রাখেন, তবে SDK বিজ্ঞাপন প্লেব্যাক ম্যানেজ করে। অ্যাপের কন্টেন্ট ভিডিও প্লেয়ারের উপরে অবস্থিত একটি আলাদা ভিডিও প্লেয়ারে বিজ্ঞাপন চালানো হয়।
এই নির্দেশিকা থেকে আপনি জানতে পারবেন যে কীভাবে ExoPlayer IMA এক্সটেনশন ব্যবহার করে একটি খালি Android Studio প্রোজেক্টে IMA SDK ইন্টিগ্রেট করতে হয়। আপনি যদি সম্পূর্ণ নমুনা ইন্টিগ্রেশন দেখতে বা অনুসরণ করতে চান, তাহলে GitHub থেকে BasicExample ডাউনলোড করুন।
IMA ক্লায়েন্ট-সাইড ওভারভিউ
IMA ক্লায়েন্ট-সাইড প্রয়োগের মধ্যে চারটি প্রধান SDK কম্পোনেন্ট থাকে, যা এই নির্দেশিকায় দেখানো হয়েছে:
AdDisplayContainer: একটি কন্টেনার অবজেক্ট যা নির্দিষ্ট করে যে IMA কোথায় বিজ্ঞাপন UI এলিমেন্ট রেন্ডার করে এবং ভিউয়েবিলিটি পরিমাপ করে, এর মধ্যে অ্যাক্টিভ ভিউ এবং ওপেন মেজারমেন্ট অন্তর্ভুক্ত।AdsLoader: বিজ্ঞাপনের অনুরোধ করে এবং বিজ্ঞাপনের অনুরোধের উত্তর থেকে ইভেন্ট ম্যানেজ করে এমন একটি অবজেক্ট। আপনাকে শুধুমাত্র একটি বিজ্ঞাপন লোডার ইনস্ট্যানশিয়েট করতে হবে, যা অ্যাপ্লিকেশন চলাকালীন বারবার ব্যবহার করা যেতে পারে।AdsRequest: বিজ্ঞাপনের অনুরোধকে সংজ্ঞায়িত করে এমন একটি অবজেক্ট। বিজ্ঞাপনের অনুরোধে VAST বিজ্ঞাপন ট্যাগের URL এবং বিজ্ঞাপনের ডাইমেনশনের মতো অতিরিক্ত প্যারামিটার উল্লেখ করা থাকে।AdsManager: বিজ্ঞাপনের অনুরোধের উত্তর, বিজ্ঞাপন প্লেব্যাক নিয়ন্ত্রণ করে এবং SDK-এর মাধ্যমে ফায়ার করা বিজ্ঞাপন ইভেন্ট শোনার জন্য একটি অবজেক্ট।
পূর্বশর্ত
শুরু করার আগে, আপনার Android Studio 3.0 বা তার পরবর্তী যেকোনও ভার্সন প্রয়োজন।
১. নতুন Android Studio প্রোজেক্ট তৈরি করা
আপনার Android Studio প্রোজেক্ট তৈরি করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
- Android Studio চালু করুন।
- নতুন Android Studio প্রোজেক্ট শুরু করুন বিকল্প বেছে নিন।
- আপনার প্রোজেক্ট বেছে নিন পৃষ্ঠায়, খালি অ্যাক্টিভিটি টেমপ্লেট বেছে নিন।
- পরবর্তী বিকল্পে ক্লিক করুন।
- আপনার প্রোজেক্ট কনফিগার করুন পৃষ্ঠায়, আপনার প্রোজেক্টের নাম দিন এবং ভাষা হিসেবে Java বেছে নিন।
- সম্পূর্ণ করুন বিকল্প বেছে নিন।
২. আপনার প্রোজেক্টে ExoPlayer IMA এক্সটেনশন যোগ করুন
প্রথমে, অ্যাপ্লিকেশন-লেভেল build.gradle ফাইলে, এক্সটেনশনের জন্য ইমপোর্ট যোগ করুন
ডিপেন্ডেন্সি বিভাগে। এছাড়াও, Java ভার্সনের কম্প্যাটিবিলিটি সংক্রান্ত তথ্য নির্দিষ্ট করতে
নতুন compileOptions যোগ করুন।
apply plugin: 'com.android.application' android { namespace = 'com.google.ads.interactivemedia.v3.samples.exoplayerexample' compileSdk = 36 compileOptions { // Required by IMA SDK v3.37.0+ coreLibraryDesugaringEnabled = true // Java 17 required by Gradle 8+ sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } defaultConfig { applicationId = "com.google.ads.interactivemedia.v3.samples.exoplayerexample" minSdkVersion(24) targetSdkVersion(36) versionCode = 1 versionName = "1.0" } buildTypes { release { minifyEnabled = true proguardFiles(getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro') } } } repositories { google() mavenCentral() } dependencies { def media3_version = "1.11.0" coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:2.1.5') implementation("androidx.media3:media3-ui:$media3_version") implementation("androidx.media3:media3-exoplayer:$media3_version") // The library adds the IMA ExoPlayer integration for ads. implementation("androidx.media3:media3-exoplayer-ima:$media3_version") }
৩. বিজ্ঞাপন UI কন্টেনার তৈরি করা
ExoPlayer PlayerView হিসেবে ব্যবহার করার জন্য ভিউ তৈরি করুন, এর জন্য
androidx.media3.ui.PlayerView তৈরি করুন। এছাড়াও, androidx.constraintlayout.widget.ConstraintLayout-কে পরিবর্তন করে LinearLayout করুন।
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MyActivity" tools:ignore="MergeRootFrame"> <androidx.media3.ui.PlayerView android:id="@+id/player_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!-- UI element for viewing SDK event log --> <TextView android:id="@+id/logText" android:gravity="bottom" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="100" android:scrollbars="vertical" android:textSize="@dimen/font_size"> </TextView> </LinearLayout>
৪. ExoPlayer IMA এক্সটেনশন ইমপোর্ট করা
ExoPlayer এক্সটেনশনের জন্য ইমপোর্ট স্টেটমেন্ট যোগ করুন:
import android.annotation.SuppressLint; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.text.method.ScrollingMovementMethod; import android.util.Log; import android.widget.TextView; import androidx.media3.common.MediaItem; import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DefaultDataSource; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ima.ImaAdsLoader; import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.ui.PlayerView; import com.google.ads.interactivemedia.v3.api.AdEvent; import com.google.ads.interactivemedia.v3.api.ImaSdkFactory; import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
তারপর, Activity এক্সটেন্ড করতে MainActivity ক্লাস আপডেট করুন এবং PlayerView, ExoPlayer,
ImaAdsLoader ও ImaSdkSettings-এর জন্য
প্রাইভেট ভেরিয়েবল যোগ করুন:
/** Main Activity. */ @SuppressLint("UnsafeOptInUsageError") /* @SuppressLint is needed for new media3 APIs. */ public class MyActivity extends Activity { private static final String SAMPLE_VIDEO_URL = "https://storage.googleapis.com/gvabox/media/samples/stock.mp4"; private static final String SAMPLE_VAST_TAG_URL = "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/" + "single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90" + "&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&correlator="; private static final String LOG_TAG = "ImaExoPlayerExample"; private PlayerView playerView; private TextView logText; private ExoPlayer player; private ImaAdsLoader adsLoader; private ImaSdkSettings imaSdkSettings;
৫. adsLoader ইনস্ট্যান্স তৈরি করা
onCreate মেথড ওভাররাইট করুন এবং বিজ্ঞাপন ট্যাগ URL সহ একটি
নতুন adsLoader অবজেক্ট তৈরি করতে প্রয়োজনীয় ভেরিয়েবল অ্যাসাইনমেন্ট যোগ করুন।
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); // Initialize the IMA SDK as early as possible when the app starts. If your app already // overrides Application.onCreate(), call this method inside the onCreate() method. // https://developer.android.com/topic/performance/vitals/launch-time#app-creation ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings()); playerView = findViewById(R.id.player_view); // Create an AdsLoader. adsLoader = new ImaAdsLoader.Builder(/* context= */ this) .setAdEventListener(buildAdEventListener()) .setImaSdkSettings(getImaSdkSettings()) .build(); }
ডিবাগ করার জন্য IMA ইভেন্ট লগ করতে AdEventListener
অবজেক্ট ফিরিয়ে আনতে buildAdEventListener() পদ্ধতি তৈরি করুন। ExoPlayer IMA এক্সটেনশন আগেই IMA ইভেন্ট ম্যানেজ করে
এবং কাজ করার জন্য এখানে অতিরিক্ত কিছু প্রয়োজন হয় না।
public AdEvent.AdEventListener buildAdEventListener() { logText = findViewById(R.id.logText); logText.setMovementMethod(new ScrollingMovementMethod()); return event -> { AdEvent.AdEventType eventType = event.getType(); if (eventType == AdEvent.AdEventType.AD_PROGRESS) { return; } String log = "IMA event: " + eventType; if (logText != null) { logText.append(log + "\n"); } Log.i(LOG_TAG, log); }; }
যেকোনও IMA SDK সেটিংস সেট করতে, একটি ImaSdkSettings অবজেক্ট রিটার্ন করার জন্য getImaSdkSettings() হেল্পার পদ্ধতি তৈরি করুন:
private ImaSdkSettings getImaSdkSettings() { if (imaSdkSettings == null) { imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings(); // Set any IMA SDK settings here. } return imaSdkSettings; }
৬. প্লেয়ার শুরু ও রিলিজ করা
প্লেয়ার রিলিজ ও ইনিশিয়ালাইজ করার পদ্ধতি যোগ করুন। initializePlayer()
পদ্ধতিতে, ExoPlayer তৈরি করুন। তারপর, AdsMediaSource
তৈরি করে প্লেয়ারে সেট করুন:
private void releasePlayer() { adsLoader.setPlayer(null); playerView.setPlayer(null); player.release(); player = null; } private void initializePlayer() { // Set up the factory for media sources, passing the ads loader and ad view providers. DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(this); MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(dataSourceFactory) .setLocalAdInsertionComponents(unusedAdTagUri -> adsLoader, playerView); // Create an ExoPlayer and set it as the player for content and ads. player = new ExoPlayer.Builder(this).setMediaSourceFactory(mediaSourceFactory).build(); playerView.setPlayer(player); adsLoader.setPlayer(player); // Create the MediaItem to play, specifying the content URI and ad tag URI. Uri contentUri = Uri.parse(SAMPLE_VIDEO_URL); Uri adTagUri = Uri.parse(SAMPLE_VAST_TAG_URL); MediaItem mediaItem = new MediaItem.Builder() .setUri(contentUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build(); // Prepare the content and ad to be played with the SimpleExoPlayer. player.setMediaItem(mediaItem); player.prepare(); // Set PlayWhenReady. If true, content and ads will autoplay. player.setPlayWhenReady(false); }
৭. প্লেয়ার ইভেন্ট ম্যানেজ করা
সবশেষে, প্লেয়ারের লাইফসাইকেল ইভেন্টের জন্য কলব্যাক তৈরি করুন:
onStartonResumeonStoponPauseonDestroy
@Override public void onStart() { super.onStart(); initializePlayer(); if (playerView != null) { playerView.onResume(); } } @Override public void onResume() { super.onResume(); if (player == null) { initializePlayer(); if (playerView != null) { playerView.onResume(); } } } @Override public void onPause() { super.onPause(); } @Override public void onStop() { super.onStop(); if (playerView != null) { playerView.onPause(); } releasePlayer(); } @Override protected void onDestroy() { adsLoader.release(); super.onDestroy(); }
আপনি এখন IMA SDK-এর মাধ্যমে সফলভাবে বিজ্ঞাপন অনুরোধ ও ডিসপ্লে করছেন। আরও উন্নত ফিচার সম্পর্কে জানতে, অন্যান্য নির্দেশিকা বা GitHub-এ স্যাম্পেল দেখুন।