Subir APK a Google Play automáticamente

Hoy vamos a ver como subir un APK a Google Play directamente, usando la línea de comandos, sin pasar por el navegador. Perfecto para automatizar la publicación de actualizaciones.

desarrollador-android-680x394

 

Google Play, como muchos otros servicios de Google, dispone de una API. Gracias a ella podemos interactuar con los servicios de Google directamente desde nuestro código. Para ello necesitaremos un Client ID, un Client Secret y un refresh_token. En mi entrada sobre como crear credenciales OAuth2 para Google sabras como hacerlo. Busca la API de Google Play Android Developer API y actívala. Anota el client ID, el client secret y el refresh_token. Además es necesario que entres a la consola de desarrollo de Google Play y autorices tus credenciales en Configuración -> Acceso a API

screenshot-play google com 2016-07-26 17-23-56

Ahora podemos pasar a escribir nuestro script de subida de APK. Para ello usaremos Node.js y el fantástico paquete googleapis, que se encuentra en npm.

Iniciar sesión en googleapis

Primero instala el paquete con npm.

Teniendo a mano el client ID, el client secret y el refresh_token podemos iniciar sesión.

Crear y publicar una edición

¿Cuál es el procedimiento para subir un APK a Google Play usando la API?

  1. Crear una nueva edición
  2. Subir un APK a esa edición
  3. Asignar el APK a algún canal de distribución
  4. Guardar y publicar los cambios de la edición

Cuando creemos una edición se nos dará un ID de edición. Lo usaremos en el resto de llamadas. También cuando subamos un APK nos darán un versionCode que usaremos para asignar a uno de los canales de distribución. Google Play dispone de 4 canales de distribución:

  • alpha: Solo para los usuarios que hayas autorizado explícitamente
  • beta: Solo para los usuarios que hayas autorizado explícitamente
  • production: La versión que tienen todos los usuarios que no están registrados en alpha y beta.
  • rollout: Similar a production. Se indica un procentaje y Google se encargará de que solo el porcentaje de usuarios indicado tengan la actualización. Es ideal para probar nuevas características sin involucrar a todos tus usuarios.

Finalmente el código final del script queda así.

Crear credenciales OAuth2 para Google

Google dispone de muchas APIs a nuestra disposición de forma gratuita. Para poder usarla es necesario que hayamos iniciado sesión. Desde un navegador como Firefox o Chrome es muy sencillo, introducimos nuestro usuario y contraseña y ya podemos acceder a Gmail, YouTube, etc. Si queremos hacerlo desde nuestro propio programa también es posible, pero el procedimiento es distinto. Una vez hagamos esto podremos hacer lo mismo que haría un usuario, lo único que programándolo (leer los contactos, leer el correo, modificar suscripciones de YouTube, publicar en Blogger, etc).

Crea un proyecto de API

Crea un proyecto de Google y crea unos credenciales nuevos en la consola de APIs de Google.

screenshot-console developers google com 2016-07-26 14-52-43

Los credenciales pueden ser de varios tipos: clave de API, ID de OAuth y cuenta de servicio. La clave de API solo funciona en algunas API, el ID de OAuth es el sistema universal y la cuenta de servicio es para APIs de desarrollo. Creamos un ID de OAuth, pues es el método más universal.

screenshot-console developers google com 2016-07-26 16-29-16

Dependiendo de dónde opere nuestra aplicación tendremos un método u otro. El método Web requiere disponer de un servidor web y es el sistema óptimo si tenemos una aplicación Web (por ejemplo, tenemos una red social y queremos una opción de leer contactos de Gmail, usaríamos Web, pues es el procedimiento más cómodo). Si tu programa no tiene un servidor web detrás (es un programa normal de Windows, una herramienta de línea de comandos, un plugin de Firefox,…) usa Otro. Voy a explicar como funciona Otro.

screenshot-console developers google com 2016-07-26 16-30-31

Obtendremos un ID de cliente y un secreto de cliente. Guardamos esas dos claves, son muy importantes. Ahora vamos a activar las APIs. A la izquierda accedemos a Biblioteca. Buscamos la APIs que queramos usar y las activamos.

screenshot-console developers google com 2016-07-26 16-36-27

Obteniendo un access_token y un refresh_token

Para poder llamar a la API de Google es necesario tener un access_token. Los access_token caducan a las pocas horas. Para poder seguir realizando operaciones en la API pasado ese tiempo necesitamos un refresh_token. El refresh_token sirve exclusivamente para pedir un access_token nuevo. Este no caduca, pero no garantiza que siempre nos devuelva un access_token pues puede que el usuario haya decidido eliminar el permiso a nuestro programa.

