অ্যাপ খুলুন বিজ্ঞাপন

এই নির্দেশিকাটি প্রকাশকদের জন্য তৈরি করা হয়েছে যারা Google মোবাইল বিজ্ঞাপন SDK ব্যবহার করে অ্যাপ খোলা বিজ্ঞাপনগুলিকে একীভূত করে।

অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপনগুলি যে কোনও সময় বন্ধ করা যেতে পারে এবং আপনার ব্যবহারকারীরা যখন আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন দেখানোর জন্য ডিজাইন করা হয়েছে৷

অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

পরীক্ষার বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যাপ খোলা বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

ca-app-pub-3940256099942544/9257395921

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটিকে আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

Google মোবাইল বিজ্ঞাপন SDK-এর পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি সক্ষম করুন দেখুন৷

অ্যাপ্লিকেশন ক্লাস প্রসারিত করুন

একটি নতুন ক্লাস তৈরি করুন যা Application ক্লাসকে প্রসারিত করে এবং আপনার অ্যাপ শুরু হওয়ার সময় Google মোবাইল বিজ্ঞাপন SDK শুরু করতে নিম্নলিখিত কোডটি যোগ করুন।

জাভা

/** Application class that initializes, loads and show ads when activities change states. */
public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
  }
}

কোটলিন

/** Application class that initializes, loads and show ads when activities change states. */
class MyApplication : Application() {

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
  }
}

এটি SDK সূচনা করে এবং কঙ্কাল প্রদান করে যেখানে আপনি পরে অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টগুলির জন্য নিবন্ধন করবেন।

এরপর, আপনার AndroidManifest.xml এ নিম্নলিখিত কোড যোগ করুন:

<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>

আপনার ইউটিলিটি উপাদান বাস্তবায়ন

আপনার বিজ্ঞাপনটি দ্রুত দেখানো উচিত, তাই আপনার বিজ্ঞাপনটি প্রদর্শন করার আগে লোড করা ভাল। এইভাবে, আপনার ব্যবহারকারী আপনার অ্যাপে প্রবেশ করার সাথে সাথে আপনার কাছে একটি বিজ্ঞাপন তৈরি হবে।

আপনার বিজ্ঞাপন দেখানোর আগে বিজ্ঞাপনের অনুরোধ করার জন্য একটি ইউটিলিটি উপাদান AppOpenAdManager প্রয়োগ করুন।

জাভা

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private class AppOpenAdManager {
    private static final String LOG_TAG = "AppOpenAdManager";
    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";

    private AppOpenAd appOpenAd = null;
    private boolean isLoadingAd = false;
    private boolean isShowingAd = false;

    /** Constructor. */
    public AppOpenAdManager() {}

    /** Request an ad. */
    private void loadAd(Context context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private boolean isAdAvailable() {
      return appOpenAd != null;
    }
  }
}

কোটলিন

private const val String LOG_TAG = "AppOpenAdManager"
private const val String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921"

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private inner class AppOpenAdManager {
    private var appOpenAd: AppOpenAd? = null
    private var isLoadingAd = false
    var isShowingAd = false

    /** Request an ad. */
    fun loadAd(context: Context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private fun isAdAvailable(): Boolean {
      return appOpenAd != null
    }
  }
}

এখন আপনার একটি ইউটিলিটি ক্লাস আছে, আপনি এটিকে আপনার MyApplication ক্লাসে ইনস্ট্যান্টিয়েট করতে পারেন:

জাভা

public class MyApplication extends Application {

  private AppOpenAdManager appOpenAdManager;

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    appOpenAdManager = new AppOpenAdManager(this);
  }
}

কোটলিন

class MyApplication : Application() {

  private lateinit var appOpenAdManager: AppOpenAdManager

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    appOpenAdManager = AppOpenAdManager()
  }
}

একটি বিজ্ঞাপন লোড করুন

পরবর্তী ধাপ হল loadAd() পদ্ধতিটি পূরণ করা এবং বিজ্ঞাপন লোড কলব্যাকগুলি পরিচালনা করা।

জাভা

private class AppOpenAdManager {
  // ...
  /** Request an ad. */
  public void loadAd(Context context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return;
    }

    isLoadingAd = true;
    AdRequest request = new AdRequest.Builder().build();
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        new AppOpenAdLoadCallback() {
          @Override
          public void onAdLoaded(AppOpenAd ad) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.");
            appOpenAd = ad;
            isLoadingAd = false;
            loadTime = (new Date()).getTime();
          }

          @Override
          public void onAdFailedToLoad(LoadAdError loadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.getMessage());
            isLoadingAd = false;
          }
        });
  }
  // ...
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Request an ad. */
  fun loadAd(context: Context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return
    }

    isLoadingAd = true
    val request = AdRequest.Builder().build()
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        object : AppOpenAdLoadCallback() {

          override fun onAdLoaded(ad: AppOpenAd) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.")
            appOpenAd = ad
            isLoadingAd = false
            loadTime = Date().time
          }

          override fun onAdFailedToLoad(loadAdError: LoadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.message)
            isLoadingAd = false;
          }
        })
  }
  // ...
}

বিজ্ঞাপন দেখান এবং পূর্ণস্ক্রীন কলব্যাক ইভেন্টগুলি পরিচালনা করুন

সবচেয়ে সাধারণ অ্যাপ ওপেন ইমপ্লিমেন্টেশন হল অ্যাপ লঞ্চের কাছাকাছি একটি অ্যাপ খোলা বিজ্ঞাপন দেখানোর চেষ্টা করা, বিজ্ঞাপনটি প্রস্তুত না হলে অ্যাপ কন্টেন্ট শুরু করা এবং পরবর্তী অ্যাপ খোলার সুযোগের জন্য অন্য একটি বিজ্ঞাপন প্রিলোড করা। প্রয়োগের উদাহরণের জন্য অ্যাপ খোলা বিজ্ঞাপন নির্দেশিকা দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি বিজ্ঞাপন দেখাতে হয় এবং পরবর্তীতে পুনরায় লোড করতে হয়:

জাভা

public class MyApplication extends Application {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  public interface OnShowAdCompleteListener {
    void onShowAdComplete();
  }

  private class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    public void showAdIfAvailable(
        @NonNull final Activity activity,
        @NonNull OnShowAdCompleteListener onShowAdCompleteListener){
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.");
        return;
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.");
        onShowAdCompleteListener.onShowAdComplete();
        loadAd(activity);
        return;
      }

      appOpenAd.setFullScreenContentCallback(
          new FullScreenContentCallback() {

            @Override
            public void onAdDismissedFullScreenContent() {
              // Called when fullscreen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.");
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdFailedToShowFullScreenContent(AdError adError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.getMessage());
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.");
            }
          });
      isShowingAd = true;
      appOpenAd.show(activity);
    }
    // ...
  }
}

কোটলিন

class MyApplication : Application() {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  interface OnShowAdCompleteListener {
    fun onShowAdComplete()
  }

  private inner class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    fun showAdIfAvailable(
        activity: Activity,
        onShowAdCompleteListener: OnShowAdCompleteListener) {
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.")
        return
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.")
        onShowAdCompleteListener.onShowAdComplete()
        loadAd(activity)
        return
      }

      appOpenAd?.setFullScreenContentCallback(
          object : FullScreenContentCallback() {

            override fun onAdDismissedFullScreenContent() {
              // Called when full screen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.")
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.message)
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.")
            }
          })
      isShowingAd = true
      appOpenAd?.show(activity)
    }
    // ...
  }
}

FullScreenContentCallback ইভেন্টগুলি পরিচালনা করে যেমন বিজ্ঞাপনটি কখন উপস্থাপিত হয়, উপস্থাপন করতে ব্যর্থ হয় বা যখন এটি খারিজ হয়।

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার কথা বিবেচনা করুন

আপনি একটি মেয়াদোত্তীর্ণ বিজ্ঞাপন প্রদর্শন করবেন না তা নিশ্চিত করতে, AppOpenAdManager এ একটি পদ্ধতি যোগ করুন যা আপনার বিজ্ঞাপনের রেফারেন্স লোড হওয়ার পর কতক্ষণ হয়েছে তা পরীক্ষা করে। তারপর, বিজ্ঞাপনটি এখনও বৈধ কিনা তা পরীক্ষা করতে সেই পদ্ধতিটি ব্যবহার করুন৷

জাভা

private class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
    long dateDifference = (new Date()).getTime() - this.loadTime;
    long numMilliSecondsPerHour = 3600000;
    return (dateDifference < (numMilliSecondsPerHour * numHours));
  }

  /** Check if ad exists and can be shown. */
  public boolean isAdAvailable() {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
  }
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
    val dateDifference: Long = Date().time - loadTime
    val numMilliSecondsPerHour: Long = 3600000
    return dateDifference < numMilliSecondsPerHour * numHours
  }

  /** Check if ad exists and can be shown. */
  private fun isAdAvailable(): Boolean {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
  }
}

