Cómo crear apps de Wear OS para China

Cuando crees apps para Wear OS para China, deberás tener en cuenta los teléfonos celulares que no incluyen los Servicios de Google Play preinstalados. En esta página, se explican los cambios comunes que posiblemente los desarrolladores deban adoptar para el mercado chino.

Usa la versión correcta de los Servicios de Google Play

La versión 10.2.0 de los Servicios de Google Play proporciona compatibilidad a nivel mundial con la API de Fused Location Provider y la API de Data Layer. Debes usar esta versión de los Servicios de Google Play si usas estas APIs para garantizar la compatibilidad con una gama más amplia de dispositivos Wear OS en China. En otros casos, esta dependencia es opcional.

Nota: Si bien los Servicios de Google Play contienen APIs para las apps de Wear OS, las apps de Wear OS para China deben seguir usando las APIs relacionadas con GoogleApiClient. Consulta Cómo acceder a la API de wearables.

API de Fused Location Provider

Si usas la API de Fused Location Provider, incluye la siguiente dependencia en el archivo build.gradle de tu módulo de Wear OS:

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-location:10.2.0'
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-location:10.2.0")
}

API de Data Layer

Si tu app usa la API de Data Layer, debes agregar la siguiente línea al archivo build.gradle de tu módulo de Wear OS. Esta línea requiere que se use la versión 10.2.0 de la biblioteca cliente:

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:10.2.0'
    ...
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:10.2.0")
    ...
}

Agrega la siguiente línea al archivo build.gradle de tu módulo para dispositivos móviles. Reemplaza la dependencia de los Servicios de Google Play por una referencia a la versión 10.2.0.

Groovy

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:10.2.0'
}

Kotlin

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:10.2.0")
}

Autenticación

Antes de implementar la autenticación, revisa los casos prácticos para ver si es realmente necesaria. Por ejemplo, en el caso de una app que brinda el pronóstico del clima, es probable que no se necesite acceder y, por consiguiente, no se requiere autenticación.

Si necesitas autenticación, te recomendamos que uses la biblioteca de OAuth de AndroidX. Esto requiere el uso del flujo de Otorgamiento de código de autorización con PKCE. También puedes usar uno de los otros métodos descritos en Autenticación en Wear. No se recomienda el uso de la Biblioteca de compatibilidad para wearables.

Para obtener más información, consulta el ejemplo de Wear Oauth en GitHub.

Notificaciones conectadas

Las notificaciones conectadas no se admiten en China. Las notificaciones del teléfono se conectan con Wear OS únicamente si el dispositivo Wear OS está conectado al teléfono mediante Bluetooth.

Compatibilidad con la ubicación y la asignación de coordenadas

Usa el FusedLocationProvider (FLP) para detectar la ubicación del usuario en China, como lo harías para el resto del mundo. De esta manera, se garantiza que tu app tenga en cuenta la información más precisa independientemente del hardware de reloj y de la plataforma de teléfono con la que esté vinculado el reloj. El uso del FLP también agrega la optimización de la batería integrada en la plataforma Wear OS.

Cuando integres FusedLocationProvider con los SDK de mapa de terceros, ten en cuenta la compatibilidad de coordenadas entre los proveedores. FusedLocationProvider informa la ubicación de acuerdo con el estándar WGS84. Asegúrate de convertir los sistemas de coordenadas, según corresponda.

Compatibilidad con Google Fit

En China se admiten el contador de pasos acumulados, los Minutos de actividad y los Puntos cardio de Google Fit, con un historial de hasta siete días. Es posible acceder sin proporcionar credenciales de usuario.

Compatibilidad con acciones de voz

La plataforma de Wear OS proporciona varios intents de voz que se basan en acciones del usuario, como _"Mostrar frecuencia cardíaca"_ o _"Establecer una alarma"_. De esta manera, los usuarios pueden decir lo que quieren hacer y dejar que el sistema decida qué actividad iniciar.

Cuando los usuarios solicitan las acciones, tu app puede filtrar por el intent que se activa al iniciar una actividad. Para iniciar un servicio en segundo plano, muestra una actividad como una indicación visual e inicia el servicio en la actividad. Asegúrate de llamar a finish() para deshacerte de la señal visual.

A continuación, se muestra una lista de intents de voz que admite la plataforma Wear OS:

Categoría Ejemplo Especificación de intent
Parada de autos 打车去三里屯 Acción

com.google.android.gms.actions.RESERVE_TAXI_RESERVATION

Adicional

to: Es el destino reconocido.

El adicional es opcional.

Establecer alarma 设置一个明早七点的闹钟 Acción

android.intent.action.SET_ALARM

Elementos adicionales

android.provider.AlarmClock.EXTRA_HOUR: Es un número entero con la hora de la alarma.

android.provider.AlarmClock.EXTRA_MINUTES: Es un número entero con el minuto de la alarma.

Estos elementos adicionales son opcionales. Proporciona uno de ellos, ambos o ninguno.

Establecer temporizador 设置一个三分钟的倒计时 Acción

android.intent.action.SET_TIMER

Elementos adicionales

android.provider.AlarmClock.EXTRA_LENGTH: Es un número entero de 1 a 86,400 (la cantidad de segundos que hay en 24 horas) que representa la duración del temporizador.

Iniciar cronómetro 开始计时 Acción