El procedimiento de OAuth2 es el siguiente:

  1. Nuestra aplicación quiere autenticar al usuario en Google
  2. Nuestra aplicación genera una URL especial que debe abrir el usuario en el navegador
  3. En esa URL inicia sesión en Google el usuario, igual que si fuera a iniciar sesión en Gmail
  4. Se le informa al usuario de los permisos/APIs que nuestro programa quiere usar
  5. El usuario acepta o rechaza
  6. Si acepta ocurren varias cosas dependiendo del método. Si elegiste Otro se mostrará un código que deberás copiar en la aplicación.
  7. Ese código la aplicación lo envía a Google junto a nuestros datos de client ID y client secret.
  8. Google nos envía el access_token y el refresh_token.

Elaborar la URL de inicio de sesión

En la URL de inicio de sesión figuran varios datos.

  • El tipo de petición
  • Los permisos o APIs a las que queremos acceder (scopes)
  • Nuestro ID de cliente
  • Y la URL de redirección, que en nuestro caso, es especial.

En este ejemplo vemos una petición, con dos APIs o permisos, Chrome WebStore y Google Play.

Validar el código

El usuario nos dará el código que le haya dado Google. Nosotros ahora para obtener el access_token y el refresh_token tenemos que enviarlo de vuelta. En Curl el comando sería el siguiente:

La respuesta, en un fichero JSON, contendrá el access_token y el refresh_token. En las librerías de APIs de Google muchas veces basta con especificar el client ID, el client secret y el refresh_token, pues se encargan de pedir automáticamente el access_token.

Tutorial de GnuCash en castellano

GnuCash es un programa de contabilidad y finanzas para familias y PYMES, software libre perteneciente al proyecto GNOME. Es un programa muy potente, por desgracia su uso puede no ser muy intuitivo.

GnuCash

Creando un libro

Todo absolutamente todo se guarda en un único archivo, que puede ser de varios tipos (XML, sqlite3, MySQL, PostgreSQL). Cuando iniciemos GnuCash veremos este asistente que nos ayudará a crear un libro.

NuevaCuenta

Lo primero que deberemos elegir será la moneda principal. Lo habitual es que elijáis la moneda oficial de vuestro país, en mi caso, el Euro.

SeleccionarMoneda

Ahora aparecerán las opciones del libro de contabilidad. Estas opciones normalmente solo se aplican a empresas y están destinadas a generar facturas o hacer presupuestos. La única opción que quizá os interese es la de Trading accounts que es interesante si vais a manejar cuentas en varias monedas. Ahora tenemos que seleccionar una plantilla para tener cuentas ya generadas. Esto puede ser algo confuso, ya que es obligatorio seleccionar al menos una plantilla. Yo no recomiendo ninguna y prefiero empezar de cero, para eso selecciona la plantilla más básica que hay Childcare expenses y continúa hasta que estes ya en la vista principal de GnuCash.

Plantillas

VistaPrincipalGnuCash

A continuación vamos a dejar el libro vacío. Pulsa botón derecho sobre Expenses y luego clic en Delete account… Se te preguntará si quieres mover o borrar, selecciona la opción Delete all subaccounts.

Creando cuentas

GnuCash usa un sistema de doble entrada. Quiere decir que todos los gastos e ingresos deben ir anotados en dos partes. Por ejemplo, si anotamos en Gastos una comida en un restaurante, tenemos que anotar también el gasto en la cuenta de Metálico, que es de donde provino el dinero. Naturalemente no lo tenemos que hacer manualmente, cuando anotemos un ingreso o gasto en GnuCash este se encargará de anotarlo donde sea oportuno.

Ahora que tenemos el libro en blanco vamos a ir creando unas cuentas maestras y unas subcuentas. GnuCash dispone de los siguientes tipos de cuentas:

  • Asset (Activos)
    • Son aquellas cosas que tienen valor y pueden usarse para pagar cosas. En esta categoría entra desde el dinero en metálico hasta las propiedades inmobiliarias.
  • Bank (Banco)
    • Este subtipo se usa para anotar los fondos de una cuenta bancaria (que puede tener un interés) y para las tarjetas de débito.
  • Cash (Metálico)
    • Este subtipo de cuenta nos permite anotar el dinero que poseemos en metálico
  • Credit Card (Tarjeta de crétido)
    • Este subtipo de cuenta es específico para tarjetas de crédito
  • Equity
    • Este tipo está destinado a ofrecer los saldos de apertura de las cuentas. Como GnuCash es un sistema de partida doble es necesario que el dinero provenga de algún sitio. Normalmente vendrá de Income pero cuando abrimos una cuenta en la que ya teníamos dinero antes y queremos que GnuCash la contabilice, añadir el saldo de apertura a ingresos no es práctica recomendada. Así Equity permite tener saldos de apertura en las cuentas que no habían sido contabilizados antes por GnuCash.
  • Expense (Gastos)
    • Aquí se anotan los gastos. Esta cuenta y sus subcuentas son las que más usaremos en el día a día.
  • Income (Ingresos)
    • Aquí se anotan los ingresos. Es la segunda que más usaremos después de Expense.
  • Liability (Obligaciones)
    • Aquí podemos anotar deudas que tenemos pendientes de pago.
  • Mutual Fund (Fondo de Inversión)
    • Una cartera de valores de inversión compuesta de Stocks.
  • Stock (Acción)
    • Un subtipo de cuenta que representa las acciones que se poseen de una empresa.

