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

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

Pengantar

  • Pengirim CAF masih didistribusikan di situs developer Google Cast dan CocoaPods, seperti v2.
  • Kami telah menambahkan class baru yang bertanggung jawab untuk mematuhi checklist desain Google Cast.
  • Pengirim CAF menyediakan widget yang mematuhi persyaratan UX Cast; v2 tidak menyediakan komponen UI dan mengharuskan Anda menerapkan widget ini.
  • Desain Pengirim CAF konsisten dengan desain Cast Android SDK.
  • Pengirim CAF mendukung Bitcode, seperti v2.
  • Pemberian teks tertutup di CAF mirip dengan v2.

Dependensi

Pengirim CAF mendukung iOS versi 8 dan yang lebih baru.

Inisialisasi

Di CAF, langkah inisialisasi eksplisit diperlukan untuk framework Cast. Hal ini memerlukan inisialisasi GCKCastContext singleton, menggunakan GCKCastOptions yang sesuai untuk menentukan ID aplikasi Web Receiver dan opsi global lainnya. Hal ini biasanya dilakukan dalam metode AppDelegate -[application:didFinishLaunchingWithOptions:]:

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

Langkah ini tidak diperlukan di v2.

Penemuan perangkat

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

Tombol Cast dan dialog Cast

Di CAF, tombol dan dialog Cast disediakan oleh framework. Tombol Cast 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.

Ketika seseorang mengetuk tombol tersebut, dialog Cast akan muncul secara otomatis.

Kontrol perangkat

Di CAF, kontrol perangkat sebagian besar ditangani oleh framework. Aplikasi pengirim tidak perlu menangani koneksi ke perangkat dan meluncurkan aplikasi Penerima Web. Class v2 GCKDeviceManager tidak digunakan lagi dan tidak boleh digunakan. Interaksi antara pengirim dan Penerima Web kini direpresentasikan sebagai "sesi". Class GCKSessionManager CAF menangani siklus proses sesi serta otomatis memulai dan menghentikan sesi sebagai respons terhadap gestur pengguna: sesi dimulai saat pengguna memilih perangkat Cast dalam dialog Cast dan diakhiri saat pengguna mengetuk tombol "Berhenti Mentransmisi" di dialog Cast atau saat aplikasi pengirim berhenti. Aplikasi pengirim dapat diberi tahu tentang peristiwa siklus proses sesi dengan mendaftarkan GCKSessionManagerListener menggunakan GCKSessionManager. Protokol GCKSessionManagerListener menentukan metode callback untuk semua peristiwa siklus proses sesi.

Class GCKCastSession mewakili sesi dengan perangkat Cast. Class ini memiliki metode untuk mengontrol volume perangkat dan status bisukan, yang sebelumnya dilakukan di v2 menggunakan metode di GCKDeviceManager.

Dalam v2, protokol GCKDeviceManagerDelegate menyediakan notifikasi perubahan pada status perangkat, termasuk volume, status nonaktif, status standby, dan sebagainya. Di CAF, notifikasi perubahan status volume/bisukan dikirimkan melalui metode callback dalam protokol GCKSessionManagerListener; pemroses ini terdaftar di GCKSessionManager. Semua notifikasi status perangkat yang tersisa dikirim melalui protokol GCKCastDeviceStatusListener ; pemroses ini terdaftar di GCKCastSession.

Logika penghubung ulang

Seperti pada v2, CAF mencoba menghubungkan kembali koneksi jaringan yang hilang karena kehilangan sinyal Wi-Fi sementara atau error jaringan lainnya. Tindakan ini kini dilakukan pada tingkat sesi. Sesi dapat memasuki status "ditangguhkan" saat koneksi terputus, dan akan bertransisi kembali ke status "terhubung" saat konektivitas dipulihkan. Framework ini akan menghubungkan kembali ke aplikasi Penerima Web dan menghubungkan kembali saluran Cast sebagai bagian dari proses ini.

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

Pendaftaran saluran khusus

