Migrer l'application émettrice iOS du SDK Cast v2 vers CAF (Cast Application Framework)

La procédure suivante vous permet de convertir votre application d'expéditeur iOS du SDK Cast v2 en émetteur CAF, qui est basé sur le singleton GCKCastContext.

Introduction

  • CAF Sender est toujours disponible sur le site Web des développeurs Google Cast et les CocoaPods, comme la version 2.
  • De nouvelles classes ont été ajoutées et sont responsables du respect de la checklist de conception de Google Cast.
  • CAF Sender fournit des widgets conformes aux exigences de l'expérience utilisateur Cast. La version 2 n'a pas fourni de composants d'interface utilisateur et vous a demandé de les mettre en œuvre.
  • La conception de l'expéditeur CAF est cohérente avec celle du SDK Android Cast.
  • CAF Sender est compatible avec Bitcode, comme v2.
  • Les sous-titres dans CAF sont semblables à ceux de la version 2.

Dépendances

CAF Sender est compatible avec iOS 8 et versions ultérieures.

Initialisation

Dans CAF, une étape d'initialisation explicite est requise pour le framework Cast. Cela implique d'initialiser le singleton GCKCastContext à l'aide d'un GCKCastOptions approprié pour spécifier l'ID d'application du récepteur Web et d'autres options globales. Cela se fait généralement dans la méthode AppDelegate -[application:didFinishLaunchingWithOptions:]:

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

Dans la version 2, cette étape n'était pas nécessaire.

Détection d'appareils

Dans CAF, le processus de découverte est lancé et arrêté automatiquement par le framework lorsque l'application est exécutée au premier plan et passe en arrière-plan, respectivement. Les classes GCKDeviceScanner et GCKFilterCriteria de la version 2 sont obsolètes et ne doivent pas être utilisées.

Icône et boîte de dialogue Cast

Dans CAF, l'icône et la boîte de dialogue Cast sont fournies par le framework. L'icône Cast peut être instanciée et ajoutée à la barre de navigation comme suit:

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

L'icône Cast peut également être ajoutée au story-board.

Lorsqu'un utilisateur appuie sur le bouton, la boîte de dialogue Cast s'affiche automatiquement.

Contrôle des appareils

Dans CAF, le contrôle des appareils est largement géré par le framework. L'application émetteur n'a pas besoin de gérer la connexion à l'appareil ni le lancement de l'application du récepteur Web. La classe v2 GCKDeviceManager est obsolète et ne doit pas être utilisée. L'interaction entre l'expéditeur et le récepteur Web est désormais représentée par une "session". La classe CAF GCKSessionManager gère le cycle de vie de la session, et démarre et arrête automatiquement les sessions en réponse aux gestes de l'utilisateur: une session est démarrée lorsque l'utilisateur sélectionne un appareil Cast dans la boîte de dialogue Cast et se termine lorsque l'utilisateur appuie sur le bouton "Arrêter la diffusion" dans la boîte de dialogue Cast ou lorsque l'application de l'expéditeur elle-même s'arrête. L'application expéditeur peut être avertie des événements de cycle de vie d'une session en enregistrant un GCKSessionManagerListener avec la GCKSessionManager. Le protocole GCKSessionManagerListener définit des méthodes de rappel pour tous les événements de cycle de vie de session.

La classe GCKCastSession représente une session avec un appareil Cast. La classe dispose de méthodes permettant de contrôler le volume de l'appareil et de couper le son de l'état, qui étaient précédemment effectuées dans la version 2 à l'aide de méthodes sur GCKDeviceManager.

Dans la version 2, le protocole GCKDeviceManagerDelegate fournissait des notifications en cas de modification de l'état de l'appareil, y compris le volume, l'état de désactivation du son, l'état de veille, etc. Dans CAF, les notifications de changement d'état de volume/coupe du son sont transmises via des méthodes de rappel dans le protocole GCKSessionManagerListener. Ces écouteurs sont enregistrés avec GCKSessionManager. Toutes les autres notifications d'état de l'appareil sont transmises via un protocole GCKCastDeviceStatusListener. Ces écouteurs sont enregistrés avec GCKCastSession.

Logique de reconnexion

Comme avec la version 2, CAF tente de rétablir les connexions réseau perdues en raison de la perte temporaire du signal Wi-Fi ou d'autres erreurs réseau. Cette opération est maintenant effectuée au niveau de la session. Une session peut passer à l'état "suspendue" lorsque la connexion est perdue, puis repasser à l'état "connectée" une fois la connectivité rétablie. Le framework prend en charge la reconnexion à l'application du récepteur Web et la reconnexion des canaux Cast dans le cadre de ce processus.

De plus, CAF ajoute également la reprise automatique des sessions. Si l'application expéditeur est envoyée en arrière-plan ou arrêtée (en balayant l'écran ou en raison d'un plantage) lorsqu'une session Cast est en cours, le framework tente de reprendre cette session lorsque l'application expéditeur revient au premier plan ou est redémarrée. Cette opération est gérée automatiquement par GCKSessionManager, qui émet les rappels appropriés pour toutes les instances GCKSessionManagerListener enregistrées.

