ย้ายข้อมูลแอปผู้ส่ง iOS จาก Cast SDK v2 ไปยัง Cast Application Framework (CAF)

ขั้นตอนต่อไปนี้จะช่วยให้คุณแปลงแอปผู้ส่ง iOS จาก Cast SDK ได้ v2 ไปยังผู้ส่ง CAF ซึ่งอิงตามข้อมูล GCKCastContext Singleton

บทนำ

  • ผู้ส่ง CAF ยังคงกระจายอยู่ใน เว็บไซต์นักพัฒนาซอฟต์แวร์ Google Cast และ CocoaPods เช่น v2
  • มีการเพิ่มชั้นเรียนใหม่ที่มีหน้าที่ในการปฏิบัติตามข้อกำหนด รายการตรวจสอบการออกแบบ Google Cast
  • ผู้ส่ง CAF มีวิดเจ็ตที่เป็นไปตามข้อกำหนด Cast UX v2 ไม่ได้ให้คอมโพเนนต์ UI ใดๆ เลย และจำเป็นต้องให้คุณ วิดเจ็ตเหล่านี้
  • การออกแบบ CAF Sender สอดคล้องกับการออกแบบ Cast Android SDK
  • ผู้ส่ง CAF รองรับบิตโค้ด เช่น v2
  • คำบรรยายแทนเสียงใน CAF คล้ายกับ v2

การอ้างอิง

ผู้ส่ง CAF รองรับ iOS เวอร์ชัน 8 ขึ้นไป

การเริ่มต้น

ใน CAF คุณต้องทำขั้นตอนเริ่มต้นอย่างชัดเจนสำหรับเฟรมเวิร์กของ Cast ช่วงเวลานี้ เกี่ยวข้องกับการเริ่มต้น GCKCastContext Singleton โดยใช้ GCKCastOptions เพื่อระบุรหัสแอปพลิเคชัน Web Receiver และรหัสแอปพลิเคชันส่วนกลางอื่นๆ ตัวเลือก โดยทั่วไปการดำเนินการนี้จะทำในAppDelegate เมธอด -[application:didFinishLaunchingWithOptions:]:

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

ไม่จำเป็นต้องทำขั้นตอนนี้ในเวอร์ชัน 2

การค้นหาอุปกรณ์

ใน CAF ขั้นตอนการค้นหาจะเริ่มต้นและหยุดโดยอัตโนมัติโดย เมื่อแอปทำงานเบื้องหน้า และไปที่เบื้องหลัง ตามลำดับ ชั้นเรียน GCKDeviceScanner และ GCKFilterCriteria จาก v2 คือ เลิกใช้งานแล้วและไม่ควรนำมาใช้

ปุ่ม "แคสต์" และกล่องโต้ตอบ "แคสต์"

ใน 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 โปรโตคอลจะกำหนดเมธอด Callback สำหรับเหตุการณ์ในวงจรทั้งหมดของเซสชัน

GCKCastSession คลาสแสดงถึงเซสชันที่มีอุปกรณ์แคสต์ ชั้นเรียน มีวิธีในการควบคุมระดับเสียงของอุปกรณ์และสถานะปิดเสียง เคยทำใน v2 โดยใช้เมธอดใน GCKDeviceManager

ในเวอร์ชัน 2 พารามิเตอร์ GCKDeviceManagerDelegate การแจ้งเตือนการเปลี่ยนแปลงจากโปรโตคอล สถานะอุปกรณ์ รวมถึงระดับเสียง สถานะปิดเสียง สถานะสแตนด์บาย และอื่นๆ ใน CAF การแจ้งเตือนการเปลี่ยนแปลงระดับเสียง/ปิดเสียงจะส่งผ่าน Callback ใน GCKSessionManagerListener โปรโตคอล ผู้ฟังเหล่านี้จะลงทะเบียนกับ GCKSessionManager การแจ้งเตือนสถานะอุปกรณ์ที่เหลือทั้งหมด ส่งผ่าน GCKCastDeviceStatusListener โปรโตคอล ผู้ฟังเหล่านี้จะลงทะเบียนกับ GCKCastSession

ตรรกะการเชื่อมต่ออีกครั้ง

