Memigrasikan Aplikasi Pengirim iOS dari Cast SDK v2 ke Framework Aplikasi Cast (CAF)

Prosedur berikut memungkinkan Anda mengonversi aplikasi pengirim iOS dari Cast SDK v2 ke Pengirim CAF, yang didasarkan pada GCKCastContext singleton.

Pengantar

  • Pengirim CAF masih didistribusikan di Situs developer Google Cast dan CocoaPods, seperti v2.
  • Telah ditambahkan kelas baru yang bertanggung jawab untuk mematuhi daftar periksa desain Google Cast.
  • Pengirim CAF menyediakan widget yang sesuai dengan persyaratan UX Cast; v2 tidak menyediakan komponen UI apa pun dan mengharuskan Anda menerapkan widget-widget ini.
  • Desain Pengirim CAF konsisten dengan desain Cast Android SDK.
  • CAF Sender mendukung Bitcode, seperti v2.
  • Pemberian teks tertutup pada CAF mirip dengan v2.

Dependensi

CAF Sender mendukung iOS versi 8 dan yang lebih baru.

Inisialisasi

Dalam CAF, langkah inisialisasi eksplisit diperlukan untuk framework Cast. Ini melibatkan inisialisasi GCKCastContext singleton, menggunakan model GCKCastOptions untuk menentukan ID aplikasi Penerima Web dan ID lainnya. Hal ini biasanya dilakukan di AppDelegate Metode -[application:didFinishLaunchingWithOptions:]:

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

Langkah ini tidak diperlukan di v2.

Penemuan perangkat

Dalam CAF, proses penemuan dimulai dan dihentikan secara otomatis oleh saat aplikasi berada di latar depan dan berpindah ke latar belakang, secara berurutan. Class GCKDeviceScanner dan GCKFilterCriteria dari v2 adalah tidak digunakan lagi dan tidak boleh digunakan.

Tombol Cast dan dialog Cast

Di CAF, dialog dan tombol Cast disediakan oleh framework. Pemeran dapat dibuat instance-nya dan ditambahkan ke menu navigasi sebagai berikut:

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

Tombol Cast juga dapat ditambahkan ke storyboard.

Saat seseorang mengetuk tombol, dialog Transmisi akan otomatis ditampilkan.

Kontrol perangkat

Dalam CAF, kontrol perangkat sebagian besar ditangani oleh framework. Pengirim aplikasi tidak perlu menangani koneksi ke perangkat dan meluncurkan Aplikasi Penerima Web. Class v2 GCKDeviceManager tidak digunakan lagi dan seharusnya tidak digunakan. Interaksi antara pengirim dan Penerima Web sekarang direpresentasikan sebagai "sesi". CAF GCKSessionManager menangani siklus proses sesi dan memulai dan menghentikan sesi secara otomatis sebagai respons terhadap {i>gesture <i}pengguna: dimulai saat pengguna memilih perangkat Transmisi dalam dialog Cast dan diakhiri saat pengguna mengetuk tombol "Hentikan Transmisi" di dialog Cast atau saat aplikasi pengirim itu sendiri berhenti. Aplikasi pengirim dapat diberi tahu tentang sesi peristiwa siklus proses dengan mendaftarkan GCKSessionManagerListener dengan GCKSessionManager. Tujuan GCKSessionManagerListener menetapkan metode callback untuk semua peristiwa siklus proses sesi.

Tujuan GCKCastSession mewakili sesi dengan perangkat Cast. Kelas memiliki metode untuk mengendalikan volume perangkat dan keadaan bisu, yang sebelumnya dilakukan di v2 menggunakan metode pada GCKDeviceManager

Pada v2, atribut GCKDeviceManagerDelegate protokol yang disediakan notifikasi perubahan ke status perangkat, termasuk volume, status bisukan, status standby, dan sebagainya. Dalam CAF, notifikasi perubahan status volume/bisukan dikirimkan melalui callback metode dalam GCKSessionManagerListener protokol; pemroses ini terdaftar dengan GCKSessionManager. Semua notifikasi status perangkat lainnya dikirimkan melalui GCKCastDeviceStatusListener protokol; pemroses ini terdaftar dengan GCKCastSession.

Logika menghubungkan kembali

Seperti halnya v2, CAF mencoba menghubungkan kembali koneksi jaringan yang hilang karena kehilangan sinyal WiFi sementara atau kesalahan jaringan lainnya. Hal ini sekarang dilakukan di tingkat sesi; sesi dapat masuk ke status "suspended" menyatakan kapan koneksi terputus, dan akan beralih kembali ke "terhubung" menyatakan kapan konektivitas pulih. Kerangka kerja ini akan membantu menghubungkan kembali ke Aplikasi Penerima Web dan menghubungkan kembali saluran Cast sebagai bagian dari proses ini.

