نقل تطبيق المُرسِل الذي يعمل بنظام التشغيل iOS من الإصدار الثاني من حزمة تطوير البرامج (SDK) إلى Google Cast إلى إطار عمل الإرسال (CAF)

يتيح لك الإجراء التالي تحويل تطبيق المُرسِل الذي يعمل بنظام التشغيل iOS من Cast SDK v2 إلى مُرسِل CAF، استنادًا إلى GCKCastContext singleton.

المقدمة

  • لا يزال موزع CAF موزعًا على الموقع الإلكتروني لمطوّري Google Cast وCocoaPods، مثل الإصدار 2.
  • تمت إضافة صفوف جديدة تتحمل المسؤولية عن الالتزام بقائمة التحقق من تصميم Google Cast.
  • يوفر "مُرسِل CAF" أدوات تتوافق مع متطلبات Cast UX، ولم يوفّر الإصدار 2 أي مكوّنات من واجهة المستخدم وطلب منك تطبيق هذه الأدوات.
  • يتوافق تصميم مرسل CAF مع تصميم Cast Android SDK.
  • يدعم مُرسِل CAF رمز البت، مثل الإصدار 2.
  • إن الترجمة والشرح في CAF مشابهة للإصدار 2.

العناصر التابعة

يدعم تطبيق CAF Sender الإصدار 8 من نظام التشغيل iOS والإصدارات الأحدث.

الإعداد

في CAF، يلزم إجراء خطوة تهيئة صريحة لإطار عمل Cast. ويشمل ذلك إعداد GCKCastContext singleton، باستخدام معرّف مناسب GCKCastOptions لتحديد معرّف تطبيق مستلم الويب وأي خيارات عامة أخرى. ويتم هذا عادةً باستخدام طريقة AppDelegate -[application:didFinishLaunchingWithOptions:]:

GCKCastOptions *options = [[GCKCastOptions alloc]
    initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];

لم تكن هذه الخطوة ضرورية في الإصدار 2.

رصد الأجهزة

في CAF، تبدأ عملية الاكتشاف وتوقفها تلقائيًا إطار الصورة عندما يظهر التطبيق في المقدّمة وينتقل إلى الخلفية على التوالي. تم إيقاف الصفين GCKDeviceScanner وGCKFilterCriteria من الإصدار 2 ويجب عدم استخدامهما.

زر الإرسال ومربع حوار الإرسال

في CAF، يتم تقديم زر الإرسال ومربع الحوار من إطار العمل. يمكن إنشاء مثيل لزر الإرسال وإضافته إلى شريط التنقل على النحو التالي:

GCKUICastButton *castButton =
    [[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
    [[UIBarButtonItem alloc] initWithCustomView:castButton];

يمكن أيضًا إضافة زر الإرسال إلى لوحة العمل.

عندما ينقر شخص ما على الزر، يتم تقديم مربع حوار الإرسال تلقائيًا.

التحكّم في الجهاز

في CAF، يتم التعامل مع التحكم في الأجهزة إلى حد كبير من خلال إطار العمل. لا يحتاج تطبيق المرسل إلى التعامل مع الاتصال بالجهاز وإطلاق تطبيق مستلم الويب. تم إيقاف الفئة v2 GCKDeviceManager ويجب عدم استخدامها. يتم الآن تمثيل التفاعل بين المُرسِل ومستقبل الويب على أنه "جلسة". تعالج فئة CAF GCKSessionManager دورة حياة الجلسة، وتبدأ الجلسات وتوقفها تلقائيًا استجابةً لإيماءات المستخدم: تبدأ الجلسة عندما يختار المستخدم جهاز البث في مربع حوار "الإرسال" وتنتهي عند نقر المستخدم على الزر "إيقاف الإرسال" في مربّع الحوار "إرسال" أو عند إنهاء تطبيق المُرسِل نفسه. يمكن إشعار تطبيق المُرسِل بأحداث دورة الحياة من خلال تسجيل GCKSessionManagerListener باستخدام GCKSessionManager. يحدّد بروتوكول GCKSessionManagerListener طرق معاودة الاتصال لجميع أحداث مراحل النشاط في الجلسة.

وتمثّل فئة GCKCastSession جلسة مع جهاز بث. تتضمن الصف طرقًا للتحكّم في مستوى صوت الجهاز وكتم الصوت، وقد تم ذلك في الإصدار 2 باستخدام طرق على GCKDeviceManager.

في الإصدار 2، يوفّر بروتوكول GCKDeviceManagerDelegate إشعارات بالتغييرات في حالة الجهاز، بما في ذلك مستوى الصوت وحالة كتم الصوت وحالة الاستعداد وما إلى ذلك. في CAF، يتم تسليم إشعارات تغيير مستوى الصوت/كتم الصوت عبر طرق معاودة الاتصال في بروتوكول GCKSessionManagerListener، ويتم تسجيل هؤلاء المستمعين باستخدام GCKSessionManager. يتم تسليم جميع إشعارات حالة الجهاز المتبقية من خلال بروتوكول GCKCastDeviceStatusListener، ويتم تسجيل هؤلاء المستمعين باستخدام GCKCastSession.

منطق إعادة الاتصال

وكما هو الحال مع الإصدار 2، يحاول CAF إعادة إنشاء اتصالات الشبكة المفقودة بسبب فقدان إشارة WiFi المؤقتة أو أخطاء الشبكة الأخرى. ويتم ذلك الآن على مستوى الجلسة، ويمكن أن تدخل الجلسة حالة "معلّقة" عند فقد الاتصال، وسيتم نقلها مرة أخرى إلى الحالة "مرتبط" عند استعادة الاتصال. ويهدف إطار العمل إلى إعادة الاتصال بتطبيق مستقبل الويب وإعادة ربط أي من قنوات الإرسال كجزء من هذه العملية.

بالإضافة إلى ذلك، يضيف CAF أيضًا استئنافًا تلقائيًا للجلسة. إذا تم إرسال تطبيق المُرسِل إلى الخلفية أو تم إنهاؤه (من خلال التمرير السريع بعيدًا أو بسبب حدوث عطل) أثناء كون جلسة الإرسال قيد التقدّم، سيحاول إطار العمل استئناف هذه الجلسة عند عودة تطبيق المُرسِل إلى المقدمة أو عند إعادة تشغيله، ويتم التعامل مع هذه المشكلة تلقائيًا بواسطة GCKSessionManager، ما سيؤدي إلى إصدار استدعاءات مناسبة في أي مثيلات مسجَّلة من GCKSessionManagerListener.

تسجيل قناة مخصّصة

في الإصدار 2، تم تسجيل القنوات المخصّصة (التي يتم تنفيذها باستخدام فئة فرعية GCKCastChannel أو GCKGenericChannel وتفويض) في GCKDeviceManager. في CAF، يتم تسجيل القنوات المخصّصة بدلاً من ذلك في مثيل GCKCastSession. يمكن إجراء التسجيل باستخدام GCKSessionManagerListener -[sessionManager:didStartCastSession:] طريقة معاودة الاتصال. بالنسبة إلى تطبيقات الوسائط، لم يعد من الضروري تسجيل GCKMediaControlChannel بوضوح، ويمكنك الاطّلاع على القسم التالي للحصول على مزيد من التفاصيل.

التحكم في الوسائط

تم إيقاف الفئة v2 GCKMediaControlChannel وعدم استخدامها. وفي CAF، حلّت الفئة GCKRemoteMediaClient الجديدة محلّها، حيث توفّر وظائف مكافئة في واجهة برمجة تطبيقات أكثر ملاءمة. ليس من الضروري تهيئة هذا الكائن أو تسجيله بشكل صريح، حيث سينشئ إطار العمل تلقائيًا الكائن ويسجّل قناة الوسائط الأساسية في وقت بدء الجلسة إذا كان تطبيق مستلم الويب الذي يتم توصيله متوافقًا مع مساحة اسم الوسائط.

ويمكن الوصول إلى GCKRemoteMediaClient باستخدام السمة -[remoteMediaClient] لكائن GCKCastSession.

في الإصدار 2، ستعرِض جميع طلبات الوسائط الصادرة على GCKMediaControlChannel معرّف طلب رقميًا، وتقدّم الطرق المتوفّرة على GCKMediaControlChannelDelegate هذا المعرّف عند إرسال إشعارات بشأن إكمال الطلب أو تعذّر إتمامه.

في CAF، ستعرض جميع طلبات الوسائط الصادرة على GCKRemoteMediaClient كائنًا GCKRequest . هذا الكائن مرتبط GCKRequestDelegate ببروتوكول يمكن استخدامه لتتبّع مدى تقدّم الطلب والنتيجة النهائية له.

سيرسل الإصدار 2 GCKMediaControlChannel، إشعارات حول التغييرات في حالة مشغّل الوسائط على مستقبِل الويب عبر GCKMediaControlChannelDelegate. في CAF، يوفر GCKRemoteMediaClient استدعاءات استدعاء مكافئة عبر بروتوكول GCKRemoteMediaClientListener. يمكن تسجيل أي عدد من المستمعين مع GCKRemoteMediaClient، ما يسمح لمكونات المُرسِل المتعددة بمشاركة المثيل الواحد من GCKRemoteMediaClient المرتبط بالجلسة.

في الإصدار 2، كان على تطبيق المرسل تحمّل عبء الحفاظ على مزامنة واجهة المستخدم مع حالة مشغل الوسائط على مستلم الويب. في CAF، يتحمّل الصف GCKUIMediaController معظم هذه المسؤولية، ويمكنك الاطّلاع على مستندات البرنامج التعليمي حول الترميز للحصول على أمثلة حول كيفية استخدام هذا المكوّن.

تراكب تمهيدي

لا يوفّر الإصدار الثاني واجهة مستخدم تمهيدية تظهر على سطح الفيديو.

يضيف CAF الصف GCKCastContext بطريقة -[presentCastInstructionsViewControllerOnce] يمكن لتطبيق المُرسِل استخدامها لتمييز زر الإرسال عند عرضه للمرة الأولى للمستخدمين.

وحدة تحكم صغيرة

في الإصدار 2، تحتاج إلى تنفيذ وحدة تحكم مصغرة من البداية في تطبيق المرسل.

في CAF، يوفر إطار العمل شريط تحكم، GCKUIMiniMediaControlsViewController، يمكنك إضافته إلى المشاهد التي تريد عرض عناصر التحكم الدائمة فيها. هناك طريقتان لإضافة وحدة التحكم المصغرة إلى تطبيق المرسل:

وحدة تحكم موسعة

في الإصدار 2، تحتاج إلى تنفيذ وحدة تحكم موسّعة من البداية في تطبيق المرسل.

يضيف CAF GCKUIMediaController، الذي يمكنك استخدامه لتنفيذ وحدة تحكم موسّعة بسهولة أكبر.

يضيف CAF أداة تحكم موسّعة تم إنشاؤها مسبقًا GCKUIExpandedMediaControlsViewController يمكنك إضافتها إلى تطبيقك. لم تعد بحاجة إلى تطبيق وحدة تحكم موسّعة مخصصة باستخدام GCKUIMediaController.

تسجيل تصحيح الأخطاء

تم نقل فئات GCKLogger وGCKLoggerDelegate من الإصدار 2 إلى CAF، مع إدخال بعض التغييرات والتحسينات.

تم إيقاف طريقة GCKLoggerDelegate -[logFromFunction:message:] لصالح -[logMessage:fromFunction:].

يمكن الآن فلترة رسائل سجلّ إطار العمل من خلال إنشاء مثيل مناسب على GCKLoggerFilter وتحديده من خلال ضبط السمة -[filter] في أغنية GCKLogger منفردة.

نماذج تطبيقات

نقترح الاطّلاع على الدروس التطبيقية حول الترميز و نماذج التطبيقات التي تمّت كتابتها في CAF.