Conceptos de Android (para desarrolladores web)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

Si eres desarrollador web y recién comienzas a usar Android y Google Play, hay algunos detalles que debes tener en cuenta. Ya existen muchos recursos y documentación relacionados (gracias al equipo de Android), pero aquí destacaremos algunos conceptos importantes y cómo se relacionan con el envoltorio de burbujas.

Comparación entre la clave de firma y la de carga

Si quieres usar burbujas para generar un Android App Bundle (AAB) (Nota: A partir de agosto de 2021, Google Play exigirá que todas las apps nuevas usen el formato Android App Bundle) o APK para subir y publicar contenido en Google Play, deberás firmar la app con una clave de firma. Google Play te ofrece dos opciones para controlar esto:

  • Firma de apps de Play (muy recomendado): Google administrará y protegerá la clave de firma de tu app por ti. Lo usa para firmar tus APKs para su distribución. La firma de apps de Play usa dos claves. La "clave de firma de la app" que administrará Google por ti y la "clave de carga", que conservarás y deberás mantener tu privacidad. Usa la clave de carga para firmar la app y subirla a Play Console. Este sistema te permite restablecer la clave de carga si alguna vez se pierde o se ve comprometida. Para ello, comunícate con el equipo de asistencia al cliente de Play. Actualmente, Google Play te permite subir tu app como AAB o APK:
    • Android App Bundle (AAB): Cuando subes un AAB a Play Console, se aplaza la compilación y generación de APKs a Google Play Store. Cuando un usuario descarga e instala tu app, Google Play la distribuye como un APK firmado. Por lo tanto, Google Play también deberá firmar los APKs. Por lo tanto, de forma predeterminada, si subes tu app como un AAB a Play Console, deberás usar la firma de apps de Play.
    • APK: Con los APK, tienes la opción de habilitar la firma de apps de Play. Se recomienda habilitar la firma de apps de Play porque aumenta la seguridad de tu clave de firma. Como se indicó antes, Google Play pronto exigirá que todas las apps nuevas se suban en formato AAB, por lo que te recomendamos que hagas esto en lugar de subir APKs.
  • Administrar tu propia clave de firma: Si decides administrar tu propia clave sin habilitar la firma de apps de Play, serás completamente responsable de la clave de firma de la app. A diferencia de la firma de apps de Play, no es posible restablecerla si pierdes la clave. Por lo tanto, si pierdes la clave de firma de la app, también perderás la capacidad de actualizar la app.

Durante la configuración de bubblewrap init, cuando llegues a la sección "Signing key information (5/5)", se te pedirá que ingreses una "Ubicación del almacén de claves" y un "Nombre de la clave", o que uses los valores predeterminados. La ubicación predeterminada del almacén de claves es el archivo android.keystore en el directorio de tu proyecto, y el nombre de la clave predeterminado es android. Si en la ubicación no se encuentra un almacén de claves existente con ese nombre de clave, se creará uno por ti y también se te pedirá que ingreses las contraseñas. Toma nota de las contraseñas que ingresaste, ya que las necesitarás durante el proceso de compilación (bubblewrap build), ya que usarán la clave para firmar la app. Si habilitas la firma de apps de Play, la clave de firma que generó y usó la de burbujas para firmar tu app se convertirá en la "clave de carga". Independientemente de si eliges usar la clave generada por Burbblewrap como clave de firma o de carga, debes protegerla y mantenerla privada. No recomendamos confirmarlo en el control de versiones. En cambio, limita la cantidad de personas con acceso a él.

Los Vínculos de recursos digitales son necesarios para declarar la relación entre tu sitio web y tu app para Android. Para asegurarte de que la app para Android que genera Burbucle se verifique correctamente y se inicie como actividad web de confianza (en lugar de una pestaña personalizada de Chrome), deberás agregar la clave adecuada al archivo assetlinks.json. Luego, súbelo a tu sitio web en .well-known/assetlinks.json (relativo a la raíz). Tu archivo assetlinks.json debe tener este formato:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

Obtén la huella digital del certificado SHA256

Para crear el archivo assetlinks.json, necesitarás la huella digital del certificado SHA-256 asociada con la clave de firma de tu app. Es importante tener en cuenta que las huellas digitales asociadas con las claves de firma y carga serán diferentes. Es importante tener en cuenta esta distinción, en especial si observas que tu app se inicia como una pestaña personalizada de Chrome (con la barra del navegador visible). Entonces, es probable que tu archivo assetlinks.json no tenga la huella digital correspondiente a la clave apropiada.