com.google.android.wearable.action.STOPWATCH

Iniciar o detener un recorrido en bicicleta 开始骑车 Acción

vnd.google.fitness.TRACK

Tipo de MIME

vnd.google.fitness.activity/biking

Elementos adicionales

actionStatus: Es una string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene.

Iniciar o detener una carrera 开始跑步 Acción

vnd.google.fitness.TRACK

Tipo de MIME

vnd.google.fitness.activity/running

Elementos adicionales

actionStatus: Es una string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene.

Iniciar o detener un entrenamiento 开始锻炼 Acción

vnd.google.fitness.TRACK

Tipo de MIME

vnd.google.fitness.activity/other

Elementos adicionales

actionStatus: Es una string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene.

Mostrar la frecuencia cardíaca 查看心率 Acción

vnd.google.fitness.VIEW

Tipo de MIME

vnd.google.fitness.data_type/com.google.heart_rate.bpm

Mostrar el recuento de pasos 查看步数 Acción

vnd.google.fitness.VIEW

Tipo de MIME

vnd.google.fitness.data_type/com.google.step_count.cumulative

Navegación 导航去三里屯 Acción

android.intent.action.VIEW

Datos

geo:latitude,longitude?q=融科资讯中心

El Asistente de voz también puede usar intents comunes de Android para activar ciertos comportamientos cuando corresponda.

Compatibilidad con el emulador

Puedes usar la versión china de la imagen del emulador de Wear OS para probar tu app, ya que es compatible con Android Studio 3.0 y versiones posteriores.

Para probar tus apps en la versión china del emulador, sigue estos pasos:

  1. Instala Android Emulator.
  2. Descarga Wear OS para imágenes de China desde SDK Manager. Usa la versión para Wear OS 3.5 (nivel de API 30).
  3. Elige la imagen de Wear OS para China cuando crees un perfil de AVD.
  4. Ejecuta Wear OS para el emulador de China para comenzar con el desarrollo.
  5. Figura 1: Ejemplos de la versión para China del emulador de Wear OS.

Esta versión del emulador de Wear OS incluye varias apps preinstaladas:

  • Modo ambiente
  • Contactos
  • Escritura a mano de Google
  • Servicios de Google Play
  • Servicios de salud para Wear OS
  • Reconocimiento de palabras clave para dispositivos LE
  • Pinyin
  • Play Store (adaptada para dispositivos en China)
  • Pocketwatch
  • TalkBack
  • Caras de reloj (versiones analógicas y digitales)
  • Servicios principales de Wear

Inicia un canal de Bluetooth y Wi-Fi específico de la app

Wear OS enruta las solicitudes de red automáticamente. En la mayoría de los casos, no hay ningún requisito para que la app abra un canal de Bluetooth y Wi-Fi específico de la app.

Si una app solicita un canal de Bluetooth y Wi-Fi específico de la app en China, la solicitud fallará silenciosamente. En su lugar, se muestra un diálogo en el que se solicita la confirmación del usuario. Al confirmar, se abrirá el canal. Esto sucede cada vez, no solo en el primer uso. Se llama a BluetoothAdapter.enable() o a WifiManager.setEnabled(true).

Nota: Para que una app orientada a Android 10 (nivel de API 29) llame a WifiManager.setEnabled(), debe ser una app del sistema o un controlador de política de dispositivo (DPC).

Modo de revisión de permisos

En China, los dispositivos con Wear OS para este país se ejecutan en el modo de revisión de permisos, lo que impone algunos límites sobre el uso de apps con un targetApiLevel inferior a 23: Revisa los siguientes límites:

  • Si bien los permisos se otorgan durante la instalación, cuando se inicia por primera vez una app con un targetApiLevel inferior a 23, aparece un diálogo en el que se le solicita al usuario que confirme los permisos para esta app.
  • Los componentes de la app, como los receptores de emisión, los servicios y las actividades, no responden a los eventos correspondientes antes de que esta se use por primera vez.

Como resultado, te recomendamos que uses un targetApiLevel 23 o una versión posterior y adoptes las prácticas recomendadas sobre permisos de las apps.

Usa otras APIs de los Servicios de Google Play

Si tu app usa las APIs de los Servicios de Google Play en lugar de la API de Wearable, entonces debe verificar si estas APIs están disponibles para usar durante el tiempo de ejecución y responder según corresponda. Existen dos formas de verificar la disponibilidad de las APIs de los Servicios de Google Play:

  1. Usa una instancia independiente de GoogleApiClient para conectarte a otras APIs. Esta interfaz contiene devoluciones de llamada que se usan para alertar a tu app sobre el éxito o la falla de la conexión. En caso de que la conexión falle, el ConnectionResult muestra API_UNAVAILABLE. Para aprender a controlar las fallas de conexión, consulta Acceso a las APIs de Google.
  2. Usa el método addApiIfAvailable() de GoogleApiClient.Builder para la conexión con las APIs requeridas. Una vez activada la devolución de llamada onConnected(), usa el método hasConnectedApi() para asegurarte de que cada una de las APIs solicitadas esté conectada correctamente.

Cómo distribuir apps en China

Para llegar de manera eficiente a los usuarios de Wear OS para China, puedes distribuir tu app en tiendas de apps de Wear OS de terceros, como las siguientes: