La insoportable dependencia de las tiendas de aplicaciones

El avance imparable de la informática en todas las áreas nos ha creado nuevos problemas a los desarrolladores, no ya el hecho de tener que conocer nuevas herramientas cada mes, o nuevos frameworks de desarrollo que tardas más tiempo en aprender que el que te ahorras, sino la pérdida completa del control de lo que tus usuarios pueden instalarse, dónde y cómo. Os pondré un ejemplo.

NoMorePass es una aplicación móvil de la que os llevo hablando bastante y que desarrollamos nosotros; a nivel básico consiste en la app y un conjunto de extensiones para los navegadores que nos permiten intercambiar las contraseñas mediante un código QR. La app ahora mismo tiene su máxima utilidad cuando se usa desde la extensión. Desarrollar una extensión para navegador no es especialmente complicado, como ya os expliqué en esta entrada, probarlas tampoco es difícil con el modo desarrollador de los navegadores, pero una vez que la tenemos lista tenemos que pasar por un infierno inesperado… Ponerla a disposición del público.

Antes se podía distribuir un archivo empaquetado que al abrirse permitía instalar la extensión, pero esa forma de distribuir extensiones se volvió peligrosa (a pesar de que los navegadores preguntaban muchas veces si de verdad querías instalar eso) y Google decidió que para chrome solo se podían instalar extensiones que pasasen por su tienda de aplicaciones el chome web store. Firefox, por su parte, no lo hace obligatorio por el momento, pero la mejor manera de que una extensión se conozca es tenerla en la página de add-ons de firefox. Lo mismo pasa con Opera (aunque esta es otra odiséa que ya os contaré) y, hasta el momento, con Edge.

No tengo nada en contra de las tiendas de aplicaciones mientras estas funcionen de manera ágil y razonable. A efectos prácticos se convierten en cuellos de botella que pueden afectar en gran medida a la forma en la que se produce la distribución de los productos. Como ejemplo valga lo que me ha pasado en las últimas semanas con la extensión de chrome.

El día 19 de noviembre terminé de desarrollar una mejora a la extensión que había en la tienda, pasaba de la versión 2.1.1 a la 3.0.0 y tras probarla en local y funcionando perfectamente intenté subirla al web store… Se quejó que de que pedía demasiados permisos (cosa que no hizo con la versión anterior) y modifiqué la extensión para que funcionase sin necesidad de pedirlos, generé una nueva versión y la subí a toda prisa… Tanta prisa que se me coló un bug que impedía que funcionase el botón derecho (una funcionalidad que se usa mucho cuando la web no está reconocida o queremos rellenar un formulario con una contraseña que tenemos)… Me di cuenta de ello minutos después de haber «publicado» la versión y cuando intenté subir la versión corregida veo que NO ME DEJA... Dice que la extensión está pendiente de revisión y no se puede enviar otra versión. WTF!!!

No había mucho problema, la versión anterior funcionaba perfectamente y las nuevas funcionalidades podían esperar… Así que esperé ¡¡5 DIAS!! a que Google pasara a producción la versión con el bug un sábado por la mañana… Inmediatamente subí la nueva versión (que solo tiene 2 líneas de código distintas con la versión anterior) esperando que se aprobase inmediatamente y que los clientes no tuviesen que sufrir el bug… Pero no, volvieron a poner en revisión la nueva versión y en esas estamos, llevamos ya 4 días con la versión defectuosa de la extensión y con clientes que ya se han quejado… Y no podemos hacer nada, Google nos ha jodido y no nos da ninguna pista de cuando se publicará de verdad la nueva versión.

No hay nada que podamos decir a los clientes, no hay forma de volver a una versión antigua si tenías la auto-actualización de las extensiones (google no guarda las versiones viejas) y no hay forma de acelerar el proceso de publicación. Tampoco hay forma de hablar con Google (he mandado múltiples formularios de contacto con un sonoro silencio por respuesta), tampoco puedo dar un método alternativo para instalar la extensión porque Google obliga a usar su tienda si-o-si, así que no queda más que esperar a que se publique finalmente la nueva versión y disculparnos ante los clientes y asumamos las pérdidas que esto nos pueda ocasionar como algo inevitable… Muy mal google.

ACTUALIZACIÓN 1: 28/11/2019 Google ha leído este post y ha decidido ir un paso más adelante, nos ha RECHAZADO la extensión por pedir más permisos de los que necesitamos (cuando la anterior versión pedía exactamente los mismos)…

Nada, nueva versión pidiendo menos permisos (v3.0.2) y a esperar otros cuatro días (con suerte)…

Creando extensiones para los navegadores

Como ya os he comentado, desarrollando mi nuevo proyecto NoMorePass, uno de los elementos fundamentales para que se usase la app era disponer de un plugin para el navegador que permitiese interceptar las páginas con usuario/password y entrar en las mismas con el protocolo seguro de NoMorePass. Aunque en principio solo quería hacer uno para demostrar lo que se podía hacer (el de chrome, por obvias razones), al final terminé desarrollando cinco para cubrir la mayoría de las necesidades. No voy a entrar en detalles ahora sobre la tecnología subyacente, lo que voy a hacer es contaros las principales diferencias entre cada uno de los ecosistemas para los que hice las extensiones y los problemas que nos vamos a encontrar.

Todas las extensiones que he programado han funcionado (que no es poco) y todas están en javascript, así que esa parte me la voy a saltar y voy a contaros los problemas que me encontré en orden cronológico.

Chrome

Aunque, a priori, creí que iba a ser el más complicado, porque partía de una base muy pobre en lo que a extensiones se refiere, al final no fue para tanto. La documentación que dispone en la web de developers de chrome es muy completa y con ejemplos que sirven para casi todo.

Probar la extensión es sencillo, solo hay que activar el modo desarrollador en la pestaña de extensiones y cargar el directorio en el que estamos trabajando… La depuración y lo demás es muy sencillo si estamos acostumbrados a inspeccionar o depurar páginas web.

La parte más «complicada» es cuando quieres distribuir la extensión. Hay una opción que te permite empaquetarla en un archivo .crx, peeeeeero, eso no sirve para nada ya que al abrir el crx con chrome te dice que no va a instalarte nada… Así que tienes que decirles a tus probadores que se descompriman el archivo y activen la parte de desarrollador (que es un rollo de explicar) o bien pasarlo al chrome web store… Es lo que hice y puedes dejar la extensión sin publicar para que lo usen tus probadores. Muy fácil y rápido. Eso si, te pueden banear la extensión (a mi me pasó) si la revisan y ven algo sospechoso. Lo bueno es que puedes explicar lo que pasa y como funciona y si todo está ok son muy rápidos en volverte a activar la extensión. Muy contento con esta parte.

Firefox

El segundo en preferencia es, como no, Firefox. Había oído que los .xpi ya estabán obsoletos y que ahora había que hacer extensiones más parecidas a las de chrome… Y tanto! El estandar webextension está bien documentado en la MDN y, el problema, es que no es un estándar maduro del todo. Está muy basado en las extensiones chrome a las que «copian» casi todo, por lo que es muy sencillo pasar de una a otra, pero con carencias importantes (que en mi caso me hicieron reescribir gran parte de la extensión). Lo prometedor del tema es que están avanzando y según los navegadores vayan incorporando las funcionalidades que faltan vamos a un escenario de muy, muy facil adaptación.

Mozilla te ofrece la función en el AMO (addons.mozilla.org) de subir tu extensión y que te la firmen para que la puedas dstribuir entre tus probadores sin que se queje mucho el navegador. Obviamente también puedes subirla a la página pública, pero ahí el tema varía mucho…. Subí una primera versión no del todo pulida y a los dos días me rechazaron la extensión y me dieron consejos para resubirla. Lo hice a los 30 minutos de recibir la respuesta pero, según lo que dicen, me metieron en la cola de revisión de los administradores y esa cola es EXAGERADAMENTE lenta. Hoy llevo ya 32 días esperando en esa cola y estoy todavía en el número 126:

A este paso a finales de mes igual tengo ya la extensión en la página de addons de Mozilla… Completamente desesperante.

Safari

A petición de mis amigos mac-queros estudié la posibilidad de realizar una extensión para Safari. Dejadme que os diga una cosa, es un puto infierno. Apple ha cambiado la forma de construir una extensión para que tengas que escribir parte del código en Xcode (Objective-c o swift) y otra parte en javascript y que tengas que utilizar un sistema infame de empaquetado para subirlo al itunes y que aparezca disponible. El caso es que lo hice, siguiendo todas sus intrucciones, y después de conseguir que funcionase en mi mac me encontré con la maraña de certificados, firmas, perfiles, etc. que me obligaron a cambiar el proyecto un poco… Con tan mala suerte que una vez subido a itunes resulta que no funcionaba ¡¡!!

Así que, recuperé la forma antigua de hacer las extensiones, puramente en javascript y con un esquema muy parecido a las de chrome y las webextensions y un empaquetado mucho más sencillo… Y generé un archivo que Safari puede instalar sin problemas y que puedo distribuir sin problemas… Una pena que Apple se empeñe con todo su alma en hacer las cosas difíciles a los desarrolladores.

Opera

Ya con todos los deberes hechos me pareció interesante ver el nivel de compatibilidad de las webextensions entre navegadores… Y decidí hacer la extensión para Opera. Mi sorpresa fue mayúscula cuando vi que la misma extensión de chrome funcionaba sin apenas cambios en opera (quité un par de cosas del manifest.json y poco más). Así que, ole por Opera! El proceso de publicación, no obstante, sigue siendo bajo revisión y tienes que subirlo (con mucha más info de la que deseaba) en https://addons.opera.com/developer/ y ahí sigue esperando revisión… El problema es que no se en qué puesto de la cola estoy ni cuanto tiempo va a tardar en llegar a estar disponible.

Edge

Y llegamos a la gran esperanza «windowsera», visto que, según la documentación, edge permitía un esquema muy parecido a las webextensions de firefox me lancé al ruedo y, con una máquina virtual de windows10 profesional, empecé a adaptar la extensión de firefox.

La definición correcta para las extensiones de Edge es: ¡niseteocurraporDios! Después de un montón de horas lidiando con actualizaciones del sistema, con cuelgues, con malos funcionamientos del sistema de depuración y con mi bisoñez en el sistema conseguí que la extensión funcionase en desarrollo en mi máquina… Bueno, ahora distribuirlo…

Pues no es tan sencillo, ni mucho menos, después de gastarme 90 euros (75+iva) en darme de alta como desarrollador de microsoft para reservarme el nombre de la aplicación y poder subirla a la tienda de windows.. Resulta que la tienda no admite extensiones. ¡¡¡¡¡!!!!! y, lo que es peor, para distribuir el appx que consigo generar tengo que firmarlo con unos certificados que no tengo y que solo se pueden generar con extraños comandos que no te explican de donde salen (si al menos te dijeran como hacerlo con openssl) y luego el usuario tiene que instalarse el certificado en su máquina antes de instalar la extensión.. En suma, no se cómo distribuir esta extensión ni si merece la pena….

Según microsoft esto es lo que pasa:

Así que hay que pedir por favor, por favor, que te tengan en cuenta en esta url: http://aka.ms/extension-request

Y esperando estoy…

 

 

Google AdSense: Hablando con Robots

Google mola

La verdad es que soy un usuario asiduo de los servicios de google desde hace años. Utilizo gmail, personal y empresarial, utilizo y guardo muchos documentos en google applications, busco cada dos por tres cosas en google maps, busco de todo en el buscador, y, en resumen, dependo cada día más de Google para trabajar y para estar presente en la red.

Muchos advierten que Google no cumple esto de «don’t be evil» que se supone que es su mantra, que dispone cada vez de más información de sus usuarios y de que sería muy sencillo que hiciese un mal uso de esa información. A mi, particularmente, nunca me ha preocupado ese aspecto, ya que no tengo nada de que avergonzarme, no creo que hacer que Google disponga de más o menos datos míos vaya a afectarme negativamente en algo.

Pero esto era hasta que decidí utilizar adSense para un proyecto profesional y darme cuenta de que Google es un concepto totalmente artificial, es un robot que dirige rebaños de internautas, un mago de oz que se esconde tras sus mágicos algoritmos pero que no tiene nada de humano. Dejad que os cuente mi historia:

BiblioEteca es un servicio web que permitirá en un futuro no muy muy lejano hacer que todo el mundo pueda acceder a las lecturas que le apetezcan (incluso si no sabe qué leer), dado lo amplio del proyecto, decidimos empezar por poco, lanzamos la primera fase beta para ir mejorando poco a poco e ir testeando las reacciones de la gente. Una de las cosas en las que más nos habían insistido era en que debíamos posicionarnos bien en los motores de búsqueda.

Desgraciadamente en España solo hay un motor de búsqueda relevante, y este es Google… Así que empezamos a optimizar la página utilizando técnicas de SEO, sacrificando, incluso, la experiencia de usuario en pos de una buena posición en Google. Eso nos hizo perder muchísimo tiempo y, además, vimos que Google es caprichoso por naturaleza y que, después de varios meses dándonos contra paredes digitales, en el fondo es mucho mejor pensar en el usuario que el robot-araña… Así que estabilizamos las páginas y decidimos experimentar con la publicidad.

Publicidad, después de meses de SEO, vuelve a significar una sola cosa :AdSense y AdWords… Las dos herramientas de Google que hacen que le mane dinero ilimitado y que amenaza con monopolizar el sector publicitario en internet. AdWords permite «comprar» apariciones en el buscador y espacios publicitarios en las páginas asociadas y AdSense consigue que las páginas asociadas de antes cobren un porcentaje de lo que los anunciantes han pagado en AdWords… Un negocio redondo y muy fructífero, cuanta más gente en AdSense, más potencial de AdWords y cuanto más dinero en AdWords, más gente en AdSense…

Así que, manos a la obra… Abrimos nuestra cuenta AdSense y AdWords…

En AdWords no tenemos ningún problema, podemos empezar a pagar desde el primer día y poner publicidad que se expande sin límites por el ciberespacio. Nos regalan unos bonos que aprovechamos convenientemente para descubrir el potencial coste por usuario de las campañas AdWords, todo sin problemas aparentes.

En AdSense, por el contrario, tenemos que meter un millón de datos, al ser empresa, para poder cobrar… Nos piden tres formas de validación: de la cuenta corriente, del teléfono, de la dirección (faltó mandarles un poco de sangre para que mirasen el nivel de EPO o un análisis de ADN, pero todo llegará). Pero los anuncios aparentemente se muestran en la página y, aunque la selección no es la mejor, al menos es automática y no nos tenemos que preocupar de la idoneidad del anunciante… Usamos el administrador para verificar que, efectivamente, los clicks se van pagando y lanzamos un par de campañas en los medios para incrementar el tráfico y poder evaluar igualmente el retorno por publicidad… Realmente, durante esos dos primeros meses que estuvo funcionando la estimación era de unos 20 Euros (a pesar de que las impresiones de página eran de varios miles), pero era lo que era, un experimento para evaluar el retorno por publicidad.
Pero de repente un día…

Cuenta de Google AdSense inhabilitada

Recibimos un correo con ese estimulante subject… Y continúa diciendo:

Tras revisar nuestros registros hemos detectado que su cuenta de AdSense supone un riesgo de generación de actividad no válida. Debido a que tenemos la responsabilidad de proteger a los anunciantes de AdWords de costes erróneos originados por actividad no válida, nos hemos visto obligados a desactivar su cuenta de AdSense. El saldo pendiente y el reparto de Google de los beneficios se devolverán por completo a los anunciantes afectados.

Perplejo, me dedico a buscar en los logs del servidor por si ha pasado algo raro, le pregunto a todos nuestros colaboradores y desarrolladores si ellos se han dedicado a pinchar anuncios sin ton ni son o si se nos había colado algún hacker que hiciera cosas malitas… Nada, no ha pasado nada de eso, «debe tratarse de un error de google» pienso, tendré que reclamar.

Y ahí es donde se descubre que Google es un impostor… Nada de atención al cliente, solo tienes un formulario que ellos mismos no aseguran que te vayan a contestar. No te dan acceso a los datos de tu cuenta adSense porque te la han cerrado y no tienes manera de ver qué es lo que fue mal o si hubo más clicks de los debidos desde algún sitio concreto. Simplemente inútil.

Me voy a los foros de google y descubro que ahí no escribe NADIE DE GOOGLE, solo son aficionados que suman puntos cada vez que dejan un mensaje y que repiten el mantra «Si Dios Google dice que eres malo por algo será», ni una pista de lo que ha podido pasar, ni una manera de hablar con nadie «humano» que trabaje en Google, ninguna forma de poner una reclamación, ninguna manera de encontrar una explicación de la razón por la que te han inhabilitado la cuenta… ¡NADA! Es más, dicen que no pueden darte explicaciones porque desvelarían el algoritmo que descubre fraudes… ¿¿¿Y que se hace si el algoritmo falla???

Intento, a la desesperada, hablar por email con una persona que conozco trabaja en atención al cliente (al gran cliente, habrá que especificar) en Google Irlanda (que es desde donde atienden las incidencias de España).. Y no me responden. Ni para decirme que no me van a responder… Vamos, ni telefónica lo hace tan mal.

Puedo entender que Google tenga millones de clientes/proveedores en AdSense, que tenga métodos para filtrar las incidencias, que tenga que cerrar cuentas que crean que pueden estar haciendo fraude… Todo eso lo comprendo, pero no entiendo que alguien esté completamente desamparado, que no pueda hablar con algún humano (aunque sea por correo), que, en suma, no cuente para Google en absoluto.

Mi recurso ha sido desestimado, aparentemente por otro robot (aunque dicen que es por un equipo de ingenieros) y nos han dejado sin AdSense y sin posibilidad de abrir otra cuenta (una de las causas posibles de inhabilitación es estar relacionado, aunque sea familiarmente, con alguna cuenta inhabilitada) nunca jamás… Todo ello sin saber las razones, sin poder explicar ni justificar nada y sin poder recuperar los euros que ellos dicen que van a «devolver» a los anunciantes.

¿Y por qué he puesto esa foto tan sexy en este post?… Pues para que Google me indexe bien… ;-)