Resulta útil tener la huella digital del certificado de carga y de firma en el archivo assetlinks.json para depurar la app a nivel local con mayor facilidad. Consulta Cómo agregar más claves a continuación para obtener más información sobre cómo tener ambas claves en el archivo assetlinks.json.

Hay dos maneras diferentes de obtener la huella digital que se detallan en las siguientes secciones. Todos deberían tener las mismas huellas digitales, así que puedes elegir el método que te resulte más conveniente.

Mediante Play Console

Dependiendo de si habilitas la firma de apps de Play o no, es posible que tengas una o dos claves. Para recuperar la huella digital SHA256 correspondiente a cada clave, haz lo siguiente:

  1. Accede a Play Console.
  2. Selecciona la app que te interesa
  3. En el menú de navegación de la izquierda, en Versión, ve a Configuración -> Integridad de la app.
  4. Copia el SHA256 para la clave apropiada:

Recuperar la huella digital del certificado SHA256 correspondiente a tu clave de firma o de carga

  • Clave de firma: Copia la huella digital SHA256 para el “Certificado de clave de firma de la app”. Esta huella digital corresponderá a tu app si la descargas de Google Play Store, ya que Google Play distribuye la app firmada con la clave de firma.

  • Clave de carga: Copia la huella digital SHA256 para el “Certificado de clave de carga”. Esta huella digital corresponderá a tu app si la instalas de forma local (por ejemplo, mediante ADB por USB). Ese APK (en tu máquina local) se compiló mediante Burbujas y, por lo tanto, también se firmó con la clave que creó para ti (durante la configuración de init). Recuerda que esta puede ser la clave de firma para la app instalada de forma local, pero en realidad se convierte en la "clave de carga" una vez que publicas la app mediante Play.

A través de keytool

keytool es una herramienta de administración de claves y certificados. Puedes usar Keytool para extraer la huella digital SHA 256 asociada con el APK o el envoltorio AAB que se generó. Ten en cuenta que esta huella digital es para la clave de firma local y, si subes la app a Play y habilitas la firma de apps de Play, esta se convertirá en la "clave de carga".

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

Otra forma de obtener el archivo correcto de Vínculos de recursos digitales para tu app es usar la herramienta de vínculos de recursos:

  1. Instala la herramienta de vinculación de recursos desde Play Store.
  2. En el mismo dispositivo, descarga tu app desde Google Play Store o instálala de forma local.
  3. Abre la app de la herramienta Asset Link y se te dará una lista de todas las aplicaciones instaladas en tu dispositivo según el nombre de paquete. Filtra la lista por el ID de aplicación que elegiste antes durante bubblewrap init y haz clic en esa entrada.
  4. Verás una página con la firma de tu app y un vínculo de recursos digitales generado. Haz clic en los botones Copiar o Compartir en la parte inferior para exportarlos de la forma que prefieras (p.ej., guardarlo en Google Keep o enviártelo por correo electrónico).

Se aplica la misma idea que antes con las claves de firma o carga. Si instalaste la app desde Google Play Store, Asset Link Tool obtendrá la huella digital de la clave de firma de tu app. Si instalaste la app directamente desde tu máquina local, la huella digital es para la burbuja de claves generada.

Ahora que lo subiste, asegúrate de que puedes acceder al archivo de vínculo de recursos en un navegador. Verifica que https://example.com/.well-known/assetlinks.json se resuelva en el archivo que acabas de subir.

Sitios web basados en Jekyll

Si Jekyll genera tu sitio web (como las páginas de GitHub), deberás agregar una línea de configuración para que el directorio .well-known se incluya en el resultado. La ayuda de GitHub tiene más información sobre este tema. Crea un archivo llamado _config.yml en la raíz de tu sitio (o agrégalo si ya existe) y, luego, ingresa lo siguiente:

# Folders with dotfiles are ignored by default.
include: [.well-known]

Agrega más claves

Un archivo de Vínculos de recursos digitales puede contener más de una app y, por cada app, puede contener más de una clave. Por ejemplo, para agregar una segunda clave, usa la herramienta de vinculación de recursos a fin de determinar la clave y agrégala como segunda entrada. El código en Chrome que analiza este JSON es bastante estricto, así que asegúrate de no agregar por accidente una coma adicional al final de la lista.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

Solución de problemas

Chrome registra el motivo por el que falla la verificación de Vínculos de recursos digitales, y puedes ver los registros en un dispositivo Android con adb logcat. Si desarrollas contenido en Linux/Mac, puedes ver los registros relevantes desde un dispositivo conectado con lo siguiente:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

Por ejemplo, si ves el mensaje Statement failure matching fingerprint., debes usar la herramienta de vinculación de recursos para ver la firma de tu app y asegurarte de que coincida con la del archivo assetlinks.json.