روش زیر به شما امکان می دهد برنامه فرستنده iOS خود را از Cast SDK v2 به CAF Sender تبدیل کنید، که بر اساس GCKCastContext singleton است.
مقدمه
- CAF Sender همچنان در وبسایت توسعهدهنده Google Cast و CocoaPods مانند نسخه 2 توزیع میشود.
- کلاس های جدیدی اضافه شده اند که مسئولیت رعایت چک لیست طراحی Google Cast را بر عهده می گیرند.
- CAF Sender ویجت هایی را ارائه می دهد که با الزامات Cast UX مطابقت دارند. v2 هیچ مؤلفه رابط کاربری ارائه نمی دهد و شما را ملزم به پیاده سازی این ویجت ها می کند.
- طراحی CAF Sender با طراحی Cast Android SDK سازگار است.
- فرستنده CAF از بیت کد مانند نسخه 2 پشتیبانی می کند.
- زیرنویسهای بسته در CAF شبیه نسخه ۲ است.
وابستگی ها
CAF Sender از iOS نسخه 8 به بعد پشتیبانی می کند.
مقداردهی اولیه
در CAF، یک مرحله اولیه سازی صریح برای چارچوب Cast مورد نیاز است. این شامل مقداردهی اولیه تکی GCKCastContext
، با استفاده از GCKCastOptions
مناسب برای تعیین شناسه برنامه گیرنده وب و هر گزینه کلی دیگر است. این معمولاً در روش AppDelegate
-[application:didFinishLaunchingWithOptions:]
انجام می شود:
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
این مرحله در v2 ضروری نبود.
کشف دستگاه
در CAF، هنگامی که برنامه به پیشزمینه میآید و به پسزمینه میرود، فرآیند کشف بهطور خودکار توسط فریمورک شروع و متوقف میشود. کلاسهای GCKDeviceScanner
و GCKFilterCriteria
از v2 منسوخ شدهاند و نباید استفاده شوند.
دکمه Cast و گفتگوی Cast
در CAF، دکمه Cast و گفتگو توسط فریمورک ارائه می شود. دکمه Cast را می توان به صورت زیر نمونه سازی کرد و به نوار ناوبری اضافه کرد:
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
دکمه Cast را نیز می توان به استوری بورد اضافه کرد.
وقتی شخصی روی دکمه ضربه می زند، گفتگوی Cast به طور خودکار نمایش داده می شود.
کنترل دستگاه
در CAF، کنترل دستگاه تا حد زیادی توسط چارچوب انجام می شود. برنامه فرستنده نیازی به اتصال به دستگاه و راه اندازی برنامه Web Receiver ندارد. کلاس v2 GCKDeviceManager
منسوخ شده است و نباید استفاده شود. تعامل بین فرستنده و گیرنده وب اکنون به عنوان یک "جلسه" نشان داده می شود. کلاس CAF GCKSessionManager
چرخه عمر جلسه را مدیریت می کند و به طور خودکار جلسات را در پاسخ به حرکات کاربر شروع و متوقف می کند: یک جلسه زمانی شروع می شود که کاربر یک دستگاه Cast را در گفتگوی Cast انتخاب می کند و با ضربه زدن کاربر روی دکمه "توقف ارسال محتوا" در Cast پایان می یابد. گفتگو یا زمانی که خود برنامه فرستنده خاتمه می یابد. برنامه فرستنده می تواند با ثبت یک GCKSessionManagerListener
در GCKSessionManager
از رویدادهای چرخه عمر جلسه مطلع شود. پروتکل GCKSessionManagerListener
روشهای برگشت تماس را برای همه رویدادهای چرخه زندگی جلسه تعریف میکند.
کلاس GCKCastSession
یک جلسه با دستگاه Cast را نشان می دهد. این کلاس متدهایی برای کنترل حجم دستگاه و حالت های بی صدا دارد که قبلاً در نسخه 2 با استفاده از متدهایی در GCKDeviceManager
انجام می شد.
در نسخه 2، پروتکل GCKDeviceManagerDelegate
اعلانهایی را در مورد تغییرات وضعیت دستگاه، از جمله میزان صدا، وضعیت بیصدا، وضعیت آماده به کار و غیره ارائه میکرد. در CAF، اعلانهای تغییر حالت صدا/بیصدا از طریق روشهای برگشت به تماس در پروتکل GCKSessionManagerListener
ارائه میشوند. این شنوندگان در GCKSessionManager
ثبت شده اند. همه اعلانهای وضعیت دستگاه باقیمانده از طریق یک پروتکل GCKCastDeviceStatusListener
ارائه میشوند. این شنوندگان در GCKCastSession
ثبت شده اند.
منطق اتصال مجدد
مانند نسخه 2، CAF تلاش می کند تا اتصالات شبکه ای را که به دلیل از دست دادن موقت سیگنال WiFi یا سایر خطاهای شبکه از بین رفته اند، دوباره برقرار کند. این اکنون در سطح جلسه انجام می شود. یک جلسه می تواند زمانی که اتصال قطع می شود وارد حالت "تعلیق" شود و با بازیابی اتصال به حالت "متصل" برمی گردد. این فریم ورک از اتصال مجدد به برنامه Web Receiver و اتصال مجدد هر کانال Cast به عنوان بخشی از این فرآیند مراقبت می کند.
علاوه بر این، CAF از سرگیری خودکار جلسه را نیز اضافه می کند. اگر زمانی که یک جلسه Cast در حال انجام است، برنامه فرستنده به پسزمینه ارسال شود یا خاتمه یابد (با کشیدن انگشت یا به دلیل خرابی)، زمانی که برنامه فرستنده به پیشزمینه بازگشت یا راهاندازی مجدد شود، چارچوب تلاش میکند آن جلسه را از سر بگیرد. ; این به طور خودکار توسط GCKSessionManager
انجام می شود، که در هر نمونه ثبت شده GCKSessionManagerListener
، فراخوان مناسب را صادر می کند.
ثبت سفارشی کانال
در نسخه 2، کانالهای سفارشی (که با استفاده از زیرکلاس GCKCastChannel
یا GCKGenericChannel
و نمایندگی اجرا میشوند) با GCKDeviceManager
ثبت شدند. در CAF، کانالهای سفارشی با نمونه GCKCastSession
ثبت میشوند. ثبتنام را میتوان در روش بازگشت به تماس GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
انجام داد. برای برنامه های رسانه ای، دیگر نیازی به ثبت صریح GCKMediaControlChannel
نیست. برای جزئیات بیشتر به بخش زیر مراجعه کنید.
کنترل رسانه ها
کلاس v2 GCKMediaControlChannel
منسوخ شده است و نباید استفاده شود. در CAF، کلاس جدید GCKRemoteMediaClient
جایگزین آن می شود، که عملکردی معادل را در یک API راحت تر ارائه می دهد. نیازی به مقداردهی اولیه یا ثبت این شیء نیست. اگر برنامه Web Receiver که به آن متصل است از فضای نام رسانه پشتیبانی کند، فریم ورک به طور خودکار شی را نمونهسازی میکند و کانال رسانه زیرین را در زمان شروع جلسه ثبت میکند.
GCKRemoteMediaClient
با ویژگی -[remoteMediaClient]
شی GCKCastSession
قابل دسترسی است.
در نسخه 2، تمام درخواستهای رسانهای صادر شده در GCKMediaControlChannel
یک شناسه درخواست عددی را برمیگردانند و روشهای موجود در GCKMediaControlChannelDelegate
این شناسه را هنگام ارسال اعلانهایی درباره تکمیل یا شکست درخواست ارائه میکنند.
در CAF، تمام درخواستهای رسانهای صادر شده در GCKRemoteMediaClient
یک شی GCKRequest
برمیگردانند. این شی دارای یک پروتکل GCKRequestDelegate
مرتبط است که می تواند برای پیگیری پیشرفت و نتیجه نهایی درخواست استفاده شود.
v2 GCKMediaControlChannel
؛ از طریق GCKMediaControlChannelDelegate
، اعلانهایی در مورد تغییرات در وضعیت پخش کننده رسانه در گیرنده وب ارسال میکند. در CAF، GCKRemoteMediaClient
از طریق پروتکل GCKRemoteMediaClientListener
خود، فراخوانی معادل را ارائه می دهد. هر تعداد شنونده را می توان با GCKRemoteMediaClient
ثبت کرد، که به چندین مؤلفه فرستنده اجازه می دهد نمونه واحدی از GCKRemoteMediaClient
را که با جلسه مرتبط است به اشتراک بگذارند.
در نسخه 2، برنامه فرستنده باید مسئولیت همگام نگه داشتن رابط کاربری با وضعیت پخش کننده رسانه در گیرنده وب را بر عهده می گرفت. در CAF، کلاس GCKUIMediaController
بیشتر این مسئولیت را بر عهده می گیرد. برای مثال هایی در مورد نحوه استفاده از این مؤلفه به مستندات آموزشی Codelab مراجعه کنید.
پوشش مقدماتی
V2 یک رابط کاربری همپوشانی مقدماتی ارائه نمی دهد.
CAF کلاس GCKCastContext
را با روشی اضافه میکند -[presentCastInstructionsViewControllerOnce]
که یک برنامه فرستنده میتواند از آن برای برجسته کردن دکمه Cast هنگامی که برای اولین بار به کاربران نشان داده میشود، استفاده کند.
مینی کنترلر
در نسخه 2، باید یک مینی کنترلر را از ابتدا در برنامه فرستنده پیاده سازی کنید.
در CAF، فریم ورک یک نوار کنترل به نام GCKUIMiniMediaControlsViewController
را ارائه میکند که میتوانید آن را به صحنههایی که میخواهید کنترلهای مداوم را نشان دهید اضافه کنید. دو راه برای اضافه کردن کنترلر کوچک به برنامه فرستنده وجود دارد:
به چارچوب Cast اجازه دهید طرحبندی کنترلکننده کوچک را با پیچاندن نمای کنترلکننده موجود با
GCKUICastContainerViewController
و افزودن یکGCKUIMiniMediaControlsViewController
در پایین نمای آن، مدیریت کند.با استفاده از
-[createMiniMediaControlsViewController]
برای ایجاد یک نمونهGCKUIMiniMediaControlsViewController
و سپس اضافه کردن آن به کنترلر نمای کانتینر به عنوان یک نمای فرعی، مینی کنترلر را مستقیماً به نمای کنترلر موجود خود اضافه کنید.
کنترلر گسترش یافته
در نسخه 2، باید یک کنترلر توسعه یافته را از ابتدا در برنامه فرستنده پیاده سازی کنید.
CAF GCKUIMediaController
را اضافه میکند که میتوانید از آن برای پیادهسازی آسانتر یک کنترلر توسعهیافته استفاده کنید.
CAF یک ویجت کنترلر توسعه یافته از پیش ساخته شده GCKUIExpandedMediaControlsViewController
را اضافه می کند که می توانید به سادگی آن را به برنامه خود اضافه کنید. دیگر نیازی به پیاده سازی یک کنترلر توسعه یافته سفارشی با استفاده از GCKUIMediaController
ندارید.
ثبت اشکال زدایی
کلاس های GCKLogger
و GCKLoggerDelegate
از v2 با برخی تغییرات و پیشرفت ها به CAF منتقل می شوند.
روش GCKLoggerDelegate
-[logFromFunction:message:]
به نفع -[logMessage:fromFunction:]
منسوخ شده است.
اکنون میتوان پیامهای گزارش چارچوب را با ساختن یک نمونه GCKLoggerFilter
مناسب و اختصاص آن با تنظیم ویژگی -[filter]
در تکتنه GCKLogger
فیلتر کرد.
برنامه های نمونه
توصیه میکنیم به کدها و برنامههای نمونه نوشته شده برای CAF نگاه کنید.