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

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

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

إذا كنت بحاجة إلى مزامنة منطق لعبتك مع عملية تهيئة واجهة برمجة التطبيقات AdPlacement API، يمكنك استخدام معاودة الاتصال 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() إذا تأخّر تهيئة Ad Placement API أو تعذّر تحميله بالكامل. لضمان بدء لعبتك في الوقت المناسب، يمكنك إعداد مهلة زمنية. إذا تلقّيت 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>