# Recuperar la firma de tu aplicación Android

Hace unos años, si perdías la llave firma de tu aplicación de Google Play, tenías que olvidarte de esa aplicación, ya que no había forma de recuperarla, por lo que nunca más podías actualizarla.
Por suerte, hoy en día, Google ya ofrece una solución a esto y a continuación te explico como hacerlo por si te ves en un caso similar, que no cunda el pánico.
**Antes de comenzar: esta guía ha sido creada usando el sistema operativo Windows 10**, en otros sistemas debería ser similar, pero variando los atajos de teclado y las rutas de carpetas.
## El formulario de Google
Google nos ofrece un formulario de contacto para estos casos. Es importante que saber que formulario lo tendremos que rellenar en **alguno de los siguientes idiomas: inglés, chino, japonés o coreano**; de lo contrario, es probable que no recibamos respuesta.
```
Enlace al formulario: https://support.google.com/googleplay/android-developer/contact/key
```

</br>
### **Datos personales**
Aquí tenemos que rellenar este apartado con nuestros datos personales. Deben de ser los que tenemos asociados a la cuenta de desarrollador donde se encuentra alojada la aplicación:
* **First name:** nuestro nombre.
* **Last name:** nuestros apellidos.
* **Email address:** cuenta de correo asociada.
* **Your location:** el país asociado a tu cuenta.
### Datos de desarrollador
Aquí se nos pide algunos datos de nuestra cuenta de desarrollador. Es importante que todo esté correcto, ya que es la forma que tienen de identificar que somos los propietarios de la aplicación que queremos recuperar:
* **Developer name:** tu nombre de desarrollador que aparece en Google Play.
* **Developer account ID:** el ID de tu cuenta de desarrollador, que puedes encontrarlo desde la consola de Google Play, en el apartado Información de la cuenta, o directamente desde este enlace: https://play.google.com/console/developers/contact-details
* **App package name:** el nombre del paquete de nuestra aplicación.
### Firma de Google Play
En el siguiente apartado nos pregunta si nuestra aplicación está inscrita en **Play App Signing by Google Play**, que citando a la propia documentación de Google:
</br>
> Google usa la firma de aplicaciones de Play para gestionar y proteger la clave de firma de tu aplicación, así como para firmar los APKs de distribución optimizados que se generan a partir de tus app bundles. La firma de aplicaciones de Play almacena la clave de firma de aplicación en la infraestructura segura de Google y ofrece opciones de actualización para aumentar la seguridad.
>
</br>
Podemos comprobar esto desde la consola de *Google Play*, en la aplicación que nos interesa, en el apartado *Integridad de la aplicación*.
</br>

**Debemos tener marcado el tic verde que dice: *Versiones firmadas por Google Play***, ya que de lo contrario, no podremos seguir con el resto de la guía.
A continuación y si todo va bien, tenemos que decir el motivo por el cual necesitamos asistencia, en nuestro caso marcamos *I have an upload-key-related issue* y a continuación *I lost my upload key*.
#### **Generando la nueva firma**
Cuando seleccionamos el motivo de la incidencia, vamos a ver unas instrucciones que se van a desplegar.
</br>
> Please generate a new upload key in .pem format and attach it here; we cannot process a key in any other format. Here’s how:
>
> Follow the instructions in the Android Studio Help Center to generate a new key. It must be different from any previous keys. Alternatively, you can use the following command line to generate a new key:
>
> keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks (*This key must be a 2048 bit RSA key and have 25-year validity.)
>
> Export the certificate for that key to PEM format:
>
> keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks
</br>
**Se nos pide generar una nueva firma.** Se puede hacer a través de comandos como muestra las instrucciones, aunque yo prefiero hacerlo a través de Android Studio. Para esto vamos a irnos a Android Studio y vamos a generar una nueva firma:


Rellenamos todos los datos que se nos pide para generar la firma y nos aseguramos de guardar los archivos resultantes en un lugar seguro donde no se vayan a perder, **haz tantas copias como sean necesarias**.
#### **El archivo PEM**
> PEM es un formato de archivo contenedor que se utiliza a menudo para almacenar claves criptográficas. Se utiliza para muchas cosas diferentes, ya que simplemente define la estructura y el tipo de codificación del archivo utilizado para almacenar algunos datos
</br>
Para generar nuestro archivo que es el que debemos adjuntar en el formulario, **necesitamos la herramienta** `keytool`, que si tenemos instalado el SDK de Java, la tendremos disponible en la siguiente ruta:
```
C:\Program Files\Java\jre1.8.0_331\bin
```
**Vamos a copiar la firma generada** (el fichero con extensión JKS) **anteriormente a esta carpeta**, de lo contrario puede que la consola nos dé algún tipo de error de permisos.
Una vez copiada vamos a hacer `shift + click` dentro de la carpeta y seleccionamos la opción `Abrir la ventana de PowerShell aquí` desde ahí o de lo contrario navegamos nosotros mismos hasta ahí desde cualquier terminal.
</br>
> También podemos abrir la ventana CMD de Windows con clic derecho y dándole a ejecutar con permisos de administrador y navegar a través de comandos hasta esta ruta, lo dejo a elección de cada uno.
</br>

Una vez estamos en esta ruta con el terminal abierto es hora de introducir el siguiente comando:
```bash=
keytool -export -rfc -alias key_store_alias -file upload_certificate.pem -keystore key_store_name.jks
```
**Nos va a pedir la contraseña de nuestro almacén de claves** y, una vez introducido, generará el archivo en formato PEM que necesitamos para adjuntar al reporte.
Solo por cumplimentar el campo donde debemos decir el motivo de nuestro reporte. No hay que poner nada muy elaborado, podéis poner algo similar a:
</br>
> Hello,
>
> I wanted to update my application, but I noticed that I can't find the key signature to generate it from Android Studio, and I would like to generate a new one and update it.
>
> Thank you very much,
> Regards.
</br>
**No es necesario adjuntar ninguna captura**, simplemente le damos a Submit y esperamos que nos respondan.
Hay que tener en cuenta, que desde que recibamos la confirmación de que la firma ya ha sido actualizada, hasta que podamos subir una release con la nueva, pueden pasar hasta 48 horas.
## Respuesta de Google

Si todo ha ido bien, **a los días recibiremos una respuesta de Google** parecida a esta en la que nos indica los nuevos datos de nuestro certificado y una fecha a partir de la cual podremos actualizar nuevamente nuestra app con la firma actualizada.
Si intentamos subir la aplicación firmada antes de ese tiempo, nos saltará un error en Google Play Console indicándonos que la firma ha sido cambiada recientemente, y que debemos esperar hasta el día que índica el correo.