বর্তমান কার্যকলাপ ট্র্যাক রাখুন

বিজ্ঞাপনটি দেখানোর জন্য, আপনার একটি Activity প্রসঙ্গ প্রয়োজন হবে। ব্যবহার করা হচ্ছে সবচেয়ে বর্তমান কার্যকলাপের ট্র্যাক রাখতে, Application.ActivityLifecycleCallbacks জন্য নিবন্ধন করুন এবং বাস্তবায়ন করুন।

জাভা

public class MyApplication extends Application implements ActivityLifecycleCallbacks {

  private Activity currentActivity;

  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

  @Override
  public void onActivityStarted(Activity activity) {
    currentActivity = activity
  }

  @Override
  public void onActivityResumed(Activity activity) {}

  @Override
  public void onActivityStopped(Activity activity) {}

  @Override
  public void onActivityPaused(Activity activity) {}

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}

  @Override
  public void onActivityDestroyed(Activity activity) {}
}

কোটলিন

class MyApplication : Application(), Application.ActivityLifecycleCallbacks {

  private var currentActivity: Activity? = null

  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

  override fun onActivityStarted(activity: Activity) {
    currentActivity = activity
  }

  override fun onActivityResumed(activity: Activity) {}

  override fun onActivityPaused(activity: Activity) {}

  override fun onActivityStopped(activity: Activity) {}

  override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

  override fun onActivityDestroyed(activity: Activity) {}
}

registerActivityLifecycleCallbacks আপনাকে সমস্ত Activity ইভেন্ট শুনতে দেয়। কখন ক্রিয়াকলাপগুলি শুরু এবং ধ্বংস করা হয় তা শুনে, আপনি বর্তমান Activity একটি রেফারেন্স ট্র্যাক রাখতে পারেন, যা আপনি আপনার অ্যাপ খোলা বিজ্ঞাপন উপস্থাপনে ব্যবহার করবেন৷

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের জন্য শুনুন

আপনার গ্রেডল ফাইলে লাইব্রেরি যোগ করুন

অ্যাপের ফোরগ্রাউন্ডিং ইভেন্ট সম্পর্কে অবহিত হতে, আপনাকে একটি DefaultLifecycleObserver নিবন্ধন করতে হবে। আপনার অ্যাপ-স্তরের বিল্ড ফাইলে এর নির্ভরতা যোগ করুন:

কোটলিন

  dependencies {
    implementation("com.google.android.gms:play-services-ads:23.3.0")
    implementation("androidx.lifecycle:lifecycle-process:2.8.3")
  }

গ্রোভি

  dependencies {
    implementation 'com.google.android.gms:play-services-ads:23.3.0'
    implementation 'androidx.lifecycle:lifecycle-process:2.8.3'
  }

জীবনচক্র পর্যবেক্ষক ইন্টারফেস বাস্তবায়ন

আপনি DefaultLifecycleObserver ইন্টারফেস প্রয়োগ করে ফোরগ্রাউন্ডিং ইভেন্ট শুনতে পারেন।

অ্যাপ খোলা বিজ্ঞাপন দেখানোর জন্য onStart ইভেন্টটি প্রয়োগ করুন।

জাভা

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Event.ON_START)
  protected void onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(currentActivity);
  }

  /** Show the ad if one isn't already showing. */
  private void showAdIfAvailable(@NonNull final Activity activity) {
      showAdIfAvailable(
          activity,
          new OnShowAdCompleteListener() {
            @Override
            public void onShowAdComplete() {
              // Empty because the user will go back to the activity that shows the ad.
            }
          });
  }
}

কোটলিন

class MyApplication : Application(),
    Application.ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Lifecycle.Event.ON_START)
  fun onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    currentActivity?.let {
      appOpenAdManager.showAdIfAvailable(it)
    }
  }

  /** Show the ad if one isn't already showing. */
  fun showAdIfAvailable(activity: Activity) {
    showAdIfAvailable(
        activity,
        object : OnShowAdCompleteListener {
          override fun onShowAdComplete() {
            // Empty because the user will go back to the activity that shows the ad.
          }
        })
  }
}

ঠান্ডা শুরু এবং পর্দা লোড হচ্ছে

ডকুমেন্টেশনটি এখন পর্যন্ত অনুমান করে যে আপনি শুধুমাত্র অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান যখন ব্যবহারকারীরা আপনার অ্যাপটি মেমরিতে সাসপেন্ড করা থাকে "কোল্ড স্টার্ট" ঘটে যখন আপনার অ্যাপ চালু হয় কিন্তু আগে মেমরিতে সাসপেন্ড করা হয়নি।

একটি কোল্ড স্টার্টের উদাহরণ হল যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ খোলেন। ঠান্ডা শুরু হলে, আপনার কাছে আগে লোড করা কোনো অ্যাপ খোলা বিজ্ঞাপন থাকবে না যা এখনই দেখানোর জন্য প্রস্তুত। আপনি যখন একটি বিজ্ঞাপনের অনুরোধ করেন এবং একটি বিজ্ঞাপন ফেরত পান তখন এর মধ্যে দেরি এমন একটি পরিস্থিতি তৈরি করতে পারে যেখানে ব্যবহারকারীরা একটি প্রেক্ষাপটের বাইরের বিজ্ঞাপনে অবাক হওয়ার আগে আপনার অ্যাপটি সংক্ষিপ্তভাবে ব্যবহার করতে সক্ষম হয়। এটি এড়ানো উচিত কারণ এটি একটি খারাপ ব্যবহারকারীর অভিজ্ঞতা।

কোল্ড স্টার্টে অ্যাপ খোলা বিজ্ঞাপনগুলি ব্যবহার করার পছন্দের উপায় হল আপনার গেম বা অ্যাপ সম্পদগুলি লোড করার জন্য একটি লোডিং স্ক্রীন ব্যবহার করা এবং শুধুমাত্র লোডিং স্ক্রীন থেকে বিজ্ঞাপন দেখানো। যদি আপনার অ্যাপ লোডিং সম্পন্ন করে থাকে এবং ব্যবহারকারীকে আপনার অ্যাপের মূল বিষয়বস্তুতে পাঠিয়ে থাকে, তাহলে বিজ্ঞাপনটি দেখাবেন না।

সর্বোত্তম অনুশীলন

অ্যাপ খোলার বিজ্ঞাপনগুলি আপনাকে আপনার অ্যাপের লোডিং স্ক্রীন নগদীকরণ করতে সাহায্য করে, যখন অ্যাপটি প্রথম চালু হয় এবং অ্যাপ স্যুইচ করার সময়, তবে আপনার ব্যবহারকারীরা যাতে আপনার অ্যাপ ব্যবহার করে উপভোগ করতে পারে সেজন্য সর্বোত্তম অনুশীলনগুলি মাথায় রাখা গুরুত্বপূর্ণ। এটি করা সর্বোত্তম:

  • আপনার ব্যবহারকারীরা আপনার অ্যাপটি কয়েকবার ব্যবহার করার পরে আপনার প্রথম অ্যাপ খোলার বিজ্ঞাপন দেখান।
  • যখন আপনার ব্যবহারকারীরা অন্যথায় আপনার অ্যাপ লোড হওয়ার জন্য অপেক্ষা করবে তখন অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান।
  • আপনার যদি অ্যাপ ওপেন অ্যাডের অধীনে একটি লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি খারিজ হওয়ার আগে আপনার লোডিং স্ক্রিন লোডিং সম্পূর্ণ করে, তাহলে আপনি onAdDismissedFullScreenContent() পদ্ধতিতে আপনার লোডিং স্ক্রীনটি খারিজ করতে চাইতে পারেন।

গিটহাবের উদাহরণ

পরবর্তী পদক্ষেপ

নিম্নলিখিত বিষয়গুলি অন্বেষণ করুন:

,

এই নির্দেশিকাটি প্রকাশকদের জন্য তৈরি করা হয়েছে যারা Google মোবাইল বিজ্ঞাপন SDK ব্যবহার করে অ্যাপ খোলা বিজ্ঞাপনগুলিকে একীভূত করে।

অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপনগুলি যে কোনও সময় বন্ধ করা যেতে পারে এবং আপনার ব্যবহারকারীরা যখন আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন দেখানোর জন্য ডিজাইন করা হয়েছে৷

অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

পরীক্ষার বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যাপ খোলা বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

