قابلیت رد شدن

درخواست و نمایش تبلیغات قابل پرش با CAF DAI SDK کمی کار پیچیده ای است، زیرا مستلزم شناسایی این است که آیا ترکیب فرستنده و گیرنده در حال استفاده توانایی نمایش و تعامل با یک دکمه پرش را دارند یا خیر.

SDK به طور خودکار بهترین تلاش را برای تشخیص اینکه آیا گیرنده فعلی توانایی رندر و تعامل مستقیم با یک دکمه پرش را دارد، انجام می دهد. با این حال، ناشر باید با تغییر ویژگی imaRequestData.senderCanSkip تعیین کند که آیا هر یک از فرستنده‌های پیوست شده می‌توانند تبلیغات قابل پرش را نمایش دهند یا خیر.

در تمام نمونه‌های CAF DAI SDK، senderCanSkip مستقیماً از فرستنده به عنوان بخشی از شی رسانه ارسال می‌شود. این یک پیاده سازی ساده و هدفمند است که برای یک فرستنده به خوبی کار می کند، اما در برنامه های کاربردی دنیای واقعی ممکن است یک گیرنده CAF به چندین برنامه فرستنده متصل شود و فرستنده ای که یک فایل رسانه را در صف قرار می دهد، ممکن است با بارگیری آن شی رسانه دیگر متصل نباشد. و درخواست استریم انجام می شود.

یک گیرنده پیشرفته‌تر می‌تواند ردیابی کند که کدام نوع فرستنده وابسته از پرش پشتیبانی می‌کند و کدام‌یک از آن پشتیبانی نمی‌کنند، و در زمان بارگذاری بررسی می‌کند تا ببیند آیا فرستنده‌هایی با قابلیت پرش در حال حاضر به گیرنده متصل هستند یا خیر.

مثال (تک فرستنده):

...

    let getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imarequestdata.ApiKey) {
        streamRequest.ApiKey = imarequestdata.ApiKey;
      }
      if (streamRequest && imarequestdata.senderCanSkip) {
        streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
      }
      return streamRequest;
    };
...

مثال (پشتیبانی از چند فرستنده):

...

    let getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imarequestdata.ApiKey) {
        streamRequest.ApiKey = imarequestdata.ApiKey;
      }

      let senders = castContext.getSenders();
      let senderCanSkip = (sender) => {
        const skippableUserAgents = [
          "iOS CastSDK",
          "Android CastSDK"
        ];
        // trim user agent to just include device
        let userAgent = sender.userAgent.explode(',')[0];
        return skippableUserAgents.includes(userAgent);
      };
      if (streamRequest && senders.some(senderCanSkip)) {
        streamRequest.senderCanSkip = imarequestdata.senderCanSkip;
      }
      return streamRequest;
    };

...

در نهایت، ناشران مسئول تجربه کاربران خود هستند، و از آنجایی که برای همه فرستنده‌های قابل رد شدن ممکن است بین زمانی که درخواست پخش جریانی ارائه می‌شود و زمانی که تبلیغ پخش می‌شود، ارتباط خود را قطع کنند، ممکن است بخواهید یک کنترل‌کننده را به رویداد STARTED پیوست کنید که بررسی می‌کند. اگر تبلیغی قابل رد شدن باشد و فرستنده و گیرنده هر دو نتوانند از قابلیت رد شدن پشتیبانی کنند. این کنترل کننده می تواند به طور خودکار چنین تبلیغاتی را، در صورت نمایش، رد کند. با این حال، چنین پیاده سازی پیشرفته ای فراتر از محدوده پشتیبانی CAF DAI است.

به‌طور پیش‌فرض، اگر چنین لبه‌ای رخ دهد، کاربر همچنان می‌تواند از نظر فنی یک پرش را آغاز کند، ابتدا فرستنده‌ای را که از قابلیت پرش پشتیبانی می‌کند وصل می‌کند و سپس روی دکمه رد شدن ظاهر شده کلیک می‌کند.