¿Son estas todos los tipos de cuenta que permite GnuCash? No, hay algunas más de tipo interno. Sin embargo con estos tipos tendremos suficientes para construir el árbol de cuentas de nuestro libro.

Creamos una nueva cuenta New account…

NuevaCuentaActivos

Lo primero es decidir el Account Type, cuando crees tu libro yo recomiendo hacer la primera la de Activos, del tipo Asset. ¿Qué nos pregunta el formulario?

  • Account name. Un nombre para la cuenta.
  • Account code. Permite asignar un código alfanumérico a la cuenta. Es usado para determinar el orden de las cuentas cuando se generan informes. Además si trabajas con contabilidades más complejas sabrás que es habitual que en muchos sitios incluso pidan los gastos en números de cuenta estandarizados (en la administración por lo menos es así, así ellos pueden combinar todas las cuentas del mismo número y sacar datos globales). Es habitual que las cuentas padre acaben en cero. Es totalmente opcional y si usas GnuCash en casa simplemente deja ese campo vacío.
  • Description. Una descripción de la cuenta
  • Security/Currency. Si nuestra cuenta no es Stock o Mutual Fund sirve para indicar la moneda de la cuenta. Si sí que es una cuenta Stock o Mutual Fund sirve para indicar la acción en sí. Cabe destacar que en GnuCash es posible añadir subcuentas dentro de una cuenta cuya moneda sea distinta (una subcuenta en dólares dentro de la cuenta Activos que es en euros). Luego veremos como ajustar la tasa de conversión para los informes. También hay gente que prefiere que todas las cuentas sean de la misma moneda, en ese caso crean Activos en Euros y Activos en Dólares.
  • Smallest fraction. La fracción más pequeña de la moneda con la que estemos trabajando. En general es habitual dejarlo por defecto, pero este ajuste nos será de utilidad con las criptodivisas.
  • Account Color. El color de la cuenta. Uso puramente estético.
  • Notes. Podemos guardar notas. Este campo lo considero de gran utilidad pues me permite guardar los códigos IBAN y BIC dentro de las cuentas bancarias.
  • Hidden. Si quieres que no se vea. Yo lo quito siempre, pues me gusta ver el árbol completo.
  • Placeholder. Una cuenta placeholder es específicamente diseñada para tener subcuentas. Quiere decir que no es posible anotar en ellas directamente, solo a través de alguna de sus subcuentas. En el caso de las cuentas principales recomiendo que todas sean placeholder, así siempre especificaremos la subcuenta donde se ha producido el ingreso/gasto.
  • En la pestaña superior Opening balance podemos indicar el saldo de apertura. Se anotará también en una cuenta de tipo Equity.

Creamos la cuenta y listo. Ahora vamos a crear muchas cuentas hasta que se adapte a nuestra situación. Mis consejos para diseñar el árbol son:

  • La cuenta Activos puede tener activo circulante o propiedades, sin embargo no recomiendo añadir propiedades, ni otros activos que no sean dinero en sí (obras de arte, etc) salvo casos muy específicos.
  • Dentro de la cuenta Activos suelo crear otra cuenta para cada banco. Luego dentro de la cuenta de cada banco creo la correspondiente Bank account de las cuentas bancarias.
  • Hay sistemas de pago (PayPal) y tarjetas (Revolut) que permiten más de una divisa simultánea. En ese caso yo suelo crear subcuentas, una en cada divisa que permita y de la que preveo tener fondos. Por ejemplo, en PayPal creo la cuenta de tipo Asset placeholder con dos subcuentas, PayPal EUR y PayPal USD.
  • Las criptodivisas como Bitcoin pueden ser manejadas por GnuCash de manera extraoficial. Los desarrolladores se han negado a añadir el código de la moneda (BTC o XBT) hasta que aparezca en el estándar ISO. Sin embargo GnuCash viene con un montón de otras monedas. La moneda XXX, que no respresenta a ninguna real puede hacer de Bitcoin. Pero para que funcione bien es importante que el valor de Smallest Fraction sea el que permita más digitos decimales. Aun así GnuCash tendrá problemas con tantos decimales a los que acostumbra Bitcoin por lo que puede ser interesante que XXX sean Milibitcoins o Satoshis.

