watchOS 2: Transferts et files d’attente en arrière-plan

introduction

Watch Connectivity est un nouveau cadre de communication lancé avec iOS 9 et watchOS 2. Son objectif principal est de transférer facilement et de manière transparente des informations entre une application Apple Watch et son application iOS parente.

Le framework fournit de nombreuses fonctionnalités différentes. Il y a quelques semaines, Jorge Costa a écrit sur la possibilité d’envoyer des messages entre un iOS et une application Apple Watch. Dans ce tutoriel, nous allons zoomer sur le transfert de données en arrière-plan.

La possibilité d’envoyer des messages est conçue pour les données dont l’autre appareil a immédiatement besoin. En revanche, les transferts en arrière-plan sont les mieux adaptés pour des blocs de données plus volumineux qui ne sont pas immédiatement nécessaires à la contrepartie. Une exception à cela concerne les informations de complication, que nous aborderons plus loin dans ce didacticiel.

Conditions préalables

Ce didacticiel nécessite que vous exécutiez Xcode 7 sur OS X 10.10 ou version ultérieure. Vous devrez également télécharger le projet de démarrage à partir de GitHub.

1. Configuration du cadre

Pour utiliser le framework Watch Connectivity, votre application iOS et watchOS doivent avoir une classe conforme à la WCSessionDelegate protocole et qui configure correctement la valeur par défaut WCSession. Les méthodes de la WCSessionDelegate Le protocole gère la réception de toutes les données via le framework Watch Connectivity et vous permet de prendre le contrôle des nouvelles données dans votre application.

Ouvrez le projet de démarrage dans Xcode et éditez AppDelegate.swift. En haut, ajoutez ce qui suit import déclaration:

Ensuite, mettez à jour la définition de classe du AppDelegate classe pour la rendre conforme à la WCSessionDelegate protocole.

Nous déclarons également une propriété de type WCSession! dans le AppDelegate classe pour stocker une référence à la valeur par défaut WCSession objet.

Enfin, mettez à jour le application(_:didFinishLaunchingWithOptions:) méthode comme indiqué ci-dessous.

Dans application(_:didFinishLaunchingWithOptions:), nous obtenons une référence à la valeur par défaut WCSession objet, définissez le délégué de la session sur celui de votre application AppDelegate instance et, si pris en charge, activez la session. le isSupported La méthode de classe vérifie si l’application watchOS homologue pour votre application iOS est installée sur une Apple Watch couplée et est capable d’envoyer des données.

La configuration du côté watchOS est très similaire. Ouvert ExtensionDelegate.swift et remplacez son contenu par ce qui suit:

Vous remarquerez que nous n’appelons pas isSupported sur le WCSession classe avant d’activer la session. C’est parce que cette méthode retourne toujours true du côté watchOS.

Pour vérifier que tout fonctionne correctement, exécutez votre application Apple Watch sur l’un des deux simulateurs comme indiqué ci-dessous.

Simulateurs Apple Watch

Ensuite, exécutez votre application iOS sur le même type de simulateur iPhone que vous avez sélectionné lors de l’exécution de l’application Watch.

simulateurs iOS

Une fois votre application iOS lancée, votre simulateur Apple Watch devrait simplement revenir au cadran de la montre, comme indiqué dans la capture d’écran ci-dessous.

Application iOS et simulateur Apple Watch

2. Envoi de données

Avec la valeur par défaut WCSession objet correctement configuré, il est temps pour nous d’envoyer des données entre l’iOS et l’application Apple Watch.

Ouvert TableViewController.swift et ajoutez la ligne de code suivante à la fin du createNewItem(_:) méthode:

le transferUserInfo(_:) La méthode accepte un dictionnaire comme seul paramètre. Une fois cette méthode appelée, le dictionnaire d’informations utilisateur que vous avez fourni est ajouté à la file d’attente des informations à transférer.

En relation :  OnePlus Smartwatch arrive au début de 2021

IOS et watchOS fonctionnent conjointement pour transférer les informations au moment opportun. Le système combiné examine des choses comme l’utilisation de l’application, la durée de vie de la batterie, si l’autre appareil est actuellement utilisé ou non, etc. Une fois que le système a transféré les informations, l’application sur l’autre appareil exécutera une méthode de rappel délégué la prochaine fois qu’elle est lancé.

Il est maintenant temps pour nous d’implémenter le côté réception sur l’Apple Watch. Ouvert ExtensionDelegate.swift et ajoutez la méthode suivante au ExtensionDelegate classe:

Cette méthode sera appelée dès que nous exécutons l’application Apple Watch et une fois les informations transférées avec succès.

Notez que bien que ce tutoriel ne montre qu’un exemple de transfert d’informations d’iOS vers watchOS, le WCSession et WCSessionDelegate Les méthodes se comportent exactement de la même manière sur les deux plates-formes pour les transferts en arrière-plan.

Une fois ce code implémenté, exécutez votre application Apple Watch dans le simulateur. Ensuite, exécutez à nouveau l’application iPhone et appuyez sur le bouton pour créer un nouvel élément.

Création d'un élément côté iOS

Revenez maintenant au simulateur Apple Watch et appuyez sur Commande-Maj-H deux fois pour revenir à l’application la plus récente. Vous verrez que l’élément que vous venez de créer apparaît sur l’Apple Watch.

Élément affiché sur la montre

Notez que, si le transfert d’informations s’est produit immédiatement entre les simulateurs, dans une situation réelle avec des appareils physiques, ce ne sera pas toujours le cas.