เช่นเดียวกับเวอร์ชัน 2 CAF จะพยายามเริ่มต้นการเชื่อมต่อเครือข่ายที่ สูญหายไปเนื่องจากการสูญเสียสัญญาณ Wi-Fi ชั่วคราว หรือข้อผิดพลาดอื่นๆ ของเครือข่าย ขณะนี้คือ ทำที่ระดับเซสชัน เซสชันสามารถป้อนคำว่า "ถูกระงับ" ระบุเมื่อ การเชื่อมต่อถูกตัดและจะเปลี่ยนกลับเป็น "เชื่อมต่อแล้ว" ระบุเมื่อ กลับมาเชื่อมต่ออีกครั้ง โดยเฟรมเวิร์กจะช่วยเชื่อมต่อกับอินเทอร์เน็ต แอปพลิเคชันตัวรับเว็บและการเชื่อมต่อช่องการแคสต์อีกครั้ง ซึ่งเป็นส่วนหนึ่งของกระบวนการนี้

นอกจากนี้ CAF ยังเพิ่มการเริ่มเซสชันอีกครั้งโดยอัตโนมัติอีกด้วย หากผู้ส่ง ถูกส่งไปยังพื้นหลังหรือถูกยกเลิก (ด้วยการกวาดออกไป หรือ เพราะเหตุขัดข้อง) ขณะที่เซสชันการแคสต์ กำลังดำเนินอยู่ เฟรมเวิร์กนี้จะ พยายามดำเนินเซสชันนั้นต่อเมื่อแอปพลิเคชันผู้ส่งกลับไปที่ เบื้องหน้าหรือเปิดอีกครั้ง ซึ่งจะถูกจัดการโดยอัตโนมัติโดย GCKSessionManager ซึ่งจะออก Callback ที่ถูกต้องสำหรับ GCKSessionManagerListener อินสแตนซ์

การลงทะเบียนแชแนลที่กำหนดเอง

ในเวอร์ชัน 2 แชแนลที่กำหนดเอง (ใช้งานโดยใช้ GCKCastChannel คลาสย่อยหรือ GCKGenericChannel และตัวแทน) ได้ลงทะเบียนกับ GCKDeviceManager ใน CAF แชแนลที่กำหนดเองจะลงทะเบียนกับ GCKCastSession อินสแตนซ์ การลงทะเบียนสามารถทำได้ใน GCKSessionManagerListener -[sessionManager:didStartCastSession:] Callback Method สำหรับแอปพลิเคชันสื่อ คุณไม่จำเป็นต้อง ลงทะเบียน GCKMediaControlChannel; ดูรายละเอียดเพิ่มเติมได้ในส่วนต่อไปนี้

ส่วนควบคุมสื่อ

คลาส v2 GCKMediaControlChannel เลิกใช้งานแล้วและไม่ควรนำมาใช้ ใน CAF มันจะถูกแทนที่โดย GCKRemoteMediaClient ซึ่งมีฟังก์ชันการทำงานที่เทียบเท่ากันใน API ที่สะดวกกว่า ไม่จำเป็นต้องเริ่มต้นหรือลงทะเบียนออบเจ็กต์นี้อย่างชัดแจ้ง เวลา จะสร้างอินสแตนซ์ของออบเจ็กต์โดยอัตโนมัติและลงทะเบียน ช่องทางสื่อ ณ เวลาเริ่มต้นเซสชัน หากแอปพลิเคชันตัวรับเว็บกำลังเชื่อมต่ออยู่ ให้รองรับเนมสเปซสื่อ

GCKRemoteMediaClient สามารถเข้าถึงได้ด้วย -[remoteMediaClient] ของ GCKCastSession ออบเจ็กต์

ในเวอร์ชัน 2 คำขอสื่อทั้งหมดที่ออกใน GCKMediaControlChannel จะแสดงรหัสคำขอที่เป็นตัวเลข และวิธีการ GCKMediaControlChannelDelegate จะระบุรหัสนี้เมื่อส่งการแจ้งเตือนเกี่ยวกับการดำเนินการตามคำขอให้เสร็จสมบูรณ์ หรือ ล้มเหลว

ใน CAF คำขอสื่อทั้งหมดที่ออกในวันที่ GCKRemoteMediaClient จะแสดงผล GCKRequest object; ออบเจ็กต์นี้มีการเชื่อมโยง GCKRequestDelegate โปรโตคอล ซึ่งสามารถใช้ติดตามความคืบหน้าและผลลัพธ์สุดท้ายของคำขอ

เวอร์ชัน 2 GCKMediaControlChannel; จะส่งการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงสถานะของมีเดียเพลเยอร์บนตัวรับเว็บ ผ่านทาง GCKMediaControlChannelDelegate ใน CAF GCKRemoteMediaClient ให้ Callback ที่เทียบเท่ากันผ่าน GCKRemoteMediaClientListener ผู้ฟังทุกคนสามารถลงทะเบียนกับ GCKRemoteMediaClient ซึ่งช่วยให้คอมโพเนนต์ของผู้ส่งหลายรายแชร์ อินสแตนซ์เดียวของ GCKRemoteMediaClient ที่เชื่อมโยงกับเซสชัน

ในเวอร์ชัน 2 แอปพลิเคชันของผู้ส่งต้องรับภาระในการรักษาผู้ใช้ ซิงค์ข้อมูลกับสถานะของมีเดียเพลเยอร์บนตัวรับเว็บ ใน CAF คลาส GCKUIMediaController เข้ามารับหน้าที่รับผิดชอบนี้เป็นส่วนใหญ่ โปรดดู บทแนะนำ Codelab เพื่อดูตัวอย่างเกี่ยวกับวิธีใช้คอมโพเนนต์นี้

การวางซ้อนบทนำ

V2 ไม่มี UI การซ้อนทับช่วงแนะนำ

CAF เพิ่มคลาส GCKCastContext ด้วยวิธีการ -[presentCastInstructionsViewControllerOnce] ที่แอปผู้ส่งสามารถใช้เพื่อไฮไลต์ปุ่ม "แคสต์" เมื่อแสดงครั้งแรก ให้แก่ผู้ใช้

มินิคอนโทรลเลอร์

ในเวอร์ชัน 2 คุณต้องใช้ตัวควบคุมขนาดเล็กตั้งแต่เริ่มต้นใน Sender App

ใน CAF เฟรมเวิร์กนี้จะมีแถบควบคุม GCKUIMiniMediaControlsViewController ซึ่งคุณสามารถเพิ่มลงในฉากที่ต้องการแสดง การเพิ่มตัวควบคุมขนาดเล็กลงในแอปผู้ส่งทำได้ 2 วิธีดังนี้

  • ให้เฟรมเวิร์ก Cast จัดการเลย์เอาต์ของตัวควบคุมขนาดเล็กได้โดยการรวม ตัวควบคุมมุมมองที่มีอยู่ GCKUICastContainerViewController และเพิ่ม GCKUIMiniMediaControlsViewController ที่ด้านล่างของมุมมอง

  • เพิ่มตัวควบคุมขนาดเล็กลงในตัวควบคุมมุมมองที่มีอยู่โดยตรงโดยใช้ -[createMiniMediaControlsViewController] เพื่อสร้าง GCKUIMiniMediaControlsViewController แล้วเพิ่มลงในตัวควบคุมมุมมองคอนเทนเนอร์เป็นมุมมองย่อย

ตัวควบคุมที่ขยาย

ในเวอร์ชัน 2 คุณต้องใช้ตัวควบคุมแบบขยายตั้งแต่ต้น แอปผู้ส่ง

การเพิ่ม CAF GCKUIMediaController ซึ่งคุณสามารถใช้เพื่อให้ใช้งานตัวควบคุมแบบขยายได้ง่ายขึ้น

CAF เพิ่มวิดเจ็ตตัวควบคุมแบบขยายที่สร้างไว้ล่วงหน้า GCKUIExpandedMediaControlsViewController ซึ่งคุณเพิ่มลงในแอปได้ง่ายๆ คุณไม่จำเป็นต้องใช้ส่วนขยายที่กำหนดเองอีกต่อไป ตัวควบคุมที่ใช้ GCKUIMediaController

การบันทึกการแก้ไขข้อบกพร่อง

GCKLogger และ GCKLoggerDelegate คลาสจาก v2 จะส่งต่อไปยัง CAF โดยมีการเปลี่ยนแปลงและการปรับปรุงบางอย่าง

GCKLoggerDelegate เมธอด -[logFromFunction:message:] มี เลิกใช้งานแล้วเพื่อให้ -[logMessage:fromFunction:]

ในตอนนี้ คุณสามารถกรองข้อความบันทึกเฟรมเวิร์กได้โดยการสร้าง GCKLoggerFilter อินสแตนซ์และกำหนดโดยการตั้งค่า พร็อพเพอร์ตี้ -[filter] ของ GCKLogger ซิงเกิล

แอปตัวอย่าง

เราขอแนะนำให้ดูที่ codelabs และ ตัวอย่างแอปที่เขียนสำหรับ CAF