ca-app-pub-3940256099942544/9257395921

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটিকে আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

Google মোবাইল বিজ্ঞাপন SDK-এর পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি সক্ষম করুন দেখুন৷

অ্যাপ্লিকেশন ক্লাস প্রসারিত করুন

একটি নতুন ক্লাস তৈরি করুন যা Application ক্লাসকে প্রসারিত করে এবং আপনার অ্যাপ শুরু হওয়ার সময় Google মোবাইল বিজ্ঞাপন SDK শুরু করতে নিম্নলিখিত কোডটি যোগ করুন।

জাভা

/** Application class that initializes, loads and show ads when activities change states. */
public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
  }
}

কোটলিন

/** Application class that initializes, loads and show ads when activities change states. */
class MyApplication : Application() {

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
  }
}

এটি SDK শুরু করে এবং কঙ্কাল প্রদান করে যেখানে আপনি পরে অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টগুলির জন্য নিবন্ধন করবেন।

এরপর, আপনার AndroidManifest.xml এ নিম্নলিখিত কোড যোগ করুন:

<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>

আপনার ইউটিলিটি উপাদান বাস্তবায়ন

আপনার বিজ্ঞাপনটি দ্রুত দেখানো উচিত, তাই আপনার বিজ্ঞাপনটি প্রদর্শন করার আগে লোড করা ভাল। এইভাবে, আপনার ব্যবহারকারী আপনার অ্যাপে প্রবেশ করার সাথে সাথে আপনার কাছে একটি বিজ্ঞাপন তৈরি হবে।

আপনার বিজ্ঞাপন দেখানোর আগে বিজ্ঞাপনের অনুরোধ করার জন্য একটি ইউটিলিটি উপাদান AppOpenAdManager প্রয়োগ করুন।

জাভা

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private class AppOpenAdManager {
    private static final String LOG_TAG = "AppOpenAdManager";
    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";

    private AppOpenAd appOpenAd = null;
    private boolean isLoadingAd = false;
    private boolean isShowingAd = false;

    /** Constructor. */
    public AppOpenAdManager() {}

    /** Request an ad. */
    private void loadAd(Context context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private boolean isAdAvailable() {
      return appOpenAd != null;
    }
  }
}

কোটলিন

private const val String LOG_TAG = "AppOpenAdManager"
private const val String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921"

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private inner class AppOpenAdManager {
    private var appOpenAd: AppOpenAd? = null
    private var isLoadingAd = false
    var isShowingAd = false

    /** Request an ad. */
    fun loadAd(context: Context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private fun isAdAvailable(): Boolean {
      return appOpenAd != null
    }
  }
}

এখন আপনার একটি ইউটিলিটি ক্লাস আছে, আপনি এটিকে আপনার MyApplication ক্লাসে ইনস্ট্যান্টিয়েট করতে পারেন:

জাভা

public class MyApplication extends Application {

  private AppOpenAdManager appOpenAdManager;

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    appOpenAdManager = new AppOpenAdManager(this);
  }
}

কোটলিন

class MyApplication : Application() {

  private lateinit var appOpenAdManager: AppOpenAdManager

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    appOpenAdManager = AppOpenAdManager()
  }
}

একটি বিজ্ঞাপন লোড করুন

পরবর্তী ধাপ হল loadAd() পদ্ধতিটি পূরণ করা এবং বিজ্ঞাপন লোড কলব্যাকগুলি পরিচালনা করা।

জাভা

private class AppOpenAdManager {
  // ...
  /** Request an ad. */
  public void loadAd(Context context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return;
    }

    isLoadingAd = true;
    AdRequest request = new AdRequest.Builder().build();
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        new AppOpenAdLoadCallback() {
          @Override
          public void onAdLoaded(AppOpenAd ad) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.");
            appOpenAd = ad;
            isLoadingAd = false;
            loadTime = (new Date()).getTime();
          }

          @Override
          public void onAdFailedToLoad(LoadAdError loadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.getMessage());
            isLoadingAd = false;
          }
        });
  }
  // ...
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Request an ad. */
  fun loadAd(context: Context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return
    }

    isLoadingAd = true
    val request = AdRequest.Builder().build()
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        object : AppOpenAdLoadCallback() {

          override fun onAdLoaded(ad: AppOpenAd) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.")
            appOpenAd = ad
            isLoadingAd = false
            loadTime = Date().time
          }

          override fun onAdFailedToLoad(loadAdError: LoadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.message)
            isLoadingAd = false;
          }
        })
  }
  // ...
}

বিজ্ঞাপন দেখান এবং পূর্ণস্ক্রীন কলব্যাক ইভেন্টগুলি পরিচালনা করুন

সবচেয়ে সাধারণ অ্যাপ ওপেন ইমপ্লিমেন্টেশন হল অ্যাপ লঞ্চের কাছাকাছি একটি অ্যাপ খোলা বিজ্ঞাপন দেখানোর চেষ্টা করা, বিজ্ঞাপনটি প্রস্তুত না হলে অ্যাপ কন্টেন্ট শুরু করা এবং পরবর্তী অ্যাপ খোলার সুযোগের জন্য অন্য একটি বিজ্ঞাপন প্রিলোড করা। প্রয়োগের উদাহরণের জন্য অ্যাপ খোলা বিজ্ঞাপন নির্দেশিকা দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি বিজ্ঞাপন দেখাতে হয় এবং পরবর্তীতে পুনরায় লোড করতে হয়:

জাভা

public class MyApplication extends Application {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  public interface OnShowAdCompleteListener {
    void onShowAdComplete();
  }

  private class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    public void showAdIfAvailable(
        @NonNull final Activity activity,
        @NonNull OnShowAdCompleteListener onShowAdCompleteListener){
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.");
        return;
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.");
        onShowAdCompleteListener.onShowAdComplete();
        loadAd(activity);
        return;
      }

      appOpenAd.setFullScreenContentCallback(
          new FullScreenContentCallback() {

            @Override
            public void onAdDismissedFullScreenContent() {
              // Called when fullscreen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.");
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdFailedToShowFullScreenContent(AdError adError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.getMessage());
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.");
            }
          });
      isShowingAd = true;
      appOpenAd.show(activity);
    }
    // ...
  }
}

কোটলিন

class MyApplication : Application() {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  interface OnShowAdCompleteListener {
    fun onShowAdComplete()
  }

  private inner class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    fun showAdIfAvailable(
        activity: Activity,
        onShowAdCompleteListener: OnShowAdCompleteListener) {
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.")
        return
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.")
        onShowAdCompleteListener.onShowAdComplete()
        loadAd(activity)
        return
      }

      appOpenAd?.setFullScreenContentCallback(
          object : FullScreenContentCallback() {

            override fun onAdDismissedFullScreenContent() {
              // Called when full screen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.")
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.message)
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.")
            }
          })
      isShowingAd = true
      appOpenAd?.show(activity)
    }
    // ...
  }
}

FullScreenContentCallback ইভেন্টগুলি পরিচালনা করে যেমন বিজ্ঞাপনটি কখন উপস্থাপিত হয়, উপস্থাপন করতে ব্যর্থ হয় বা যখন এটি খারিজ হয়।

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার কথা বিবেচনা করুন

আপনি একটি মেয়াদোত্তীর্ণ বিজ্ঞাপন প্রদর্শন করবেন না তা নিশ্চিত করতে, AppOpenAdManager এ একটি পদ্ধতি যোগ করুন যা আপনার বিজ্ঞাপনের রেফারেন্স লোড হওয়ার পর কতক্ষণ হয়েছে তা পরীক্ষা করে। তারপর, বিজ্ঞাপনটি এখনও বৈধ কিনা তা পরীক্ষা করতে সেই পদ্ধতিটি ব্যবহার করুন৷

জাভা

private class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
    long dateDifference = (new Date()).getTime() - this.loadTime;
    long numMilliSecondsPerHour = 3600000;
    return (dateDifference < (numMilliSecondsPerHour * numHours));
  }

  /** Check if ad exists and can be shown. */
  public boolean isAdAvailable() {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
  }
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
    val dateDifference: Long = Date().time - loadTime
    val numMilliSecondsPerHour: Long = 3600000
    return dateDifference < numMilliSecondsPerHour * numHours
  }

  /** Check if ad exists and can be shown. */
  private fun isAdAvailable(): Boolean {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
  }
}

বর্তমান কার্যকলাপ ট্র্যাক রাখুন

বিজ্ঞাপনটি দেখানোর জন্য, আপনার একটি Activity প্রসঙ্গ প্রয়োজন হবে। ব্যবহার করা হচ্ছে সবচেয়ে বর্তমান কার্যকলাপের ট্র্যাক রাখতে, Application.ActivityLifecycleCallbacks জন্য নিবন্ধন করুন এবং বাস্তবায়ন করুন।

