העברה של אפליקציית השולח של iOS מ-Cast SDK v2 ל-Cast Application Framework (CAF)

ההליך הבא מאפשר להמיר את אפליקציית השולח שלכם ב-iOS מ-Cast SDK מגרסה 2 ל-CAF Sendr, המבוסס על סינגלטון GCKCastContext.

מבוא

  • השולח של CAF עדיין מופץ באתר למפתחים של Google Cast וב-CocoaPods, כמו v2.
  • נוספו כיתות חדשות שמשתמשות באחריות לעמידה ברשימת המשימות לעיצוב של Google Cast.
  • שולח ה-CAF מספק ווידג'טים שעומדים בדרישות של חוויית המשתמש ב-Cast. גרסה 2 לא סיפקה רכיבים כלשהם של ממשק המשתמש ודרושה מכם להטמיע את הווידג'טים האלה.
  • העיצוב של שולח CAF תואם לעיצוב של Cast Cast SDK.
  • שולח CAF תומך ב-Bitcode, כמו בגרסה 2.
  • כתוביות ב-CAF דומות לגרסה 2.

יחסי תלות

שולח CAF תומך ב-iOS גרסה 8 ואילך.

אתחול

ב-CAF, נדרש שלב אתחול מפורש למסגרת ההעברה. כדי להשתמש בפונקציה הזו צריך להפעיל את ה-singleon של GCKCastContext, ולהשתמש ב-GCKCastOptions המתאים כדי לציין את מזהה האפליקציה של מקלט האינטרנט וכל אפשרות גלובלית אחרת. הפעולה הזו מתבצעת בדרך כלל בשיטה AppDelegate -[application:didFinishLaunchingWithOptions:]:

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

שלב זה לא נדרש בגרסה 2.

גילוי מכשירים

ב-CAD, תהליך הגילוי מתחיל ומפסיק אוטומטית לפי המסגרת כשהאפליקציה מגיעה לחזית ועוברת לרקע, בהתאמה. הכיתות GCKDeviceScanner ו-GCKFilterCriteria מגרסה 2 הוצאו משימוש ואין להשתמש בהן.

לחצן Cast ותיבת דו-שיח להעברה

ב-CAF, הלחצן ותיבת הדו-שיח של ההעברה מסופקים על ידי המסגרת. אפשר ליצור אנימציה של לחצן ההעברה (cast) ולהוסיף אותו לסרגל הניווט באופן הבא:

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

אפשר גם להוסיף את לחצן הפעלת Cast אל לוח הסיפור.

כשמישהו מקיש על הלחצן, תיבת הדו-שיח של ההעברה מוצגת באופן אוטומטי.

שליטה במכשיר

ב-CAF, השליטה במכשיר מטופלת ברובה במסגרת. אפליקציית השולח לא צריכה להתחבר למכשיר ולהפעיל את אפליקציית מקלט האינטרנט. הכיתה v2GCKDeviceManager הוצאה משימוש ואין להשתמש בה. האינטראקציה בין השולח למקלט האינטרנט מיוצגת עכשיו כ'סשן'. מחלקת ה-CAF GCKSessionManager מטפלת במחזור החיים של הסשן, ומתחילה ומפסיקה סשנים באופן אוטומטי בתגובה לתנועות של משתמשים: סשן מתחיל כשהמשתמש בוחר מכשיר CAST בתיבת הדו-שיח של ההעברה ומסתיים כשהמשתמש מקיש על הלחצן 'הפסקת ההעברה' בתיבת הדו-שיח של ההעברה, או כשאפליקציית השולח מסתיימת. האפליקציה של השולח יכולה לקבל התראות על אירועים במחזור החיים של הסשן, על ידי רישום GCKSessionManagerListener ב-GCKSessionManager. הפרוטוקול GCKSessionManagerListener מגדיר שיטות לקריאה חוזרת (callback) לכל האירועים במחזור החיים של הסשן.

הכיתה GCKCastSession מייצגת סשן במכשיר CAST. בכיתה יש שיטות לשליטה בעוצמת הקול ובמצב ההשתקה של מכשירים, כפי ששימש בעבר בגרסה 2, באמצעות שיטות ב-GCKDeviceManager.

בגרסה 2, הפרוטוקול GCKDeviceManagerDelegate סיפק התראות על שינויים במצב המכשיר, כולל עוצמת הקול, מצב ההשתקה, מצב ההמתנה וכן הלאה. ב-CAF, התראות על שינוי עוצמת קול/השתקה מועברות בשיטות של התקשרות חזרה בפרוטוקול GCKSessionManagerListener. המאזינים האלה רשומים ב-GCKSessionManager. כל שאר ההתראות על מצב המכשיר מסופקות באמצעות פרוטוקול GCKCastDeviceStatusListener, המאזינים האלה רשומים באמצעות GCKCastSession.

לוגיקת החיבור מחדש

כמו בגרסה 2, CAF מנסה ליצור מחדש חיבורי רשת שאבדו בגלל אובדן זמני של אות ה-Wi-Fi או שגיאות רשת אחרות. הפעולה הזו מתבצעת עכשיו ברמת הסשן. סשן יכול להיכנס למצב "מושעה" כשהחיבור מתנתק. הוא יחזור למצב "מחובר" כשהחיבור יחודש. המסגרת מטפלת בחיבור מחדש של אפליקציית מקלט האינטרנט ובחיבור מחדש של ערוצי Cast כחלק מהתהליך.

בנוסף, ל-CAF תתווסף גם המשך הסשן האוטומטי. אם האפליקציה של השולח נשלחת ברקע או נסגרת (על ידי החלקה הצידה או עקב קריסה), בזמן שמתבצעת העברה (cast), ההגדרות ינסו לבצע הפעלה מחדש בזמן שאפליקציית השולח תחזור לחזית או שתופעל מחדש. הפעולה הזו תתבצע באופן אוטומטי על ידי GCKSessionManager, כך שהקריאות חזרה (callbacks) מתאימות יופיעו ב-GCKSessionManagerListener.

רישום ערוץ מותאם אישית

בגרסה 2, ערוצים מותאמים אישית (המוטמעים באמצעות תת-קבוצה GCKCastChannel או חשבון GCKGenericChannel והענקת גישה) נרשמו ב-GCKDeviceManager. ב-CAF, ערוצים מותאמים אישית רשומים במכונה GCKCastSession. אפשר לבצע את הרישום בשיטה GCKSessionManagerListener -[sessionManager:didStartCastSession:] שיטת התקשרות חזרה. באפליקציות מדיה אין יותר צורך לרשום במפורש את הדומיין GCKMediaControlChannel, בקטע הבא תוכלו לקרוא פרטים נוספים.

פקד מדיה

הכיתה v2GCKMediaControlChannel הוצאה משימוש ואין להשתמש בה. ה-CF מוחלף במחלקה החדשה GCKRemoteMediaClient, המספקת פונקציונליות מקבילה בממשק API נוח יותר. אין צורך להפעיל או לרשום במפורש את האובייקט הזה. המסגרת תיצור את האובייקט באופן אוטומטי ותרשום את ערוץ המדיה הבסיסי בזמן ההתחלה של הסשן, אם האפליקציה של מקלט האינטרנט המחוברת תומכת במרחב השמות של המדיה.

אפשר לגשת לקובץ GCKRemoteMediaClient באמצעות המאפיין -[remoteMediaClient] של האובייקט GCKCastSession.

בגרסה 2, כל בקשות המדיה שהונפקו ב-GCKMediaControlChannel יחזירו מזהה בקשה מספרי, ושיטות ב-GCKMediaControlChannelDelegate ישלחו את המזהה הזה בעת שליחת התראות לגבי השלמת הבקשה או הכשל.

CAF, כל בקשות המדיה שהונפקו ב-GCKRemoteMediaClient יחזירו אובייקט GCKRequest. לאובייקט הזה שויך פרוטוקול GCKRequestDelegate, שאפשר להשתמש בו כדי לעקוב אחרי ההתקדמות והתוצאה הסופית של הבקשה.

גרסה 2 GCKMediaControlChannel תשלח התראות על שינויים במצב נגן המדיה במקלט האינטרנט באמצעות GCKMediaControlChannelDelegate. ב-CAF, ה-GCKRemoteMediaClient מספק התקשרות חזרה מקבילה באמצעות הפרוטוקול GCKRemoteMediaClientListener. אפשר לרשום כל מספר של מאזינים דרך השדה GCKRemoteMediaClient, שמאפשר לרכיבים שונים של שולחים לשתף את המופע האחד של GCKRemoteMediaClient שמשויך לסשן.

בגרסה 2, על אפליקציית השולח חלה נטל לשמור על סנכרון הממשק של המשתמש עם מצב נגן המדיה במקלט האינטרנט. ב-CAF, הכיתה GCKUIMediaController לוקחת על עצמה את רוב האחריות הזו. במדריך של Codelab אפשר לראות דוגמאות לשימוש ברכיב הזה.

שכבת-על למתחילים

גרסה 2 לא מספקת ממשק משתמש עם שכבת-על למתחילים.

CAF מוסיף מחלקה GCKCastContext באמצעות שיטה-[presentCastInstructionsViewControllerOnce] כדי שאפליקציית השולח תוכל להשתמש בה כדי להדגיש את לחצן ההעברה כשהיא מוצגת למשתמשים לראשונה.

מיני-בקר

בגרסה 2, צריך להטמיע מיני שלט רחוק באפליקציית השולח.

במסגרת CAF, המסגרת מציגה סרגל בקרה, GCKUIMiniMediaControlsViewController, שאותו אפשר להוסיף לסצנות שבהן אתם רוצים להציג את הפקדים הקבועים. יש שתי דרכים להוסיף את הבקר המקוצר לאפליקציית שולח:

בקר מורחב

בגרסה 2, עליכם להטמיע שלט רחוק מורחב מההתחלה באפליקציית השולח.

CAF מוסיף את GCKUIMediaController, שבעזרתו אפשר להטמיע בקלות שלט רחוק מורחב.

CAF מוסיף ווידג'ט מורחב מובנה מראש GCKUIExpandedMediaControlsViewController שניתן פשוט להוסיף לאפליקציה. אין יותר צורך להטמיע בקר בקרה מורחב בהתאמה אישית באמצעות GCKUIMediaController.

רישום באגים לניפוי באגים

הכיתות GCKLogger ו-GCKLoggerDelegate מגרסה 2 מועברות ל-CAF, עם כמה שינויים ושיפורים.

השיטה GCKLoggerDelegate -[logFromFunction:message:] הוצאה משימוש ותוחלף ב--[logMessage:fromFunction:].

אפשר עכשיו לסנן את ההודעות שבמסגרת היומן על ידי יצירת מכונה מתאימה ב-GCKLoggerFilter, ולהקצות אותה על ידי הגדרת המאפיין -[filter] של ה-singleton של GCKLogger.

אפליקציות לדוגמה

מומלץ לבדוק את Codelabs ואת האפליקציות לדוגמה שנכתבו ל-CAF.