ขั้นตอนต่อไปนี้ช่วยให้คุณแปลงแอปผู้ส่ง 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