জাভা

public class MyApplication extends Application implements ActivityLifecycleCallbacks {

  private Activity currentActivity;

  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

  @Override
  public void onActivityStarted(Activity activity) {
    currentActivity = activity
  }

  @Override
  public void onActivityResumed(Activity activity) {}

  @Override
  public void onActivityStopped(Activity activity) {}

  @Override
  public void onActivityPaused(Activity activity) {}

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}

  @Override
  public void onActivityDestroyed(Activity activity) {}
}

কোটলিন

class MyApplication : Application(), Application.ActivityLifecycleCallbacks {

  private var currentActivity: Activity? = null

  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

  override fun onActivityStarted(activity: Activity) {
    currentActivity = activity
  }

  override fun onActivityResumed(activity: Activity) {}

  override fun onActivityPaused(activity: Activity) {}

  override fun onActivityStopped(activity: Activity) {}

  override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

  override fun onActivityDestroyed(activity: Activity) {}
}

registerActivityLifecycleCallbacks আপনাকে সমস্ত Activity ইভেন্ট শুনতে দেয়। কখন ক্রিয়াকলাপগুলি শুরু এবং ধ্বংস করা হয় তা শুনে, আপনি বর্তমান Activity একটি রেফারেন্স ট্র্যাক রাখতে পারেন, যা আপনি আপনার অ্যাপ খোলা বিজ্ঞাপন উপস্থাপনে ব্যবহার করবেন৷

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের জন্য শুনুন

আপনার গ্রেডল ফাইলে লাইব্রেরি যোগ করুন

অ্যাপের ফোরগ্রাউন্ডিং ইভেন্ট সম্পর্কে অবহিত হতে, আপনাকে একটি DefaultLifecycleObserver নিবন্ধন করতে হবে। আপনার অ্যাপ-স্তরের বিল্ড ফাইলে এর নির্ভরতা যোগ করুন:

কোটলিন

  dependencies {
    implementation("com.google.android.gms:play-services-ads:23.3.0")
    implementation("androidx.lifecycle:lifecycle-process:2.8.3")
  }

গ্রোভি

  dependencies {
    implementation 'com.google.android.gms:play-services-ads:23.3.0'
    implementation 'androidx.lifecycle:lifecycle-process:2.8.3'
  }

জীবনচক্র পর্যবেক্ষক ইন্টারফেস বাস্তবায়ন

আপনি DefaultLifecycleObserver ইন্টারফেস প্রয়োগ করে ফোরগ্রাউন্ডিং ইভেন্ট শুনতে পারেন।

অ্যাপ খোলা বিজ্ঞাপন দেখানোর জন্য onStart ইভেন্টটি প্রয়োগ করুন।

জাভা

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Event.ON_START)
  protected void onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(currentActivity);
  }

  /** Show the ad if one isn't already showing. */
  private void showAdIfAvailable(@NonNull final Activity activity) {
      showAdIfAvailable(
          activity,
          new OnShowAdCompleteListener() {
            @Override
            public void onShowAdComplete() {
              // Empty because the user will go back to the activity that shows the ad.
            }
          });
  }
}

কোটলিন

class MyApplication : Application(),
    Application.ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Lifecycle.Event.ON_START)
  fun onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    currentActivity?.let {
      appOpenAdManager.showAdIfAvailable(it)
    }
  }

  /** Show the ad if one isn't already showing. */
  fun showAdIfAvailable(activity: Activity) {
    showAdIfAvailable(
        activity,
        object : OnShowAdCompleteListener {
          override fun onShowAdComplete() {
            // Empty because the user will go back to the activity that shows the ad.
          }
        })
  }
}

ঠান্ডা শুরু এবং পর্দা লোড হচ্ছে

ডকুমেন্টেশনটি এখন পর্যন্ত অনুমান করে যে আপনি শুধুমাত্র অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান যখন ব্যবহারকারীরা আপনার অ্যাপটি মেমরিতে সাসপেন্ড করা থাকে "কোল্ড স্টার্ট" ঘটে যখন আপনার অ্যাপ চালু হয় কিন্তু আগে মেমরিতে সাসপেন্ড করা হয়নি।

একটি কোল্ড স্টার্টের উদাহরণ হল যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ খোলেন। ঠান্ডা শুরু হলে, আপনার কাছে আগে লোড করা কোনো অ্যাপ খোলা বিজ্ঞাপন থাকবে না যা এখনই দেখানোর জন্য প্রস্তুত। আপনি যখন একটি বিজ্ঞাপনের অনুরোধ করেন এবং একটি বিজ্ঞাপন ফেরত পান তখন এর মধ্যে দেরি এমন একটি পরিস্থিতি তৈরি করতে পারে যেখানে ব্যবহারকারীরা একটি প্রেক্ষাপটের বাইরের বিজ্ঞাপনে অবাক হওয়ার আগে আপনার অ্যাপটি সংক্ষিপ্তভাবে ব্যবহার করতে সক্ষম হয়। এটি এড়ানো উচিত কারণ এটি একটি খারাপ ব্যবহারকারীর অভিজ্ঞতা।

কোল্ড স্টার্টে অ্যাপ খোলা বিজ্ঞাপনগুলি ব্যবহার করার পছন্দের উপায় হল আপনার গেম বা অ্যাপ সম্পদগুলি লোড করার জন্য একটি লোডিং স্ক্রীন ব্যবহার করা এবং শুধুমাত্র লোডিং স্ক্রীন থেকে বিজ্ঞাপন দেখানো। যদি আপনার অ্যাপ লোডিং সম্পন্ন করে থাকে এবং ব্যবহারকারীকে আপনার অ্যাপের মূল বিষয়বস্তুতে পাঠিয়ে থাকে, তাহলে বিজ্ঞাপনটি দেখাবেন না।

সর্বোত্তম অনুশীলন

অ্যাপ খোলার বিজ্ঞাপনগুলি আপনাকে আপনার অ্যাপের লোডিং স্ক্রীন নগদীকরণ করতে সাহায্য করে, যখন অ্যাপটি প্রথম চালু হয় এবং অ্যাপ স্যুইচ করার সময়, তবে আপনার ব্যবহারকারীরা যাতে আপনার অ্যাপ ব্যবহার করে উপভোগ করতে পারে সেজন্য সর্বোত্তম অনুশীলনগুলি মাথায় রাখা গুরুত্বপূর্ণ। এটি করা সর্বোত্তম:

  • আপনার ব্যবহারকারীরা আপনার অ্যাপটি কয়েকবার ব্যবহার করার পরে আপনার প্রথম অ্যাপ খোলার বিজ্ঞাপন দেখান।
  • যখন আপনার ব্যবহারকারীরা অন্যথায় আপনার অ্যাপ লোড হওয়ার জন্য অপেক্ষা করবে তখন অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান।
  • আপনার যদি অ্যাপ ওপেন অ্যাডের অধীনে একটি লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি খারিজ হওয়ার আগে আপনার লোডিং স্ক্রিন লোডিং সম্পূর্ণ করে, তাহলে আপনি onAdDismissedFullScreenContent() পদ্ধতিতে আপনার লোডিং স্ক্রীনটি খারিজ করতে চাইতে পারেন।

গিটহাবের উদাহরণ

পরবর্তী পদক্ষেপ

নিম্নলিখিত বিষয়গুলি অন্বেষণ করুন:

,

এই নির্দেশিকাটি প্রকাশকদের জন্য তৈরি করা হয়েছে যারা Google মোবাইল বিজ্ঞাপন SDK ব্যবহার করে অ্যাপ খোলা বিজ্ঞাপনগুলিকে একীভূত করে।

অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপনগুলি যে কোনও সময় বন্ধ করা যেতে পারে এবং আপনার ব্যবহারকারীরা যখন আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন দেখানোর জন্য ডিজাইন করা হয়েছে৷

অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

পরীক্ষার বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যাপ খোলা বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

ca-app-pub-3940256099942544/9257395921

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটিকে আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

Google মোবাইল বিজ্ঞাপন SDK-এর পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি সক্ষম করুন দেখুন৷

অ্যাপ্লিকেশন ক্লাস প্রসারিত করুন

একটি নতুন ক্লাস তৈরি করুন যা Application ক্লাসকে প্রসারিত করে এবং আপনার অ্যাপ শুরু হওয়ার সময় Google মোবাইল বিজ্ঞাপন SDK শুরু করতে নিম্নলিখিত কোডটি যোগ করুন।

জাভা

/** Application class that initializes, loads and show ads when activities change states. */
public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
  }
}

কোটলিন

