تسلسل تحميل الألعاب يدويًا باستخدام onReady

عند تحميل الصفحة التي تحتوي على لعبتك لأول مرة، يتم إجراء عدد من الأحداث غير المتزامنة.

يتم تحميل منطق لعبتك، وتحميل علامات الإعلانات، والبدء في إعداد Ad Placement API، ويمكن تحميل الإعلانات مسبقًا. ونتيجة لذلك، إذا طلبت adBreak() بعد تحميل الصفحة بوقت كبير، من المحتمل أنّ واجهة برمجة التطبيقات لم يتم إعدادها أو أنّ الإعلانات لم تنتهي من تحميلها مُسبقًا. إذا لم تعمل واجهة برمجة التطبيقات على إعداد الطلب، سيتعذّر إرسال الطلب، وفي حال تسجيل معاودة الاتصال بـ adBreakDone()، سيتم ضبط breakStatus على notReady.

إذا كنت بحاجة إلى مزامنة منطق اللعبة مع إعداد واجهة برمجة التطبيقات لموضع الإعلان، يمكنك استخدام استدعاء onReady() في adConfig().

يتم استدعاء onReady() من خلال واجهة برمجة التطبيقات لموضع الإعلان عندما:

  • تحميل علامة الإعلان،
  • تم تحميل واجهة برمجة التطبيقات لموضع الإعلان وإعدادها
  • انتهى التحميل المسبق للإعلانات، إذا طلبت التحميل المسبق باستخدام adConfig()

وفي هذه المرحلة، يتم إعداد واجهة برمجة التطبيقات لموضع الإعلان بالكامل. يمكنك الاتصال بالنشاط التجاري 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>