iOS Gönderen Uygulamasını Cast SDK v2'den Cast Uygulama Çerçevesi'ne (CAF) Taşıma

Aşağıdaki prosedür, iOS gönderen uygulamanızı Cast SDK v2'den GCKCastContext müfettişine dayalı CAF Gönderen'e dönüştürmenize olanak tanır.

Giriş

  • CAF Gönderen, Google Cast geliştirici web sitesinde ve v2 gibi CocoaPods'da dağıtılmaya devam etmektedir.
  • Google Cast tasarım kontrol listesine uyma sorumluluğunu üstlenen yeni sınıflar eklendi.
  • CAF Gönderen, Cast UX gereksinimlerine uygun widget'lar sağlar. v2, herhangi bir kullanıcı arayüzü bileşeni sağlamaz ve bu widget'ları uygulamanızı gerektirmez.
  • CAF Gönderen tasarımı, Cast Android SDK tasarımıyla tutarlıdır.
  • CAF Gönderen, Bitcode'u destekler (ör. v2).
  • CAF'deki altyazı v2'ye benzer.

Bağımlılıklar

CAF Gönderen, iOS 8 ve sonraki sürümleri destekler.

Başlatma

CAF'de Cast çerçevesi için açık bir başlatma adımı gerekir. Bu süreç, Web Alıcısı uygulama kimliğini ve diğer genel seçenekleri belirtmek için uygun bir GCKCastOptions kullanılarak GCKCastContext Singleton'ının başlatılmasını içerir. Bu işlem genellikle AppDelegate -[application:didFinishLaunchingWithOptions:] yöntemiyle yapılır:

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

v2'de bu adıma gerek kalmadı.

Cihaz bulma

CAF'de, keşif süreci, uygulama ön plana gelip sırasıyla arka plana geçtiğinde çerçeve ile otomatik olarak başlatılır ve durdurulur. v2'nin GCKDeviceScanner ve GCKFilterCriteria sınıfları kullanımdan kaldırıldı ve kullanılmamalıdır.

Yayınla düğmesi ve Yayın iletişim kutusu

CAF'de, Yayınla düğmesi ve iletişim kutusu çerçeve tarafından sağlanır. Yayınla düğmesi şu şekilde başlatılabilir ve gezinme çubuğuna şu şekilde eklenebilir:

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

Yayınla düğmesi, resimli taslaka da eklenebilir.

Bir kullanıcı düğmeye dokunduğunda Yayın iletişim kutusu otomatik olarak gösterilir.

Cihaz kontrolü

CAF'de cihaz kontrolü büyük ölçüde çerçeve tarafından yönetilir. Gönderen uygulamanın cihaza bağlanma ve Web Alıcısı uygulamasını başlatma gibi işlemler yapması gerekmez. v2 sınıfı GCKDeviceManager kullanımdan kaldırıldı ve kullanılmamalıdır. Gönderen ve Web Alıcısı arasındaki etkileşim artık "oturum" olarak temsil ediliyor. CAF GCKSessionManager sınıfı, oturum yaşam döngüsünü işler ve kullanıcı hareketlerine göre oturumları otomatik olarak başlatıp durdurur: Kullanıcı, Yayın iletişim kutusunda Yayın cihazı seçtiğinde başlatılır ve kullanıcı, Yayın iletişim kutusundaki "Yayını Durdur" düğmesine dokunduğunda veya gönderen uygulamanın kendisi sonlandığında sona erer. Oturum yaşam döngüsü etkinlikleri hakkında gönderen uygulamaya bildirim gönderilebilir.GCKSessionManagerListener GCKSessionManager GCKSessionManagerListener protokolü tüm oturum yaşam döngüsü etkinlikleri için geri çağırma yöntemlerini tanımlar.

GCKCastSession sınıfı, bir Yayın cihazıyla olan oturumu temsil eder. Sınıfta, cihazın ses düzeyini ve ses kapatma durumlarını kontrol etme yöntemleri vardı. Bu işlemler daha önce GCKDeviceManager üzerinde yöntemler kullanılarak v2'de yapılıyordu.

2. sürümde, GCKDeviceManagerDelegate protokolü ses düzeyi, sesi kapatma durumu, bekleme durumu gibi cihaz durumunda yapılan değişikliklerle ilgili bildirimleri sağladı. CAF'de, ses/sesi açma durum değişikliği bildirimleri GCKSessionManagerListener protokolündeki geri çağırma yöntemleri aracılığıyla iletilir. Bu dinleyiciler, GCKSessionManager hesabına kaydedilir. Kalan tüm cihaz durumu bildirimleri bir GCKCastDeviceStatusListener protokolü aracılığıyla iletilir. Bu dinleyiciler, GCKCastSession hesabına kaydedilir.

Yeniden bağlantı mantığı

v2'de olduğu gibi CAF, geçici kablosuz ağ sinyali kaybı veya diğer ağ hataları nedeniyle kaybolan ağ bağlantılarını yeniden kurmaya çalışır. Bu işlem artık oturum düzeyinde gerçekleştirilir. Bağlantı kesildiğinde oturum "askıya alındı" durumuna geçebilir ve bağlantı tekrar kurulduğunda "bağlı" durumuna geri döner. Çerçeve, bu sürecin bir parçası olarak Web Alıcısı uygulamasına ve tüm Yayın kanallarını yeniden bağlar.