/** Application class that initializes, loads and show ads when activities change states. */
class MyApplication : Application() {

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
  }
}

এটি SDK শুরু করে এবং কঙ্কাল প্রদান করে যেখানে আপনি পরে অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টগুলির জন্য নিবন্ধন করবেন।

এরপর, আপনার AndroidManifest.xml এ নিম্নলিখিত কোড যোগ করুন:

<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>

আপনার ইউটিলিটি উপাদান বাস্তবায়ন

আপনার বিজ্ঞাপনটি দ্রুত দেখানো উচিত, তাই আপনার বিজ্ঞাপনটি প্রদর্শন করার আগে লোড করা ভাল। এইভাবে, আপনার ব্যবহারকারী আপনার অ্যাপে প্রবেশ করার সাথে সাথে আপনার কাছে একটি বিজ্ঞাপন তৈরি হবে।

আপনার বিজ্ঞাপন দেখানোর আগে বিজ্ঞাপনের অনুরোধ করার জন্য একটি ইউটিলিটি উপাদান AppOpenAdManager প্রয়োগ করুন।

জাভা

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private class AppOpenAdManager {
    private static final String LOG_TAG = "AppOpenAdManager";
    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";

    private AppOpenAd appOpenAd = null;
    private boolean isLoadingAd = false;
    private boolean isShowingAd = false;

    /** Constructor. */
    public AppOpenAdManager() {}

    /** Request an ad. */
    private void loadAd(Context context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private boolean isAdAvailable() {
      return appOpenAd != null;
    }
  }
}

কোটলিন

private const val String LOG_TAG = "AppOpenAdManager"
private const val String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921"

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private inner class AppOpenAdManager {
    private var appOpenAd: AppOpenAd? = null
    private var isLoadingAd = false
    var isShowingAd = false

    /** Request an ad. */
    fun loadAd(context: Context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private fun isAdAvailable(): Boolean {
      return appOpenAd != null
    }
  }
}

এখন আপনার একটি ইউটিলিটি ক্লাস আছে, আপনি এটিকে আপনার MyApplication ক্লাসে ইনস্ট্যান্টিয়েট করতে পারেন:

জাভা

public class MyApplication extends Application {

  private AppOpenAdManager appOpenAdManager;

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    appOpenAdManager = new AppOpenAdManager(this);
  }
}

কোটলিন

class MyApplication : Application() {

  private lateinit var appOpenAdManager: AppOpenAdManager

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    appOpenAdManager = AppOpenAdManager()
  }
}

একটি বিজ্ঞাপন লোড করুন

পরবর্তী ধাপ হল loadAd() পদ্ধতিটি পূরণ করা এবং বিজ্ঞাপন লোড কলব্যাকগুলি পরিচালনা করা।

জাভা

private class AppOpenAdManager {
  // ...
  /** Request an ad. */
  public void loadAd(Context context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return;
    }

    isLoadingAd = true;
    AdRequest request = new AdRequest.Builder().build();
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        new AppOpenAdLoadCallback() {
          @Override
          public void onAdLoaded(AppOpenAd ad) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.");
            appOpenAd = ad;
            isLoadingAd = false;
            loadTime = (new Date()).getTime();
          }

          @Override
          public void onAdFailedToLoad(LoadAdError loadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.getMessage());
            isLoadingAd = false;
          }
        });
  }
  // ...
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Request an ad. */
  fun loadAd(context: Context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return
    }

    isLoadingAd = true
    val request = AdRequest.Builder().build()
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        object : AppOpenAdLoadCallback() {

          override fun onAdLoaded(ad: AppOpenAd) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.")
            appOpenAd = ad
            isLoadingAd = false
            loadTime = Date().time
          }

          override fun onAdFailedToLoad(loadAdError: LoadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.message)
            isLoadingAd = false;
          }
        })
  }
  // ...
}

বিজ্ঞাপন দেখান এবং পূর্ণস্ক্রীন কলব্যাক ইভেন্টগুলি পরিচালনা করুন

সবচেয়ে সাধারণ অ্যাপ ওপেন ইমপ্লিমেন্টেশন হল অ্যাপ লঞ্চের কাছাকাছি একটি অ্যাপ খোলা বিজ্ঞাপন দেখানোর চেষ্টা করা, বিজ্ঞাপনটি প্রস্তুত না হলে অ্যাপ কন্টেন্ট শুরু করা এবং পরবর্তী অ্যাপ খোলার সুযোগের জন্য অন্য একটি বিজ্ঞাপন প্রিলোড করা। প্রয়োগের উদাহরণের জন্য অ্যাপ খোলা বিজ্ঞাপন নির্দেশিকা দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি বিজ্ঞাপন দেখাতে হয় এবং পরবর্তীতে পুনরায় লোড করতে হয়:

জাভা

public class MyApplication extends Application {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  public interface OnShowAdCompleteListener {
    void onShowAdComplete();
  }

  private class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    public void showAdIfAvailable(
        @NonNull final Activity activity,
        @NonNull OnShowAdCompleteListener onShowAdCompleteListener){
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.");
        return;
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.");
        onShowAdCompleteListener.onShowAdComplete();
        loadAd(activity);
        return;
      }

      appOpenAd.setFullScreenContentCallback(
          new FullScreenContentCallback() {

            @Override
            public void onAdDismissedFullScreenContent() {
              // Called when fullscreen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.");
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdFailedToShowFullScreenContent(AdError adError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.getMessage());
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.");
            }
          });
      isShowingAd = true;
      appOpenAd.show(activity);
    }
    // ...
  }
}

কোটলিন

class MyApplication : Application() {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  interface OnShowAdCompleteListener {
    fun onShowAdComplete()
  }

  private inner class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    fun showAdIfAvailable(
        activity: Activity,
        onShowAdCompleteListener: OnShowAdCompleteListener) {
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.")
        return
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.")
        onShowAdCompleteListener.onShowAdComplete()
        loadAd(activity)
        return
      }

      appOpenAd?.setFullScreenContentCallback(
          object : FullScreenContentCallback() {

            override fun onAdDismissedFullScreenContent() {
              // Called when full screen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.")
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.message)
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.")
            }
          })
      isShowingAd = true
      appOpenAd?.show(activity)
    }
    // ...
  }
}

FullScreenContentCallback ইভেন্টগুলি পরিচালনা করে যেমন বিজ্ঞাপনটি কখন উপস্থাপিত হয়, উপস্থাপন করতে ব্যর্থ হয় বা যখন এটি খারিজ হয়।

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার কথা বিবেচনা করুন

আপনি একটি মেয়াদোত্তীর্ণ বিজ্ঞাপন প্রদর্শন করবেন না তা নিশ্চিত করতে, AppOpenAdManager এ একটি পদ্ধতি যোগ করুন যা আপনার বিজ্ঞাপনের রেফারেন্স লোড হওয়ার পর কতক্ষণ হয়েছে তা পরীক্ষা করে। তারপর, বিজ্ঞাপনটি এখনও বৈধ কিনা তা পরীক্ষা করতে সেই পদ্ধতিটি ব্যবহার করুন৷

জাভা

private class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
    long dateDifference = (new Date()).getTime() - this.loadTime;
    long numMilliSecondsPerHour = 3600000;
    return (dateDifference < (numMilliSecondsPerHour * numHours));
  }

  /** Check if ad exists and can be shown. */
  public boolean isAdAvailable() {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
  }
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
    val dateDifference: Long = Date().time - loadTime
    val numMilliSecondsPerHour: Long = 3600000
    return dateDifference < numMilliSecondsPerHour * numHours
  }

  /** Check if ad exists and can be shown. */
  private fun isAdAvailable(): Boolean {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
  }
}

বর্তমান কার্যকলাপ ট্র্যাক রাখুন

বিজ্ঞাপনটি দেখানোর জন্য, আপনার একটি Activity প্রসঙ্গ প্রয়োজন হবে। ব্যবহার করা হচ্ছে সবচেয়ে বর্তমান কার্যকলাপের ট্র্যাক রাখতে, Application.ActivityLifecycleCallbacks জন্য নিবন্ধন করুন এবং বাস্তবায়ন করুন।

জাভা

public class MyApplication extends Application implements ActivityLifecycleCallbacks {

  private Activity currentActivity;

  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

  @Override
  public void onActivityStarted(Activity activity) {
    currentActivity = activity
  }

  @Override
  public void onActivityResumed(Activity activity) {}

  @Override
  public void onActivityStopped(Activity activity) {}

  @Override
  public void onActivityPaused(Activity activity) {}

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}

  @Override
  public void onActivityDestroyed(Activity activity) {}
}

কোটলিন

class MyApplication : Application(), Application.ActivityLifecycleCallbacks {

  private var currentActivity: Activity? = null

  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

  override fun onActivityStarted(activity: Activity) {
    currentActivity = activity
  }

  override fun onActivityResumed(activity: Activity) {}

  override fun onActivityPaused(activity: Activity) {}

  override fun onActivityStopped(activity: Activity) {}

  override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

  override fun onActivityDestroyed(activity: Activity) {}
}

registerActivityLifecycleCallbacks আপনাকে সমস্ত Activity ইভেন্ট শুনতে দেয়। কখন ক্রিয়াকলাপগুলি শুরু এবং ধ্বংস করা হয় তা শুনে, আপনি বর্তমান Activity একটি রেফারেন্স ট্র্যাক রাখতে পারেন, যা আপনি আপনার অ্যাপ খোলা বিজ্ঞাপন উপস্থাপনে ব্যবহার করবেন৷

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের জন্য শুনুন

আপনার গ্রেডল ফাইলে লাইব্রেরি যোগ করুন

অ্যাপের ফোরগ্রাউন্ডিং ইভেন্ট সম্পর্কে অবহিত হতে, আপনাকে একটি DefaultLifecycleObserver নিবন্ধন করতে হবে। আপনার অ্যাপ-স্তরের বিল্ড ফাইলে এর নির্ভরতা যোগ করুন:

কোটলিন

  dependencies {
    implementation("com.google.android.gms:play-services-ads:23.3.0")
    implementation("androidx.lifecycle:lifecycle-process:2.8.3")
  }

গ্রোভি

  dependencies {
    implementation 'com.google.android.gms:play-services-ads:23.3.0'
    implementation 'androidx.lifecycle:lifecycle-process:2.8.3'
  }

জীবনচক্র পর্যবেক্ষক ইন্টারফেস বাস্তবায়ন

আপনি DefaultLifecycleObserver ইন্টারফেস প্রয়োগ করে ফোরগ্রাউন্ডিং ইভেন্ট শুনতে পারেন।

অ্যাপ খোলা বিজ্ঞাপন দেখানোর জন্য onStart ইভেন্টটি প্রয়োগ করুন।

জাভা

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Event.ON_START)
  protected void onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(currentActivity);
  }

  /** Show the ad if one isn't already showing. */
  private void showAdIfAvailable(@NonNull final Activity activity) {
      showAdIfAvailable(
          activity,
          new OnShowAdCompleteListener() {
            @Override
            public void onShowAdComplete() {
              // Empty because the user will go back to the activity that shows the ad.
            }
          });
  }
}

কোটলিন

class MyApplication : Application(),
    Application.ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Lifecycle.Event.ON_START)
  fun onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    currentActivity?.let {
      appOpenAdManager.showAdIfAvailable(it)
    }
  }

  /** Show the ad if one isn't already showing. */
  fun showAdIfAvailable(activity: Activity) {
    showAdIfAvailable(
        activity,
        object : OnShowAdCompleteListener {
          override fun onShowAdComplete() {
            // Empty because the user will go back to the activity that shows the ad.
          }
        })
  }
}

ঠান্ডা শুরু এবং পর্দা লোড হচ্ছে

ডকুমেন্টেশনটি এখন পর্যন্ত অনুমান করে যে আপনি শুধুমাত্র অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান যখন ব্যবহারকারীরা আপনার অ্যাপটি মেমরিতে সাসপেন্ড করা থাকে "কোল্ড স্টার্ট" ঘটে যখন আপনার অ্যাপ চালু হয় কিন্তু আগে মেমরিতে সাসপেন্ড করা হয়নি।

একটি কোল্ড স্টার্টের উদাহরণ হল যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ খোলেন। ঠান্ডা শুরু হলে, আপনার কাছে আগে লোড করা কোনো অ্যাপ খোলা বিজ্ঞাপন থাকবে না যা এখনই দেখানোর জন্য প্রস্তুত। আপনি যখন একটি বিজ্ঞাপনের অনুরোধ করেন এবং একটি বিজ্ঞাপন ফেরত পান তখন এর মধ্যে দেরি এমন একটি পরিস্থিতি তৈরি করতে পারে যেখানে ব্যবহারকারীরা একটি প্রেক্ষাপটের বাইরের বিজ্ঞাপনে অবাক হওয়ার আগে আপনার অ্যাপটি সংক্ষিপ্তভাবে ব্যবহার করতে সক্ষম হয়। এটি এড়ানো উচিত কারণ এটি একটি খারাপ ব্যবহারকারীর অভিজ্ঞতা।

কোল্ড স্টার্টে অ্যাপ খোলা বিজ্ঞাপনগুলি ব্যবহার করার পছন্দের উপায় হল আপনার গেম বা অ্যাপ সম্পদগুলি লোড করার জন্য একটি লোডিং স্ক্রীন ব্যবহার করা এবং শুধুমাত্র লোডিং স্ক্রীন থেকে বিজ্ঞাপন দেখানো। যদি আপনার অ্যাপ লোডিং সম্পন্ন করে থাকে এবং ব্যবহারকারীকে আপনার অ্যাপের মূল বিষয়বস্তুতে পাঠিয়ে থাকে, তাহলে বিজ্ঞাপনটি দেখাবেন না।

সর্বোত্তম অনুশীলন

অ্যাপ খোলার বিজ্ঞাপনগুলি আপনাকে আপনার অ্যাপের লোডিং স্ক্রীন নগদীকরণ করতে সাহায্য করে, যখন অ্যাপটি প্রথম চালু হয় এবং অ্যাপ স্যুইচ করার সময়, তবে আপনার ব্যবহারকারীরা যাতে আপনার অ্যাপ ব্যবহার করে উপভোগ করতে পারে সেজন্য সর্বোত্তম অনুশীলনগুলি মাথায় রাখা গুরুত্বপূর্ণ। এটি করা সর্বোত্তম:

  • আপনার ব্যবহারকারীরা আপনার অ্যাপটি কয়েকবার ব্যবহার করার পরে আপনার প্রথম অ্যাপ খোলার বিজ্ঞাপন দেখান।
  • যখন আপনার ব্যবহারকারীরা অন্যথায় আপনার অ্যাপ লোড হওয়ার জন্য অপেক্ষা করবে তখন অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান।
  • আপনার যদি অ্যাপ ওপেন অ্যাডের অধীনে একটি লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি খারিজ হওয়ার আগে আপনার লোডিং স্ক্রিন লোডিং সম্পূর্ণ করে, তাহলে আপনি onAdDismissedFullScreenContent() পদ্ধতিতে আপনার লোডিং স্ক্রীনটি খারিজ করতে চাইতে পারেন।

গিটহাবের উদাহরণ

পরবর্তী পদক্ষেপ

নিম্নলিখিত বিষয়গুলি অন্বেষণ করুন:

,

এই নির্দেশিকাটি প্রকাশকদের জন্য তৈরি করা হয়েছে যারা Google মোবাইল বিজ্ঞাপন SDK ব্যবহার করে অ্যাপ খোলা বিজ্ঞাপনগুলিকে একীভূত করে।

অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপনগুলি যে কোনও সময় বন্ধ করা যেতে পারে এবং আপনার ব্যবহারকারীরা যখন আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন দেখানোর জন্য ডিজাইন করা হয়েছে৷

অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:

পূর্বশর্ত

সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।

পরীক্ষার বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল অ্যাপ খোলা বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

ca-app-pub-3940256099942544/9257395921

প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি এটিকে আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি এটিকে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।

Google মোবাইল বিজ্ঞাপন SDK-এর পরীক্ষার বিজ্ঞাপনগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, পরীক্ষা বিজ্ঞাপনগুলি সক্ষম করুন দেখুন৷

অ্যাপ্লিকেশন ক্লাস প্রসারিত করুন

একটি নতুন ক্লাস তৈরি করুন যা Application ক্লাসকে প্রসারিত করে এবং আপনার অ্যাপ শুরু হওয়ার সময় Google মোবাইল বিজ্ঞাপন SDK শুরু করতে নিম্নলিখিত কোডটি যোগ করুন।

জাভা

/** Application class that initializes, loads and show ads when activities change states. */
public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
  }
}

কোটলিন

/** Application class that initializes, loads and show ads when activities change states. */
class MyApplication : Application() {

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
  }
}

এটি SDK শুরু করে এবং কঙ্কাল প্রদান করে যেখানে আপনি পরে অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টগুলির জন্য নিবন্ধন করবেন।

এরপর, আপনার AndroidManifest.xml এ নিম্নলিখিত কোড যোগ করুন:

<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>

আপনার ইউটিলিটি উপাদান বাস্তবায়ন

আপনার বিজ্ঞাপনটি দ্রুত দেখানো উচিত, তাই আপনার বিজ্ঞাপনটি প্রদর্শন করার আগে লোড করা ভাল। এইভাবে, আপনার ব্যবহারকারী আপনার অ্যাপে প্রবেশ করার সাথে সাথে আপনার কাছে একটি বিজ্ঞাপন তৈরি হবে।

আপনার বিজ্ঞাপন দেখানোর আগে বিজ্ঞাপনের অনুরোধ করার জন্য একটি ইউটিলিটি উপাদান AppOpenAdManager প্রয়োগ করুন।

জাভা

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private class AppOpenAdManager {
    private static final String LOG_TAG = "AppOpenAdManager";
    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";

    private AppOpenAd appOpenAd = null;
    private boolean isLoadingAd = false;
    private boolean isShowingAd = false;

    /** Constructor. */
    public AppOpenAdManager() {}

    /** Request an ad. */
    private void loadAd(Context context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private boolean isAdAvailable() {
      return appOpenAd != null;
    }
  }
}

কোটলিন

private const val String LOG_TAG = "AppOpenAdManager"
private const val String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921"

public class MyApplication extends Application {
  // ...
  /** Inner class that loads and shows app open ads. */
  private inner class AppOpenAdManager {
    private var appOpenAd: AppOpenAd? = null
    private var isLoadingAd = false
    var isShowingAd = false

    /** Request an ad. */
    fun loadAd(context: Context) {
      // We will implement this later.
    }

    /** Check if ad exists and can be shown. */
    private fun isAdAvailable(): Boolean {
      return appOpenAd != null
    }
  }
}

এখন আপনার একটি ইউটিলিটি ক্লাস আছে, আপনি এটিকে আপনার MyApplication ক্লাসে ইনস্ট্যান্টিয়েট করতে পারেন:

জাভা

public class MyApplication extends Application {

  private AppOpenAdManager appOpenAdManager;

  @Override
  public void onCreate() {
    super.onCreate();
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    appOpenAdManager = new AppOpenAdManager(this);
  }
}

কোটলিন

class MyApplication : Application() {

  private lateinit var appOpenAdManager: AppOpenAdManager

  override fun onCreate() {
    super.onCreate()
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    appOpenAdManager = AppOpenAdManager()
  }
}

একটি বিজ্ঞাপন লোড করুন

পরবর্তী ধাপ হল loadAd() পদ্ধতিটি পূরণ করা এবং বিজ্ঞাপন লোড কলব্যাকগুলি পরিচালনা করা।

জাভা

private class AppOpenAdManager {
  // ...
  /** Request an ad. */
  public void loadAd(Context context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return;
    }

    isLoadingAd = true;
    AdRequest request = new AdRequest.Builder().build();
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        new AppOpenAdLoadCallback() {
          @Override
          public void onAdLoaded(AppOpenAd ad) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.");
            appOpenAd = ad;
            isLoadingAd = false;
            loadTime = (new Date()).getTime();
          }

          @Override
          public void onAdFailedToLoad(LoadAdError loadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.getMessage());
            isLoadingAd = false;
          }
        });
  }
  // ...
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Request an ad. */
  fun loadAd(context: Context) {
    // Do not load ad if there is an unused ad or one is already loading.
    if (isLoadingAd || isAdAvailable()) {
      return
    }

    isLoadingAd = true
    val request = AdRequest.Builder().build()
    AppOpenAd.load(
        context, AD_UNIT_ID, request,
        AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
        object : AppOpenAdLoadCallback() {

          override fun onAdLoaded(ad: AppOpenAd) {
            // Called when an app open ad has loaded.
            Log.d(LOG_TAG, "Ad was loaded.")
            appOpenAd = ad
            isLoadingAd = false
            loadTime = Date().time
          }

          override fun onAdFailedToLoad(loadAdError: LoadAdError) {
            // Called when an app open ad has failed to load.
            Log.d(LOG_TAG, loadAdError.message)
            isLoadingAd = false;
          }
        })
  }
  // ...
}

বিজ্ঞাপন দেখান এবং পূর্ণস্ক্রীন কলব্যাক ইভেন্টগুলি পরিচালনা করুন

সবচেয়ে সাধারণ অ্যাপ ওপেন ইমপ্লিমেন্টেশন হল অ্যাপ লঞ্চের কাছাকাছি একটি অ্যাপ খোলা বিজ্ঞাপন দেখানোর চেষ্টা করা, বিজ্ঞাপনটি প্রস্তুত না হলে অ্যাপ কন্টেন্ট শুরু করা এবং পরবর্তী অ্যাপ খোলার সুযোগের জন্য অন্য একটি বিজ্ঞাপন প্রিলোড করা। প্রয়োগের উদাহরণের জন্য অ্যাপ খোলা বিজ্ঞাপন নির্দেশিকা দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি বিজ্ঞাপন দেখাতে হয় এবং পরবর্তীতে পুনরায় লোড করতে হয়:

জাভা

public class MyApplication extends Application {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  public interface OnShowAdCompleteListener {
    void onShowAdComplete();
  }

  private class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    public void showAdIfAvailable(
        @NonNull final Activity activity,
        @NonNull OnShowAdCompleteListener onShowAdCompleteListener){
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.");
        return;
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.");
        onShowAdCompleteListener.onShowAdComplete();
        loadAd(activity);
        return;
      }

      appOpenAd.setFullScreenContentCallback(
          new FullScreenContentCallback() {

            @Override
            public void onAdDismissedFullScreenContent() {
              // Called when fullscreen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.");
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdFailedToShowFullScreenContent(AdError adError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.getMessage());
              appOpenAd = null;
              isShowingAd = false;

              onShowAdCompleteListener.onShowAdComplete();
              loadAd(activity);
            }

            @Override
            public void onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.");
            }
          });
      isShowingAd = true;
      appOpenAd.show(activity);
    }
    // ...
  }
}

কোটলিন

class MyApplication : Application() {
  // ...
  /** Interface definition for a callback to be invoked when an app open ad is complete. */
  interface OnShowAdCompleteListener {
    fun onShowAdComplete()
  }

  private inner class AppOpenAdManager {
    // ...

    /** Shows the ad if one isn't already showing. */
    fun showAdIfAvailable(
        activity: Activity,
        onShowAdCompleteListener: OnShowAdCompleteListener) {
      // If the app open ad is already showing, do not show the ad again.
      if (isShowingAd) {
        Log.d(LOG_TAG, "The app open ad is already showing.")
        return
      }

      // If the app open ad is not available yet, invoke the callback then load the ad.
      if (!isAdAvailable()) {
        Log.d(LOG_TAG, "The app open ad is not ready yet.")
        onShowAdCompleteListener.onShowAdComplete()
        loadAd(activity)
        return
      }

      appOpenAd?.setFullScreenContentCallback(
          object : FullScreenContentCallback() {

            override fun onAdDismissedFullScreenContent() {
              // Called when full screen content is dismissed.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, "Ad dismissed fullscreen content.")
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdFailedToShowFullScreenContent(adError: AdError) {
              // Called when fullscreen content failed to show.
              // Set the reference to null so isAdAvailable() returns false.
              Log.d(LOG_TAG, adError.message)
              appOpenAd = null
              isShowingAd = false

              onShowAdCompleteListener.onShowAdComplete()
              loadAd(activity)
            }

            override fun onAdShowedFullScreenContent() {
              // Called when fullscreen content is shown.
              Log.d(LOG_TAG, "Ad showed fullscreen content.")
            }
          })
      isShowingAd = true
      appOpenAd?.show(activity)
    }
    // ...
  }
}

FullScreenContentCallback ইভেন্টগুলি পরিচালনা করে যেমন বিজ্ঞাপনটি কখন উপস্থাপিত হয়, উপস্থাপন করতে ব্যর্থ হয় বা যখন এটি খারিজ হয়।

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার কথা বিবেচনা করুন

আপনি একটি মেয়াদোত্তীর্ণ বিজ্ঞাপন প্রদর্শন করবেন না তা নিশ্চিত করতে, AppOpenAdManager এ একটি পদ্ধতি যোগ করুন যা আপনার বিজ্ঞাপনের রেফারেন্স লোড হওয়ার পর কতক্ষণ হয়েছে তা পরীক্ষা করে। তারপর, বিজ্ঞাপনটি এখনও বৈধ কিনা তা পরীক্ষা করতে সেই পদ্ধতিটি ব্যবহার করুন৷

জাভা

private class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
    long dateDifference = (new Date()).getTime() - this.loadTime;
    long numMilliSecondsPerHour = 3600000;
    return (dateDifference < (numMilliSecondsPerHour * numHours));
  }

  /** Check if ad exists and can be shown. */
  public boolean isAdAvailable() {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
  }
}