3. Accès à la file d’attente de transfert en attente

Avec votre application iOS toujours en cours d’exécution, quittez le simulateur Apple Watch à partir de la barre de menus ou en appuyant sur Commande-Q. Après cela, appuyez sur le bouton de votre application iOS pour créer quelques éléments supplémentaires, comme indiqué ci-dessous.

Articles iOS supplémentaires

Chaque fois que vous essayez de transférer des informations à l’aide de la structure Watch Connectivity, elles sont ajoutées à une file d’attente qui est progressivement effacée à mesure que les informations sont transférées. Cette file d’attente est accessible et les transferts de la file d’attente sont également accessibles.

Ceci est utile, car vous pouvez voir combien d’articles sont encore en attente et vous pouvez même annuler des transferts spécifiques si vous en avez besoin. Les éléments que vous venez de créer sont actuellement conservés dans la file d’attente d’informations utilisateur car l’Apple Watch est actuellement déconnectée de l’appareil parent, ce qui rend un transfert impossible.

Ouvert AppDelegate.swift et ajoutez le code suivant à la fin de application(_:didFinishLaunchingWithOptions:):

Avec ce code, nous accédons aux transferts d’informations utilisateur en cours et, s’il y en a au moins un, annulons le premier transfert. le WCSessionUserInfoTransfer objets renvoyés par le outstandingUserInfoTransfers property ont également deux propriétés en lecture seule auxquelles vous pouvez accéder:

  • userInfo: Cette propriété stocke le dictionnaire que vous transférez.
  • transferring: Cette propriété stocke une valeur booléenne et indique si les informations utilisateur sont en cours de transfert.
En relation :  Comment masquer votre arrière-plan pendant les appels vidéo en zoom

Il n’y a pas beaucoup de fonctionnalités disponibles avec des transferts d’informations exceptionnels dans le framework Watch Connectivity, mais en fonction de votre application, certaines de ces fonctionnalités peuvent être très utiles.

4. Autres méthodes de transfert

Dans ce didacticiel, nous n’avons couvert que les transferts en arrière-plan des informations utilisateur, mais il existe quelques autres moyens de transférer des données entre appareils. Chacune de ces méthodes est conçue dans un but spécifique lors de la communication entre un iPhone et une Apple Watch.

Contexte de l’application

C’est là que vous devez transférer des informations entre des appareils où seules les informations les plus récentes sont pertinentes. Vous transférez un dictionnaire unique en appelant le updateApplicationContext(_:error:) méthode. le error paramètre de cette méthode est un pointeur vers un NSError objet, qui sera rempli d’informations si un problème survient avec le transfert.

Du côté de la réception, vous pouvez implémenter le session(_:didReceiveApplicationContext:) ou, alternativement, accédez au contexte de l’application via la valeur par défaut WCSession objets receivedApplicationContext propriété.

Informations sur les complications

C’est là que vous devez transférer un dictionnaire d’informations utilisateur unique spécifiquement pour la complication personnalisée de votre application. Vous ne pouvez envoyer des informations que du côté iOS et cela se fait avec le transferCurrentComplicationUserInfo(_:) méthode.

La principale différence entre ceci et le transferUserInfo(_:) La méthode utilisée précédemment dans ce tutoriel est que, lors de la mise à jour d’une complication, le système tentera toujours de transférer les informations immédiatement.

Notez qu’un transfert n’est pas garanti car les appareils peuvent être déconnectés ou votre complication peut avoir dépassé son budget d’exécution en arrière-plan. Si un transfert d’informations de complication ne peut pas être effectué, il est ajouté au outstandingUserInfoTransfers file d’attente où il peut être consulté et annulé si nécessaire.

Notez également que, si un transfert d’informations de complication est dans la file d’attente et que vous appelez le transferCurrentComplicationUserInfo(_:) à nouveau, le transfert existant dans la file d’attente sera invalidé et annulé.

Des dossiers

Vous pouvez même utiliser le framework Watch Connectivity pour transférer des fichiers entre appareils. Cela se fait via le transferFile(_:metaData:) méthode où le premier paramètre est un local NSURL dans le fichier et le second est un dictionnaire facultatif, contenant toutes les données supplémentaires associées à ce fichier.

Comme vous vous en doutez, la réception de ce fichier est gérée par une méthode du WCSessionDelegate protocole, le session(_:didReceiveFile:) méthode pour être précis. Dans cette méthode, vous recevez un seul WCSessionFile objet qui contient une nouvelle URL locale vers le fichier réel ainsi que les métadonnées que vous avez transférées.

Comme pour les transferts d’informations utilisateur, vous pouvez également afficher les transferts de fichiers en attente ou en cours via la valeur par défaut WCSession objets outstandingFileTransfers propriété.

Conclusion

Dans l’ensemble, le framework Watch Connectivity fournit une interface très simple et facile à utiliser pour transférer des données entre un iPhone connecté et une Apple Watch. Le cadre permet le transfert d’informations utilisateur, de contexte d’application et de dictionnaires d’informations sur les complications ainsi que des fichiers.

Vous devriez maintenant être à l’aise avec l’envoi et la réception d’informations à l’aide du framework Watch Connectivity ainsi que la façon dont vous pouvez interagir avec les transferts en cours.

Comme toujours, assurez-vous de laisser vos commentaires et commentaires dans les commentaires ci-dessous.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.