Applications Wear OS autonomes ou non autonomes

Il est préférable que les applications Wear OS fonctionnent indépendamment d'un téléphone afin que les utilisateurs puissent effectuer des tâches sur une montre sans accéder à un téléphone Android ou iOS. Si une interaction avec le téléphone est nécessaire pour le fonctionnement de l'application de la montre, vous devez marquer votre application Wear OS comme non autonome et faire le nécessaire afin de vous assurer que l'utilisateur a accès à l'application pour téléphone.

Planifier votre application

Vous pouvez utiliser le format Android App Bundle pour générer automatiquement des APK (Android Package Kit) optimisés pour la configuration de l'appareil de chaque utilisateur dans la même fiche d'application. Cela permet aux utilisateurs de ne télécharger que le code et les ressources dont ils ont besoin pour exécuter votre application.

Pour en savoir plus sur la configuration de votre application en vue de sa distribution via le Google Play Store, consultez Compresser et distribuer des applications Wear et lisez le guide de démarrage pour les fichiers Android App Bundle.

En règle générale, le niveau d'API minimal d'une application Wear OS est le niveau d'API 25 (Wear OS 2.0). Le niveau d'API cible doit être supérieur ou égal à 28. Pour en savoir plus, consultez Respecter le niveau d'API cible requis par Google Play. Définissez targetSdkVersion sur le niveau d'API 30 (Wear OS 3) pour vous assurer que votre application fonctionne correctement sur la dernière version de la plate-forme.

Pour en savoir plus sur les requêtes réseau et l'accès au réseau à bande passante élevée, consultez Accès au réseau et synchronisation sur Wear OS.

Définir une application en tant qu'application Wear OS

Vous devez définir la balise <uses-feature> dans le fichier manifeste Android de votre application. Pour indiquer qu'il s'agit d'une application de la montre, ajoutez un élément comme illustré dans l'exemple suivant :

  <manifest>
  ...
  <uses-feature android:name="android.hardware.type.watch" />
  ...
  </manifest>
  

Identifier une application comme autonome ou non autonome