Enregistrement de critères personnalisés

Dans la version 2, les canaux personnalisés (implémentés à l'aide d'une sous-classe GCKCastChannel ou d'un GCKGenericChannel et d'un délégué) ont été enregistrés avec GCKDeviceManager. Dans CAF, les critères personnalisés sont enregistrés à la place auprès de l'instance GCKCastSession. L'enregistrement peut être effectué dans la méthode de rappel -[sessionManager:didStartCastSession:] GCKSessionManagerListener. Pour les applications multimédias, il n'est plus nécessaire d'enregistrer explicitement le GCKMediaControlChannel. Pour en savoir plus, consultez la section suivante.

Commande multimédia

La classe GCKMediaControlChannel de la version 2 est obsolète et ne doit pas être utilisée. Dans CAF, il est remplacé par la nouvelle classe GCKRemoteMediaClient, qui fournit des fonctionnalités équivalentes dans une API plus pratique. Il n'est pas nécessaire d'initialiser ou d'enregistrer explicitement cet objet. Le framework instancie automatiquement l'objet et enregistre le canal multimédia sous-jacent au moment du démarrage de la session si l'application Web Receiver est connectée à l'espace de noms multimédia.

Vous pouvez accéder à GCKRemoteMediaClient avec la propriété -[remoteMediaClient] de l'objet GCKCastSession.

Dans la version 2, toutes les requêtes média émises sur la méthode GCKMediaControlChannel renvoyaient un ID de requête numérique, et les méthodes sur GCKMediaControlChannelDelegate fournissaient cet ID lors de l'envoi de notifications sur l'achèvement ou l'échec de la requête.

Dans CAF, toutes les requêtes média émises sur GCKRemoteMediaClient renverront un objet GCKRequest. Cet objet est associé à un protocole GCKRequestDelegate pouvant être utilisé pour suivre la progression et le résultat final de la requête.

La version 2, GCKMediaControlChannel, envoyait des notifications concernant les modifications de l'état du lecteur multimédia sur le récepteur Web via le GCKMediaControlChannelDelegate. Dans CAF, GCKRemoteMediaClient fournit des rappels équivalents via son protocole GCKRemoteMediaClientListener. Vous pouvez enregistrer un nombre illimité d'écouteurs avec GCKRemoteMediaClient, ce qui permet à plusieurs composants expéditeur de partager la même instance de GCKRemoteMediaClient associée à la session.

Dans la version 2, l'application émettrice devait se charger de la synchronisation de l'interface utilisateur avec l'état du lecteur multimédia sur le récepteur Web. Dans CAF, la classe GCKUIMediaController assume la plupart de ces responsabilités. Consultez la documentation du tutoriel de l'atelier de programmation pour obtenir des exemples d'utilisation de ce composant.

Message d'annonce en superposition

V2 ne fournit pas d'UI en superposition d'introduction.

CAF ajoute la classe GCKCastContext avec une méthode -[presentCastInstructionsViewControllerOnce] qu'une application émettrice peut utiliser pour mettre en surbrillance l'icône Cast lorsqu'elle est présentée aux utilisateurs pour la première fois.

Mini-télécommande

Dans la version 2, vous devez implémenter une mini-télécommande à partir de zéro dans l'application expéditeur.

Dans CAF, le framework fournit une barre de contrôle, GCKUIMiniMediaControlsViewController, que vous pouvez ajouter aux scènes dans lesquelles vous souhaitez afficher les commandes persistantes. Il existe deux façons d'ajouter la mini-télécommande à une application émettrice:

Télécommande agrandie

Dans la version 2, vous devez implémenter entièrement un contrôleur étendu dans l'application expéditeur.

CAF ajoute GCKUIMediaController, que vous pouvez utiliser pour implémenter plus facilement un contrôleur étendu.

CAF ajoute un widget de contrôleur développé prédéfini GCKUIExpandedMediaControlsViewController que vous pouvez simplement ajouter à votre application. Vous n'avez plus besoin d'implémenter un contrôleur développé personnalisé à l'aide de GCKUIMediaController.

Journalisation des données de débogage

Les classes GCKLogger et GCKLoggerDelegate de la version 2 sont transférées dans CAF, avec quelques modifications et améliorations.

La méthode -[logFromFunction:message:] GCKLoggerDelegate est désormais obsolète au profit de -[logMessage:fromFunction:].

Vous pouvez désormais filtrer les messages de journal du framework en créant une instance GCKLoggerFilter appropriée et en l'attribuant en définissant la propriété -[filter] du singleton GCKLogger.

Applications exemples

Nous vous recommandons de consulter les ateliers de programmation et les exemples d'applications écrits pour CAF.