কোটলিন

private inner class AppOpenAdManager {
  // ...
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0;

  // ...

  /** Utility method to check if ad was loaded more than n hours ago. */
  private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
    val dateDifference: Long = Date().time - loadTime
    val numMilliSecondsPerHour: Long = 3600000
    return dateDifference < numMilliSecondsPerHour * numHours
  }

  /** Check if ad exists and can be shown. */
  private fun isAdAvailable(): Boolean {
    return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
  }
}

বর্তমান কার্যকলাপ ট্র্যাক রাখুন

বিজ্ঞাপনটি দেখানোর জন্য, আপনার একটি Activity প্রসঙ্গ প্রয়োজন হবে। ব্যবহার করা হচ্ছে সবচেয়ে বর্তমান কার্যকলাপের ট্র্যাক রাখতে, Application.ActivityLifecycleCallbacks জন্য নিবন্ধন করুন এবং বাস্তবায়ন করুন।

জাভা

public class MyApplication extends Application implements ActivityLifecycleCallbacks {

  private Activity currentActivity;

  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

  @Override
  public void onActivityStarted(Activity activity) {
    currentActivity = activity
  }

  @Override
  public void onActivityResumed(Activity activity) {}

  @Override
  public void onActivityStopped(Activity activity) {}

  @Override
  public void onActivityPaused(Activity activity) {}

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}

  @Override
  public void onActivityDestroyed(Activity activity) {}
}

কোটলিন

class MyApplication : Application(), Application.ActivityLifecycleCallbacks {

  private var currentActivity: Activity? = null

  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    // ...
  }

  /** ActivityLifecycleCallback methods. */
  override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

  override fun onActivityStarted(activity: Activity) {
    currentActivity = activity
  }

  override fun onActivityResumed(activity: Activity) {}

  override fun onActivityPaused(activity: Activity) {}

  override fun onActivityStopped(activity: Activity) {}

  override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

  override fun onActivityDestroyed(activity: Activity) {}
}

registerActivityLifecycleCallbacks আপনাকে সমস্ত Activity ইভেন্ট শুনতে দেয়। কখন ক্রিয়াকলাপগুলি শুরু এবং ধ্বংস করা হয় তা শুনে, আপনি বর্তমান Activity একটি রেফারেন্স ট্র্যাক রাখতে পারেন, যা আপনি আপনার অ্যাপ খোলা বিজ্ঞাপন উপস্থাপনে ব্যবহার করবেন৷

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের জন্য শুনুন

আপনার গ্রেডল ফাইলে লাইব্রেরি যোগ করুন

অ্যাপের ফোরগ্রাউন্ডিং ইভেন্ট সম্পর্কে অবহিত হতে, আপনাকে একটি DefaultLifecycleObserver নিবন্ধন করতে হবে। আপনার অ্যাপ-স্তরের বিল্ড ফাইলে এর নির্ভরতা যোগ করুন:

কোটলিন

  dependencies {
    implementation("com.google.android.gms:play-services-ads:23.3.0")
    implementation("androidx.lifecycle:lifecycle-process:2.8.3")
  }

গ্রোভি

  dependencies {
    implementation 'com.google.android.gms:play-services-ads:23.3.0'
    implementation 'androidx.lifecycle:lifecycle-process:2.8.3'
  }

জীবনচক্র পর্যবেক্ষক ইন্টারফেস বাস্তবায়ন

আপনি DefaultLifecycleObserver ইন্টারফেস প্রয়োগ করে ফোরগ্রাউন্ডিং ইভেন্ট শুনতে পারেন।

অ্যাপ খোলা বিজ্ঞাপন দেখানোর জন্য onStart ইভেন্টটি প্রয়োগ করুন।

জাভা

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Event.ON_START)
  protected void onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(currentActivity);
  }

  /** Show the ad if one isn't already showing. */
  private void showAdIfAvailable(@NonNull final Activity activity) {
      showAdIfAvailable(
          activity,
          new OnShowAdCompleteListener() {
            @Override
            public void onShowAdComplete() {
              // Empty because the user will go back to the activity that shows the ad.
            }
          });
  }
}

কোটলিন

class MyApplication : Application(),
    Application.ActivityLifecycleCallbacks, LifecycleObserver {
  // ...
  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(this)
    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MyApplication) {}
    }
    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }

  /** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
  @OnLifecycleEvent(Lifecycle.Event.ON_START)
  fun onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.
    currentActivity?.let {
      appOpenAdManager.showAdIfAvailable(it)
    }
  }

  /** Show the ad if one isn't already showing. */
  fun showAdIfAvailable(activity: Activity) {
    showAdIfAvailable(
        activity,
        object : OnShowAdCompleteListener {
          override fun onShowAdComplete() {
            // Empty because the user will go back to the activity that shows the ad.
          }
        })
  }
}

ঠান্ডা শুরু এবং পর্দা লোড হচ্ছে

ডকুমেন্টেশনটি এখন পর্যন্ত অনুমান করে যে আপনি শুধুমাত্র অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান যখন ব্যবহারকারীরা আপনার অ্যাপটি মেমরিতে সাসপেন্ড করা থাকে "কোল্ড স্টার্ট" ঘটে যখন আপনার অ্যাপ চালু হয় কিন্তু আগে মেমরিতে সাসপেন্ড করা হয়নি।

একটি কোল্ড স্টার্টের উদাহরণ হল যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ খোলেন। ঠান্ডা শুরু হলে, আপনার কাছে আগে লোড করা কোনো অ্যাপ খোলা বিজ্ঞাপন থাকবে না যা এখনই দেখানোর জন্য প্রস্তুত। আপনি যখন একটি বিজ্ঞাপনের অনুরোধ করেন এবং একটি বিজ্ঞাপন ফেরত পান তখন এর মধ্যে দেরি এমন একটি পরিস্থিতি তৈরি করতে পারে যেখানে ব্যবহারকারীরা একটি প্রেক্ষাপটের বাইরের বিজ্ঞাপনে অবাক হওয়ার আগে আপনার অ্যাপটি সংক্ষিপ্তভাবে ব্যবহার করতে সক্ষম হয়। এটি এড়ানো উচিত কারণ এটি একটি খারাপ ব্যবহারকারীর অভিজ্ঞতা।

কোল্ড স্টার্টে অ্যাপ খোলা বিজ্ঞাপনগুলি ব্যবহার করার পছন্দের উপায় হল আপনার গেম বা অ্যাপ সম্পদগুলি লোড করার জন্য একটি লোডিং স্ক্রীন ব্যবহার করা এবং শুধুমাত্র লোডিং স্ক্রীন থেকে বিজ্ঞাপন দেখানো। যদি আপনার অ্যাপ লোডিং সম্পন্ন করে থাকে এবং ব্যবহারকারীকে আপনার অ্যাপের মূল বিষয়বস্তুতে পাঠিয়ে থাকে, তাহলে বিজ্ঞাপনটি দেখাবেন না।

সর্বোত্তম অনুশীলন

অ্যাপ খোলার বিজ্ঞাপনগুলি আপনাকে আপনার অ্যাপের লোডিং স্ক্রীন নগদীকরণ করতে সাহায্য করে, যখন অ্যাপটি প্রথম চালু হয় এবং অ্যাপ স্যুইচ করার সময়, তবে আপনার ব্যবহারকারীরা যাতে আপনার অ্যাপ ব্যবহার করে উপভোগ করতে পারে সেজন্য সর্বোত্তম অনুশীলনগুলি মাথায় রাখা গুরুত্বপূর্ণ। এটি করা সর্বোত্তম:

  • আপনার ব্যবহারকারীরা আপনার অ্যাপটি কয়েকবার ব্যবহার করার পরে আপনার প্রথম অ্যাপ খোলার বিজ্ঞাপন দেখান।
  • যখন আপনার ব্যবহারকারীরা অন্যথায় আপনার অ্যাপ লোড হওয়ার জন্য অপেক্ষা করবে তখন অ্যাপ খোলার বিজ্ঞাপনগুলি দেখান।
  • আপনার যদি অ্যাপ ওপেন অ্যাডের অধীনে একটি লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি খারিজ হওয়ার আগে আপনার লোডিং স্ক্রিন লোডিং সম্পূর্ণ করে, তাহলে আপনি onAdDismissedFullScreenContent() পদ্ধতিতে আপনার লোডিং স্ক্রীনটি খারিজ করতে চাইতে পারেন।

গিটহাবের উদাহরণ

পরবর্তী পদক্ষেপ

নিম্নলিখিত বিষয়গুলি অন্বেষণ করুন: