onReady এর সাথে ম্যানুয়ালি সিকোয়েন্স গেম লোডিং

যখন আপনার গেমটি সম্বলিত পৃষ্ঠাটি প্রথম লোড হয় তখন অনেকগুলি অ্যাসিঙ্ক্রোনাস ঘটনা ঘটে।

আপনার গেম লজিক লোড হয়, বিজ্ঞাপন ট্যাগ লোড হয়, অ্যাড প্লেসমেন্ট এপিআই শুরু হয় এবং বিজ্ঞাপনগুলি প্রিলোড করা যেতে পারে। ফলস্বরূপ, আপনি যদি পৃষ্ঠা লোড হওয়ার খুব শীঘ্রই adBreak() কল করেন, তাহলে এপিআই শুরু নাও হতে পারে বা বিজ্ঞাপনগুলির প্রিলোডিং শেষ না হওয়ার সম্ভাবনা রয়েছে। যদি API সূচনা না করে থাকে তাহলে কলটি ব্যর্থ হবে এবং আপনি যদি একটি adBreakDone() কলব্যাক নিবন্ধন করেন, তাহলে breakStatus সেট করা হবে notReady

আপনার যদি অ্যাড প্লেসমেন্ট API এর আরম্ভের সাথে আপনার গেম লজিক সিঙ্ক্রোনাইজ করতে হয়, তাহলে আপনি onReady() কলব্যাক adConfig() () এ ব্যবহার করতে পারেন।

onReady() কে Ad Placement API দ্বারা ডাকা হয় যখন:

  • বিজ্ঞাপনের ট্যাগ লোড হয়েছে,
  • অ্যাড প্লেসমেন্ট API লোড হয়েছে এবং শুরু হয়েছে, এবং
  • বিজ্ঞাপনগুলি প্রিলোড করা শেষ হয়েছে—যদি আপনি adConfig() ব্যবহার করে প্রিলোড করার অনুরোধ করেন

এই মুহুর্তে অ্যাড প্লেসমেন্ট API সম্পূর্ণরূপে আরম্ভ করা হয়েছে। আপনি adBreak() কল করতে পারেন, এবং এটি একটি notReady স্ট্যাটাস প্রদান করবে না। কিন্তু বরাবরের মতো adBreak() এখনও কোনও বিজ্ঞাপন নাও দেখাতে পারে (উদাহরণস্বরূপ, কোনও বিজ্ঞাপন উপলব্ধ ছিল না)।

এখানে একটি উদাহরণ যা onReady() এর ব্যবহার দেখায়:

...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
      // Game start logic, show loading screen
      adConfig({
        preloadAdBreaks: 'on',
        onReady: showAd
      });
      // Don't start the gameplay just yet, keep loading.
    }

    function showAd() {
      // Show an ad
      adBreak({
        type: 'start',
        adBreakDone: startGame,  // always called, unblocks the game logic
        ...
      });
    }
    ...
</script>

দ্রষ্টব্য : পৃষ্ঠা লোড হওয়ার খুব শীঘ্রই adBreak() কল করার জন্য সবচেয়ে সাধারণ ব্যবহার হল একটি প্রিরোল বাস্তবায়ন করা। আমরা দৃঢ়ভাবে সুপারিশ করি যে আপনি এখানে বর্ণিত পদ্ধতিগুলি ব্যবহার করে নিজের তৈরি করার চেষ্টা করার পরিবর্তে একটি preroll প্লেসমেন্ট টাইপ ব্যবহার করুন৷

preroll স্বয়ংক্রিয়ভাবে সমস্ত প্রয়োজনীয় প্রিলোডিং এবং টাইমআউট যুক্তি প্রয়োগ করে। আপনি যদি আপনার গেমের সাথে একটি প্রিরোল ব্যবহার করেন তবে আপনাকে onReady() ব্যবহার করতে হবে না। প্রিরোল সম্পর্কে আরও জানুন

টাইমআউট

অ্যাড প্লেসমেন্ট এপিআই ইনিশিয়ালাইজেশন বিলম্বিত হলে বা সম্পূর্ণরূপে লোড হতে ব্যর্থ হলে onReady() করার নিশ্চয়তা দেওয়া হয় না। আপনার গেমটি সময়মত শুরু হয় তা নিশ্চিত করতে, আপনি একটি টাইমআউট সেট আপ করতে চাইতে পারেন। আপনি যদি onReady() কলব্যাক পান, তাহলে আপনি বিজ্ঞাপনটি দেওয়ার জন্য adBreak() কল করতে পারেন, অন্যথায় আপনি বিজ্ঞাপন কলটি এড়িয়ে যেতে পারেন এবং আপনার গেম লোড করতে এগিয়ে যেতে পারেন৷

নিম্নলিখিত উদাহরণে একটি টাইমআউট রয়েছে—এবং একটি প্রিরোল প্লেসমেন্ট দ্বারা বাস্তবায়িত যুক্তির অনুরূপ:

...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
        // Game start logic
        let adConfigPromise =
            new Promise((resolve, reject) => adConfig({
                preloadAdBreaks: 'on',
                onReady: () => resolve(true)
            }));
        let timeoutPromise =
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(false);
                }, 2000);
            });
        // Whatever happens first resolves this promise.
        Promise.race([
            adConfigPromise,
            timeoutPromise
        ]).then((shouldShowPreRoll) => {
            if (shouldShowPreRoll) {
                showPreRoll();
            } else {
                startGame();
            }
        });
    }

    function showPreRoll() {
      // Show ad
      adBreak({
          type: 'start',
          adBreakDone: startGame, // always called, unblocks the game logic
          ...
      });
    }
    ...
</script>