Une application de la montre est considérée comme autonome ou non autonome :

  • Autonome : une application entièrement indépendante qui n'a pas besoin d'application pour téléphone afin d'exécuter les fonctionnalités de base (y compris l'authentification). Une application pour téléphone, si elle existe, ne fournit alors que des fonctionnalités facultatives.
  • Non autonome : une application dépendante qui a besoin d'une application pour téléphone ou un autre appareil afin d'exécuter les fonctionnalités de base (y compris l'authentification).

Dans votre application Wear OS, définissez la valeur de l'élément meta-data com.google.android.wearable.standalone dans le fichier manifeste Android afin d'indiquer si votre application est autonome ou non autonome.

Si l'application de la montre que vous avez développée est autonome, précisez-le dans le Google Play Store en définissant la valeur de com.google.android.wearable.standalone sur true :

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

Si l'application de la montre n'est pas autonome et si ses fonctionnalités principales dépendent d'une autre application, définissez com.google.android.wearable.standalone sur false. Cela signifie que l'application de la montre nécessite un autre appareil, mais cela n'aura pas d'incidence sur la promotion de cette application sur le Google Play Store.

Remarque : Même si la valeur de com.google.android.wearable.standalone est false, l'application de la montre peut être installée avant l'installation de l'application pour téléphone. Par conséquent, si l'application de la montre détecte qu'un téléphone associé ne dispose pas de l'application pour téléphone requise, comme décrit sur cette page, invitez l'utilisateur à installer l'application pour téléphone.

Code partagé et stockage de données

Le code peut être partagé entre une application Wear OS et une application pour téléphone. Par exemple, un code commun de mise en réseau peut se trouver dans une bibliothèque partagée.

Le code spécifique à un facteur de forme peut éventuellement se trouver dans un module distinct.

Vous pouvez utiliser les API de stockage Android standards pour stocker des données localement, comme sur un téléphone. Par exemple, vous pouvez utiliser les API SharedPreferences ou la bibliothèque de persistance Room.

Détecter votre application sur un autre appareil

L'application de la montre et l'application pour téléphone correspondante peuvent toutes les deux détecter si l'autre application est disponible.

L'application pour téléphone et l'application de la montre peuvent utiliser CapabilityClient pour annoncer la présence de l'application sur un appareil associé. Cette opération peut s'effectuer de manière statique ou dynamique.

Lorsqu'une application se trouve dans un nœud du réseau Wear OS d'un utilisateur (par exemple, sur un téléphone, une montre associée ou dans le cloud), la classe CapabilityClient permet à une autre application de la détecter. Pour en savoir plus, consultez Annoncer des fonctionnalités.

Si l'une de vos applications ne peut pas détecter l'autre, vous pouvez inviter l'utilisateur à ouvrir la fiche Play Store sur l'appareil concerné. Cette solution est destinée aux applications de la montre qui nécessitent la présence d'une application pour téléphone associé afin de fonctionner correctement.

Vous devez vérifier si le Play Store est disponible sur l'appareil, car certains téléphones (comme les iPhone) ne sont pas compatibles avec le Play Store.

Les sections suivantes décrivent les bonnes pratiques pour deux scénarios :

  • L'application autonome de la montre a besoin de l'application pour téléphone.
  • L'application pour téléphone a besoin de l'application autonome de la montre.

Vous pouvez également accéder à GitHub pour retrouver l'application exemple illustrant cette fonctionnalité. Pour en savoir plus sur les classes présentées dans la section suivante, consultez la documentation de référence de l'API Wear OS. Cette documentation de référence contient des informations sur la classe PhoneTypeHelper, qui comporte une méthode getPhoneDeviceType() permettant à votre application Wear OS de vérifier si un téléphone associé est un appareil Android ou iOS.

Spécifier des noms de fonctionnalités permettant de détecter vos applications

Pour l'application correspondant à chaque type d'appareil (montre ou téléphone), spécifiez une chaîne unique pour le nom de la fonctionnalité dans le fichier res/values/wear.xml.

Par exemple, dans votre module mobile, le fichier wear.xml peut inclure les éléments suivants :

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_phone_app</item>
    </string-array>
</resources>

Dans votre module Wear OS, le fichier wear.xml comprend une valeur différente du nom de la fonctionnalité, par exemple :

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_wear_app</item>
    </string-array>
</resources>

Pour en savoir plus, consultez Annoncer des fonctionnalités.

Détecter des applications et ouvrir une URL depuis une montre

L'application de la montre peut détecter si l'application pour téléphone est disponible sur le téléphone associé d'un utilisateur. Pour cela, procédez comme suit :

  1. Utilisez le CapabilityClient afin de vérifier si l'application pour téléphone est installée sur le téléphone associé. Pour en savoir plus, consultez l'application exemple sur GitHub.
  2. Si l'application pour téléphone n'est pas installée sur le téléphone, vérifiez le type de téléphone à l'aide de la méthode PhoneDeviceType.getPhoneDeviceType(). Pour en savoir plus, consultez la section suivante.
  3. Si PhoneDeviceType.DEVICE_TYPE_ANDROID est renvoyé, il s'agit d'un téléphone Android. Appelez RemoteActivityHelper.startRemoteActivity() sur l'appareil Wear OS pour ouvrir le Play Store sur le téléphone. Utilisez l'URI du marché de l'application pour téléphone, qui peut être différent de l'URI de votre application Wear. Par exemple, servez-vous d'un URI de marché tel que market://details?id=com.example.android.wearable.wear.finddevices.
  4. Si PhoneDeviceType.DEVICE_TYPE_IOS est renvoyé, le téléphone est un téléphone iOS n'ayant pas accès au Play Store. Ouvrez l'App Store sur l'iPhone en appelant RemoteActivityHelper.startRemoteActivity() sur l'appareil Wear OS. Vous pouvez spécifier l'URL iTunes de votre application, par exemple https://itunes.apple.com/us/app/yourappname.

    Wear OS ne vous permet pas de déterminer de manière programmatique si l'application pour téléphone est installée sur un appareil iOS. Il est recommandé de donner à l'utilisateur un moyen de déclencher manuellement l'ouverture de l'App Store.

Remarque : Utilisez l'API RemoteActivityHelper décrite précédemment pour spécifier qu'une URL doit être ouverte sur le téléphone depuis la montre et qu'aucune application pour téléphone n'est requise.

Détails permettant de détecter le type de téléphone associé

Voici un extrait qui utilise la méthode getPhoneDeviceType() pour vérifier le type de téléphone auquel la montre est associée :

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

La valeur renvoyée par la méthode getPhoneDeviceType() est l'une des suivantes :

Valeur renvoyée Description
DEVICE_TYPE_ANDROID Le téléphone associé est un appareil Android.
DEVICE_TYPE_IOS Le téléphone associé est un appareil iOS.
DEVICE_TYPE_UNKNOWN Le téléphone associé est un appareil inconnu.
DEVICE_TYPE_ERROR Une erreur s'est produite lors de l'identification du type de téléphone associé. Une autre vérification doit être effectuée ultérieurement.

Détection des applications à partir d'un téléphone Android

Votre téléphone Android peut détecter si les appareils Wear OS d'un utilisateur disposent de votre application de montre. Pour cela, procédez comme suit :

  1. Utilisez le NodeClient pour rechercher toutes les montres connectées au téléphone de l'utilisateur. Pour en savoir plus, consultez l'application exemple sur GitHub.
  2. Utilisez le CapabilityClient pour identifier les montres de l'utilisateur sur lesquelles votre application est installée.
  3. Si votre application n'est pas installée sur toutes ses montres, autorisez l'utilisateur à ouvrir le Play Store sur les appareils Wear OS restants depuis le téléphone à l'aide de la méthode RemoteActivityHelper.startRemoteActivity(). Utilisez l'URI du marché pour l'application Wear OS, qui peut être différent de l'URI de l'application pour téléphone. Par exemple, servez-vous d'un URI de marché tel que market://details?id=com.example.android.wearable.wear.finddevices.

Données de localisation pour les montres associées à des iPhone

Pour les montres associées à des iPhone, utilisez le Fused Location Provider (FLP) pour obtenir les données de localisation d'une montre. Pour en savoir plus, consultez Détecter la position sur Wear OS.

Si le téléphone associé est disponible, FLP l'utilise pour obtenir les données de localisation.

Obtenir uniquement les données nécessaires

En règle générale, lorsque vous obtenez des données depuis Internet, limitez-vous aux données nécessaires. Sinon, vous risquez de provoquer une latence et une utilisation de la mémoire et de la batterie inutiles.

Lorsqu'une montre est connectée via une connexion Bluetooth LE, votre application peut avoir accès à une bande passante de seulement 4 kilo-octets par seconde, selon la montre. Par conséquent, nous vous recommandons de suivre les instructions suivantes :

  • Effectuez un audit sur les requêtes et les réponses réseau afin de trouver des données supplémentaires destinées uniquement à une application pour téléphone.
  • Réduisez les images volumineuses avant de les envoyer à une montre via un réseau.

Pour les cas où un réseau à bande passante élevée est nécessaire, consultez Accès réseau à haut débit.

Autres exemples de code

L'exemple WearVerifyRemoteApp illustre de manière plus approfondie l'utilisation des API abordées sur cette page.