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

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

บทนำ

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

การอ้างอิง

CAF Sender รองรับ iOS เวอร์ชัน 8 ขึ้นไป

การเริ่มต้น

ใน CAF คุณจําเป็นต้องระบุขั้นตอนการแคสต์อย่างชัดเจนสําหรับเฟรมเวิร์ก "แคสต์" ซึ่งรวมถึงการเริ่มต้น GCKCastContext ซิงเกิลด้วยฟังก์ชัน 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 เฟรมเวิร์กส่วนใหญ่เป็นตัวควบคุมอุปกรณ์ แอปพลิเคชันผู้ส่งไม่จําเป็นต้องจัดการการเชื่อมต่อกับอุปกรณ์และเปิดตัวแอปพลิเคชัน Web Receiver คลาส v2 GCKDeviceManager เลิกใช้งานแล้วและไม่ควรใช้ ตอนนี้การโต้ตอบระหว่างผู้ส่งและผู้รับเว็บจะแสดงเป็น "เซสชัน" คลาส CAF GCKSessionManager จะจัดการวงจรเซสชันและเริ่มต้นและหยุดเซสชันโดยอัตโนมัติตามท่าทางสัมผัสของผู้ใช้ นั่นคือ เซสชันจะเริ่มต้นเมื่อผู้ใช้เลือกอุปกรณ์แคสต์ในกล่องโต้ตอบแคสต์ และจะสิ้นสุดเมื่อผู้ใช้แตะปุ่ม "หยุดแคสต์" ในกล่องโต้ตอบแคสต์หรือเมื่อแอปผู้ส่งจบลง แอปพลิเคชันผู้ส่งสามารถแจ้งเตือนเหตุการณ์ในวงจรของเซสชันได้โดยลงทะเบียน GCKSessionManagerListener กับ GCKSessionManager โปรโตคอล GCKSessionManagerListener กําหนดวิธีการเรียกกลับสําหรับเหตุการณ์ในวงจรของเซสชันทั้งหมด

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

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

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

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

นอกจากนี้ CAF ยังมีการเพิ่มการแสดงผลเซสชันอัตโนมัติด้วย หากแอปพลิเคชันของผู้ส่งส่งไปยังเบื้องหลังหรือถูกสิ้นสุดการใช้งาน (โดยการเลื่อนออกหรือเนื่องจากมีข้อขัดข้อง) ขณะเซสชันการแคสต์กําลังดําเนินการ เฟรมเวิร์กจะพยายามดําเนินการต่อในเซสชันนั้นเมื่อแอปพลิเคชันของผู้ส่งกลับไปยังเบื้องหน้าหรือเปิดขึ้นอีกครั้ง การดําเนินการนี้จะได้รับการจัดการโดยอัตโนมัติโดย 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 จํานวน Listener จํานวนมากจะลงทะเบียนกับ GCKRemoteMediaClient ได้ ซึ่งช่วยให้คอมโพเนนต์ของผู้ส่งหลายรายแชร์อินสแตนซ์ของ GCKRemoteMediaClient รายการเดียวที่เชื่อมโยงกับเซสชันได้

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

การวางซ้อนที่แนะนํา

V2 ไม่มี UI การวางซ้อนเริ่มต้น

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

ตัวควบคุมขนาดเล็ก

ใน v2 คุณต้องใช้ตัวควบคุมขนาดเล็กตั้งแต่ต้นในแอปผู้ส่ง

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

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

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

ตัวควบคุมแบบขยาย

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

CAF จะเพิ่ม GCKUIMediaController ซึ่งคุณจะใช้ตัวควบคุมแบบขยายได้ง่ายขึ้น

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

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

ชั้น GCKLogger และ GCKLoggerDelegate จะดําเนินการใน CAF ใน CAF โดยมีการเปลี่ยนแปลงและการเพิ่มประสิทธิภาพบางอย่าง

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

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

แอปตัวอย่าง

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