روش زیر به شما امکان می دهد برنامه فرستنده 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 نگاه کنید.