ArbolDeCuentas

Cambios de divisa

GnuCash permite que creemos cuentas en muchas divisas. Sin embargo, como puedes apreciar en la imagen superior, en la cuenta de PayPal, la moneda extranjera no aparece convertida y no es tenida en cuenta. Esto es porque por defecto GnuCash aplica un tipo de cambio 0, es decir, la moneda extranjera no vale nada. Puedes dejarlo así o puedes añadir el cambio. Hay dos formas, una manual y otra automática.

Vamos a Tools -> Price Editor. Veremos una ventana vacía con botones a la derecha. Si tenemos Perl instalado en nuestro ordenador con el módulo Finance::Quote veremos el botón Get Quotes activado. Ese botón sirve para actualizar los precios de los cambios de divisa y de las acciones. Ese es el modo automático. Si necesitas instalar Perl en Windows puedes usar ActivePerl o Strawberry Perl.

Si queremos hacer el cambio manualmente iremos a Add.

PriceEditor

En este caso vamos a añadir el precio para pasar de dólares USD a euros. El namespace es CURRENCY, security es la moneda a la que queramos hacer la transformación a nuestra moneda. Currency la dejamos tal cual. La fecha estará puesta a día de hoy. Esto es muy cómodo porque GnuCash permite guardar el historial de tipos de cambio. Así, cuando haya un nuevo tipo de cambio simplemente vuelves a dar a Add… y se guardará en una fecha distinta. GnuCash será lo suficientemente listo para saber que tipo de cambio ha de usar en cada momento. Por último Price es el precio de 1 dólar en euros. Hay muchos sitios de donde sacar esta información. En Google simplemente con escribir “1 USD to EUR” tendremos el resultado.

USDtoEUR

Anotar ingresos y gastos

Cuando usemos GnuCash en nuestro día a día lo más normal es que anotemos ingresos y gastos. Es necesario haber creado cuentas de tipo Income y Expense para anotar ingresos y gastos respectivamente. Dentro es habitual crear subcuentas, cada una de una categoría de ingreso o gasto (sueldo, pensión, multas, restaurantes, …).

Selecciona la cuenta y haz doble click o pulsa el botón Open, se abrirá en una nueva pestaña, donde podremos ver algo parecido a un libro de contabilidad del MundoReal. Allí podemos revisar las anotaciones anteriores y editarlas (aunque no es recomendable editar la contabilidad, ejem,…). Pero por defecto el foco se centra en la fila inferior, donde podemos introducir una nueva entrada al libro de contabilidad.

LibroGnuCash

La fecha la podemos ajustar a cuando se realizó el ingreso/gasto. El número es solo necesario si eres una empresa y las facturas están numeradas. La descripción es un campo libre, donde explicamos el ingreso/gasto. La siguiente columna es Transfer donde debemos de elegir la cuenta de Activos donde se ingresará/eliminará la cantidad. Allí, en la cuenta del Activo también se guarda una copia. Recuerda GnuCash es un sistema de partida doble. Con el botón superior Jump es posible ir a la cuenta del Activo y viceversa, aunque no es necesario. La R es un indicador de reconciliación, no se toca. Charge son cargos que pudiera tener e Income es el beneficio. En una cuenta Expense las columnas son Expense y Rebate, de funcionamiento exactamente igual. Ambas tienen Balance que es el balance total.

Si tienes una transacción compleja donde los ingresos y los gastos ocurren en varios lugares (pagar el sueldo a un trabajador) puedes hacer una transacción partida o Split.

Transferencias entre cuentas

TransferenciaGnuCash

Las transferencias entre cuentas de activos son sencillas de realizar. Simplemente busca en Actions -> Transfer. En caso de que las cuentas tengan distinta divisa es posible ajustar el cambio. El botón Fetch Rate solo funcionará si tienes el plugin de Perl instalado. La columna de la izquierda es la cuenta de origen y a la derecha se sitúa la cuenta de destino.

Programar operaciones

Si sabemos que un ingreso o pago va a realizarse de manera periódica podemos automatizarlo. Cuando GnuCash se abra comprobará si desde que abriste el programa por última vez ha habido algún día con una operación programada y la realizará.

Vamos a Actions -> Schedule -> Scheduled transactions editor. En una nueva pestaña veremos un calendario y una lista de operaciones vacía. Creamos una nueva en New.

 

En Frequency ajustamos cuando queremos que esta operación se realice. Otra opción es hacer una operación en el libro y desde allí crear una operación programada siguiendo los mismos parámetros que la ya realizada.

Nomina

GnuCash no es solo esto, también dispone de informes y presupuestos, pero eso se verá en otro momento.