Selain itu, CAF juga menambahkan melanjutkan sesi otomatis. Jika pengirim aplikasi dikirim ke latar belakang atau dihentikan (dengan menggeser karena terjadi error) saat sesi Cast sedang berlangsung, framework akan mencoba melanjutkan sesi tersebut ketika aplikasi pengirim kembali ke di latar depan atau diluncurkan kembali; ini ditangani secara otomatis oleh GCKSessionManager, yang akan mengeluarkan callback yang sesuai pada tiap GCKSessionManagerListener instance Compute Engine.

Pendaftaran saluran khusus

Di v2, saluran khusus (diimplementasikan menggunakan GCKCastChannel atau subclass GCKGenericChannel dan delegasi) terdaftar di GCKDeviceManager. Di CAF, saluran khusus didaftarkan dengan GCKCastSession di instance Compute Engine. Pendaftaran dapat dilakukan di GCKSessionManagerListener -[sessionManager:didStartCastSession:] . Untuk aplikasi media, tidak perlu lagi daftarkan GCKMediaControlChannel; lihat bagian berikut untuk detail selengkapnya.

Kontrol media

Class v2 GCKMediaControlChannel tidak digunakan lagi dan tidak boleh digunakan. Dalam CAF, model ini digantikan oleh GCKRemoteMediaClient , yang menyediakan fungsi setara dalam API yang lebih praktis. Tidak perlu menginisialisasi atau mendaftarkan objek ini secara eksplisit; tindakan akan secara otomatis membuat instance objek dan mendaftarkan saluran media pada waktu mulai sesi jika aplikasi Penerima Web sedang tersambung untuk mendukung namespace media.

Tujuan GCKRemoteMediaClient dapat diakses dengan -[remoteMediaClient] properti dari GCKCastSession .

Di v2, semua permintaan media yang dikeluarkan pada GCKMediaControlChannel akan mengembalikan ID permintaan numerik, dan metode pada GCKMediaControlChannelDelegate akan memberikan ID ini saat mengirimkan notifikasi tentang penyelesaian permintaan atau gagal.

Di CAF, semua permintaan media yang diajukan pada GCKRemoteMediaClient akan mengembalikan GCKRequest object; objek ini memiliki elemen GCKRequestDelegate protokol yang dapat digunakan untuk melacak kemajuan dan hasil akhir permintaan.

V2 GCKMediaControlChannel; akan mengirim pemberitahuan tentang perubahan status pemutar media di Web Receiver melalui GCKMediaControlChannelDelegate. Pada CAF, atribut GCKRemoteMediaClient menyediakan callback yang setara melalui GCKRemoteMediaClientListener dan berperforma tinggi karena merupakan protokol biner. Sejumlah pemroses bisa didaftarkan dengan GCKRemoteMediaClient, yang memungkinkan beberapa komponen pengirim berbagi satu instance GCKRemoteMediaClient yang terkait dengan sesi.

Pada v2, aplikasi pengirim harus memikul beban menjaga pengguna sinkron dengan status pemutar media pada Web Receiver. Di CAF, class GCKUIMediaController mengambil sebagian besar tanggung jawab ini; lihat tutorial codelab dokumentasi untuk contoh cara menggunakan komponen ini.

Overlay perkenalan

V2 tidak menyediakan UI overlay pengantar.

CAF menambahkan class GCKCastContext dengan metode -[presentCastInstructionsViewControllerOnce] yang dapat digunakan aplikasi pengirim untuk menyoroti tombol Cast saat pertama kali ditampilkan kepada pengguna.

Pengontrol mini

Di v2, Anda perlu mengimplementasikan pengontrol mini dari awal di aplikasi pengirim.

Dalam CAF, kerangka kerja menyediakan bilah kontrol, GCKUIMiniMediaControlsViewController, yang dapat Anda tambahkan ke adegan di mana Anda ingin menampilkan kontrol. Ada dua cara untuk menambahkan pengontrol mini ke aplikasi pengirim:

Pengontrol yang diperluas

Di v2, Anda perlu mengimplementasikan pengontrol yang diperluas dari awal di aplikasi pengirim.

CAF menambahkan GCKUIMediaController, yang bisa digunakan untuk lebih mudah mengimplementasikan pengontrol yang diperluas.

CAF menambahkan widget pengontrol bawaan yang diperluas GCKUIExpandedMediaControlsViewController yang bisa Anda tambahkan ke aplikasi. Anda tidak perlu lagi menerapkan perluasan pengontrol menggunakan GCKUIMediaController.

Logging debug

Tujuan GCKLogger dan GCKLoggerDelegate dari v2 lalu dimigrasikan ke CAF, dengan beberapa perubahan dan peningkatan.

Tujuan GCKLoggerDelegate Metode -[logFromFunction:message:] memiliki tidak digunakan lagi dan digantikan oleh -[logMessage:fromFunction:].

Pesan log framework sekarang dapat difilter dengan menyusun pesan log GCKLoggerFilter dan menetapkannya dengan menyetel properti -[filter] dari singleton GCKLogger.

Aplikasi contoh

Sebaiknya lihat codelab dan aplikasi contoh yang ditulis untuk CAF.