Buna ek olarak, CAF otomatik oturum devam ettirme de ekler. Gönderen uygulama arka plana gönderilirse veya (kaydırarak ya da kilitlenme nedeniyle) bir Yayın oturumu devam ederken kapatılırsa çerçeve, gönderen uygulama ön plana geri döndüğünde veya yeniden başlatıldığında tekrar oturum açmaya çalışır. Bu işlem, kayıtlı GCKSessionManagerListener örneklerinde uygun geri çağırmaları yapacak GCKSessionManager tarafından otomatik olarak işlenir.

Özel kanal kaydı

2. sürümde, özel kanallar (GCKCastChannel alt sınıfı veya bir GCKGenericChannel ve yetkili temsilci kullanılarak uygulandı) GCKDeviceManager ile kaydedildi. CAF'de özel kanallar bunun yerine GCKCastSession örneğine kaydedilir. Kayıt, GCKSessionManagerListener -[sessionManager:didStartCastSession:] geri çağırma yönteminden yapılabilir. Medya uygulamaları için artık GCKMediaControlChannel etiketini açık bir şekilde kaydetmeniz gerekmez. Daha fazla bilgi için aşağıdaki bölümü inceleyin.

Medya kontrolü

v2 sınıfı GCKMediaControlChannel kullanımdan kaldırıldı ve kullanılmamalıdır. Daha kullanışlı bir API'de eş değer işlevler sunan yeni GCKRemoteMediaClient sınıfının yerini CAF'de alır. Bu nesnenin açık bir şekilde başlatılması veya kaydedilmesi gerekmez. Web Alıcısı uygulamasının medya ad alanını desteklemesi durumunda, çerçeve otomatik olarak nesneyi anlık hâle getirir ve oturumun başlangıcında ana medya kanalını kaydeder.

GCKRemoteMediaClient öğesine GCKCastSession nesnesinin -[remoteMediaClient] özelliğiyle erişebilirsiniz.

v2'de, GCKMediaControlChannel ürününde yayınlanan tüm medya istekleri sayısal bir istek kimliği döndürecek ve GCKMediaControlChannelDelegate'teki yöntemler, isteğin tamamlanması veya başarısız olması durumunda bildirim gönderirken bu kimliği sağlayacaktır.

CAF'de GCKRemoteMediaClient üzerinde yayınlanan tüm medya istekleri bir GCKRequest nesnesi döndürür. Bu nesnede, isteğin ilerleme durumunu ve nihai sonucunu izlemek için kullanılabilecek ilişkili bir GCKRequestDelegate protokolü bulunur.

v2 GCKMediaControlChannel GCKMediaControlChannelDelegate üzerinden Web Alıcısı'nda medya oynatıcı durumundaki değişikliklerle ilgili bildirim gönderir. CAF'deki GCKRemoteMediaClient, GCKRemoteMediaClientListener protokolü üzerinden eşdeğer geri çağırmalar sağlar. İstediğiniz sayıda dinleyiciye GCKRemoteMediaClient kaydedilebilir. Bu sayede birden fazla gönderen bileşeni, oturumla ilişkilendirilen tek GCKRemoteMediaClient örneğini paylaşabilir.

v2'de gönderen uygulamanın, kullanıcı arayüzünü Web Alıcısındaki medya oynatıcı durumuyla senkronize tutma yüküne sahip olması gerekmiştir. CAF'de bu sorumluluğun büyük bir kısmı GCKUIMediaController sınıfındadır. Bu bileşenin nasıl kullanılacağına dair örnekler için codelab eğitim dokümanlarına bakın.

Tanıtım amaçlı yer paylaşımı

V2, tanıtım amaçlı yer paylaşımı kullanıcı arayüzü sağlamaz.

CAF, bir gönderen uygulamanın kullanıcılara ilk gösterildiğinde Yayınla düğmesini vurgulamak için kullanabileceği bir yöntemle GCKCastContext -[presentCastInstructionsViewControllerOnce] eklenir.

Mini kumanda

v2'de, gönderen uygulamasında sıfırdan bir mini kumanda uygulamanız gerekir.

CAF'de çerçeve, kalıcı kontroller göstermek istediğiniz sahnelere ekleyebileceğiniz bir kontrol çubuğu sağlar: GCKUIMiniMediaControlsViewController. Mini denetleyiciyi bir gönderen uygulamasına eklemenin iki yolu vardır:

Genişletilmiş kumanda

v2'de, gönderen uygulamasında sıfırdan genişletilmiş bir kumanda uygulamanız gerekir.

CAF, genişletilmiş kumandayı daha kolay uygulamak için kullanabileceğiniz GCKUIMediaController'i ekler.

CAF, uygulamanıza kolayca ekleyebileceğiniz, önceden oluşturulmuş bir genişletilmiş kumanda widget'ı GCKUIExpandedMediaControlsViewController ekler. Artık GCKUIMediaController özelliğini kullanarak özel bir genişletilmiş kumanda uygulamanız gerekmez.

Hata ayıklama günlük kaydı

2. sürümdeki GCKLogger ve GCKLoggerDelegate sınıfları, bazı değişiklikler ve geliştirmelerle CAF'ye taşınır.

GCKLoggerDelegate -[logFromFunction:message:] yöntemi kullanımdan kaldırıldı ve yerine -[logMessage:fromFunction:] kullanılıyor.

Artık çerçeve günlük mesajları, uygun bir GCKLoggerFilter örneği oluşturup GCKLogger teklisinin -[filter] özelliğini ayarlayarak atanarak filtrelenebilir.

Örnek uygulamalar

CAF için yazılan codelab ve örnek uygulamalara göz atmanızı öneririz.