Di v2, saluran kustom (diterapkan menggunakan subclass GCKCastChannel atau GCKGenericChannel dan delegasi) didaftarkan dengan GCKDeviceManager. Di CAF, saluran kustom terdaftar dengan instance GCKCastSession. Pendaftaran dapat dilakukan dalam metode callback GCKSessionManagerListener -[sessionManager:didStartCastSession:]. Untuk aplikasi media, Anda tidak perlu lagi mendaftarkan GCKMediaControlChannel secara eksplisit; lihat bagian berikut untuk mengetahui detail selengkapnya.

Kontrol media

Class v2 GCKMediaControlChannel tidak digunakan lagi dan tidak boleh digunakan. Di CAF, class ini digantikan oleh class GCKRemoteMediaClient baru, yang menyediakan fungsi yang setara dalam API yang lebih nyaman. Tidak perlu melakukan inisialisasi atau mendaftarkan objek ini secara eksplisit; framework akan otomatis membuat instance objek dan mendaftarkan saluran media yang mendasarinya pada waktu mulai sesi jika aplikasi Web Receiver terhubung untuk mendukung namespace media.

GCKRemoteMediaClient dapat diakses dengan properti -[remoteMediaClient] objek GCKCastSession.

Di v2, semua permintaan media yang dikeluarkan di GCKMediaControlChannel akan menampilkan ID permintaan numerik, dan metode di GCKMediaControlChannelDelegate akan memberikan ID ini saat mengirim notifikasi tentang penyelesaian atau kegagalan permintaan.

Di CAF, semua permintaan media yang dikeluarkan di GCKRemoteMediaClient akan menampilkan objek GCKRequest ; objek ini memiliki protokol GCKRequestDelegate terkait yang dapat digunakan untuk melacak progres dan hasil permintaan.

GCKMediaControlChannel v2; akan mengirimkan notifikasi tentang perubahan status pemutar media di Penerima Web melalui GCKMediaControlChannelDelegate. Di CAF, GCKRemoteMediaClient menyediakan callback yang setara melalui protokol GCKRemoteMediaClientListener. Jumlah pemroses apa pun dapat didaftarkan dengan GCKRemoteMediaClient, yang memungkinkan beberapa komponen pengirim berbagi satu instance GCKRemoteMediaClient yang terkait dengan sesi tersebut.

Di v2, aplikasi pengirim harus menanggung beban menjaga antarmuka pengguna tetap sinkron dengan status pemutar media di Web Receiver. Di CAF, class GCKUIMediaController mengambil sebagian besar tanggung jawab ini; lihat dokumentasi tutorial codelab untuk mengetahui 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 menandai tombol Cast saat pertama kali ditampilkan kepada pengguna.

Pengontrol mini

Pada v2, Anda perlu menerapkan pengontrol mini dari awal di aplikasi pengirim.

Di CAF, framework menyediakan panel kontrol, GCKUIMiniMediaControlsViewController, yang dapat ditambahkan ke scene tempat Anda ingin menampilkan kontrol persisten. Ada dua cara untuk menambahkan pengontrol mini ke aplikasi pengirim:

Pengontrol yang diperluas

Pada v2, Anda perlu menerapkan pengontrol yang diperluas dari awal di aplikasi pengirim.

CAF menambahkan GCKUIMediaController, yang dapat Anda gunakan untuk menerapkan pengontrol yang diperluas dengan lebih mudah.

CAF menambahkan widget pengontrol diperluas bawaan GCKUIExpandedMediaControlsViewController yang dapat Anda tambahkan ke aplikasi. Anda tidak perlu lagi mengimplementasikan pengontrol kustom diperluas menggunakan GCKUIMediaController.

Logging debug

Class GCKLogger dan GCKLoggerDelegate dari v2 disertakan dalam CAF, dengan beberapa perubahan dan peningkatan.

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

Pesan log framework kini dapat difilter dengan membuat instance GCKLoggerFilter yang sesuai dan menetapkannya dengan menetapkan properti -[filter] dari singleton GCKLogger.

Aplikasi contoh

Sebaiknya lihat codelab dan aplikasi contoh yang ditulis untuk CAF.