Recientemente AdMob by Google lanzó la “ Guía práctica sobre los anuncios nativos”. Esta guía ofrece una visión general completa de los anuncios nativos, junto con consejos y mejores prácticas que sirven de ayuda para comenzar a implementarlos en tu aplicación móvil.


Recientemente AdMob by Google lanzó la “Guía práctica sobre los anuncios nativos”. Esta guía ofrece una visión general completa de los anuncios nativos, junto con consejos y mejores prácticas que sirven de ayuda para comenzar a implementarlos en tu aplicación móvil.

En los últimos años, los usuarios han aumentado sus expectativas y esperan tener una experiencia del usuario (UX) de alta calidad en las aplicaciones móviles. Debido a esto, los formatos de anuncio evolucionaron y actualmente, el formato de anuncio más nuevo para aplicaciones que proporciona la UX esperada es la publicidad nativa. Los anuncios nativos adoptan la apariencia del contenido que los rodea en la aplicación y se integran muy bien a su diseño.

En este ebook aprenderás:
  • Principios rectores de diseño que te ayudarán a implementar mejor los anuncios nativos.
  • Recomendaciones y sugerencias prácticas para implementar los anuncios nativos, además de muchos ejemplos.
  • Sugerencias sobre la configuración de una prueba A/B adecuada para comenzar a probar los anuncios nativos.
  • Cómo AdMob puede ayudarte a implementar los anuncios nativos.



Descarga tu copia gratuita aquí:






Publicado por Roy Glasberg, Global Lead, Launchpad Program & Accelerator


Después de 2 exitosas generaciones, nos emociona anunciar al próximo grupo de prometedores startups  que formarán parte de la tercera generación de Launchpad Accelerator. Los startups de Brasil, India, Indonesia y México ahora se unen a desarrolladores de seis nuevos países: Argentina, Colombia, Tailandia, Vietnam, Malasia y Las Filipinas.
Publicado por Roy Glasberg, Global Lead, Launchpad Program & Accelerator


Después de 2 exitosas generaciones, nos emociona anunciar al próximo grupo de prometedores startups  que formarán parte de la tercera generación de Launchpad Accelerator. Los startups de Brasil, India, Indonesia y México ahora se unen a desarrolladores de seis nuevos países: Argentina, Colombia, Tailandia, Vietnam, Malasia y Las Filipinas.

El programa incluye mentoreo intensivo por parte de ingenieros, product managers y otros expertos de Google. Los participantes recibirán soporte "equity-free", crédito para productos Google, apoyo de PR y trabajarán codo a codo con Google por seis meses una vez que vuelvan a sus países de origen.

La generación 3 inicia a inicios del año que viene (Enero 30) en el Launchpad Space, nuestro espacio físico en San Francisco donde desarrolladores y startups pueden obtener de manera gratuita entrenamiento tecnico, mentoreo uno a uno, así como otros recursos para facilitar el desarrollo exitoso de sus apps y startups.


A continuación la lista completa de startups participantes (por país):





Si estás interesado en aplicar en futuras generaciones de Launchpad Accelerator, te invitamos a seguirnos en el sitio de Launchpad Accelerator site para recibir las novedades. Esperamos seguir sumando nuevos países al programa en el futuro. ¡Esten atentos!






Reddit está creando páginas web que se cargan casi instantáneamente gracias al uso de Accelerated Mobile Pages (AMP). Las páginas que tardan en cargar son la primera razón por la que el 39 % de los usuarios móviles está insatisfechocon su experiencia de navegación web. Crear experiencias de navegación web móvil rápida resulta muy desafiante. Vox Media, una compañía tecnológica cuyos sitios llegan a 150 millones de visitantes únicos por mes, declaró la"bancarrota de rendimiento" en 2015 y citó páginas que tardaban un promedio de 23 segundos en terminar de cargar. AMP cambia las reglas del juego para la web móvil, ya que facilita la creación de páginas que se cargan en décimas de segundo. Los expertos de rendimiento de Google ayudaron a crear la norma AMP, por lo que puedes asegurarte que es confiable.

Hoy estamos anunciando el lanzamiento de decenas de millones de páginas AMP en Reddit. Estas páginas se cargan entre siete y treinta veces más rápido que las páginas móviles anteriores. Cada publicación individual creada en Reddit ahora tiene su correspondiente versión AMP. Con el tiempo, Google cada vez más mostrará estas páginas en sus resultados de búsqueda. Estas páginas se centran en la parte más importante de la experiencia de Reddit: el gran contenido que crean nuestros usuarios.

Aquí mostramos un ejemplo:

jeremy-blog-post-visual

Estamos muy contentos de descubrir que la creación de páginas AMP fue muy fácil para nuestro equipo de ingeniería. AMP es una serie de componentes verificados por expertos de rendimiento de Google para que se carguen increíblemente rápido. Como resultado, compilar páginas web se asemeja cada vez más a encastrar bloques de LEGO en lugar de tener que crear cuidadosamente cada aspecto de la página. Puede que algunos programadores de productos piensen que tener una serie de opciones limitada puede comprometer la experiencia del usuario. Sin embargo, descubrimos que al estar limitados a los componentes de AMP, fue más fácil dirigir el trabajo de diseño al contenido que los usuarios buscan en Reddit.

Hoy en día, la mayoría de las compañías están creando versiones AMP independientes de páginas que ya tienen. Aquí en Reddit, estamos tan contentos con AMP que estamos experimentando en el desarrollo de nuevas páginas en AMP. Las páginas AMP se ven geniales y se cargan rápido en las computadoras de escritorio y también en los dispositivos móviles. Mantener un buen rendimiento de las páginas a medida que cambian a menudo implica un largo juego de Whack-A-Mole, pero estamos seguros de que nuestras páginas AMP siempre serán rápidas. Por ello, para muchos tipos de páginas, creemos que la versión AMP es la única versión que necesitarán.

Publicado por u/illymc


Nota del editor: el siguiente contenido fue publicado originalmente en el blog de Reddit por u/arbeitrary, Ingeniero de software sénior. Lea lo siguiente para conocer cómo Reddit está utilizando React para habilitar AMP. ...

Nota del editor: el siguiente contenido fue publicado originalmente en el blog de Reddit por u/arbeitrary, Ingeniero de software sénior. Lea lo siguiente para conocer cómo Reddit está utilizando React para habilitar AMP.

En Reddit, recientemente creamos versiones alternativas de algunas páginas de comentarios que utilizan tecnología Accelerated Mobile Pages (AMP), una tecnología diseñada por Google y otras empresas en el mundo del código abierto para asegurar que las páginas se carguen instantáneamente a partir de resultados de búsqueda en los dispositivos móviles. Las implementamos para mejorar la experiencia en Reddit para los usuarios móviles.

Las creamos como una app Node.js que utiliza React y Redux. React es un marco de trabajo web que resuelve diversos problemas que se producen durante el desarrollo web. Redux es una biblioteca que ayuda a mantener el estado de las aplicaciones de la IU y abstrae las transiciones de estado fuera del control de los usuario y los callbacks de las API. De esta forma, ofrece una única e inmutable fuente de veracidad sobre el estado de las aplicaciones a los componentes de vista. Puede que React y Redux parezcan una opción extraña para una app que esencialmente provee lenguaje de marcado estático, pero descubrimos que la combinación es efectiva. Nuestra decisión se relacionó más con las personas y la productividad que con el código en sí.

Tenemos un increíble equipo que está trabajando duro en una nueva versión de nuestra aplicación web móvil que utiliza React y Redux. Reemplazará el sitio que actualmente se ejecuta en m.reddit.com, y estará lista en las próximas semanas. La nueva app es una app de una sola página, lo que significa que en lugar de que el servidor envíe cada página, el código JavaScript del lado del cliente gestiona los clics, realiza las solicitudes de datos a la API y envía las nuevas vistas al navegador. Para favorecer una gran experiencia al inicio cuando se carga la app, también admitimos el envío total y parcial de una página del lado del servidor.

Nuestro objetivo principal en cuanto a la tecnología elegida para crear la app AMP era que nos permitiera movernos rápido y al mismo tiempo crear una gran experiencia del usuario. Como AMP es una experiencia fundamentalmente móvil, optamos por usar como punto de partida la nueva versión de nuestra aplicación web móvil basada en React y Redux, pero usándola exclusivamente con envío del lado del servidor. Comencemos con un código base existente y concentrémonos en cómo se puede diferenciar una experiencia AMP para Reddit de la experiencia web móvil principal. React nos permite usar componentes AMP como amp-img o amp-accordion para crear nuestras vistas del mismo modo que usamos cualquier elemento HTML. Por ello, mantuvimos un paradigma uniforme con nuestros otros proyectos de React sin agregar ninguna adhesión para cada nuevo componente.

A medida que el tráfico AMP se incrementa, obtenemos más información sobre AMP en producción, y continuamos explorando nuevas formas de ofrecer servicios a los editores de Reddit, la línea entre la aplicación AMP y la aplicación web móvil se puede desdibujar. Dejamos la puerta abierta intencionalmente para fusionar la app AMP y la aplicación web móvil. En un nivel básico, esto hace que compartir los códigos sea más fácil y nos da flexibilidad para crear sobre AMP de carga rápida y enriquecer fácilmente la interactividad de las páginas a medida que nuevos usuarios se convierten en editores regulares de Reddit.

Desde la perspectiva de la experiencia del usuario y la tecnología, estamos muy contentos con las nuevas herramientas y los nuevos ecosistemas, como AMP y React. Ambos permiten a los programadores escribir mejores códigos para lograr una web rápida y atractiva. Todo vale cuando nos ayuda a crear tecnología sólida para ayudar a los editores de Reddit a encontrar su hogar en Internet.

Publicado por u/arbeitrary.


¿Ya empezaste a usar los anuncios nativos AdMob, pero crees que podrías aprovecharlos mejor? Sabemos que puede ser difícil lograrlos de manera correcta en el primer intento, por lo que te recomendamos una prueba A/B cuando implementas los anuncios nativos en tu aplicación. ¿Por qué? Porque los anuncios nativos te ofrecen mayor flexibilidad, e incluso pequeños cambios pueden hacer una gran diferencia en los ingresos de tu aplicación, o te pueden dar la tranquilidad de que estás mejorando la experiencia del usuario. Teniendo esto en cuenta, presentamos cuatro pasos que te ayudarán a ejecutar una prueba A/B efectiva.

¿Ya empezaste a usar los anuncios nativos AdMob, pero crees que podrías aprovecharlos mejor? Sabemos que puede ser difícil lograrlos de manera correcta en el primer intento, por lo que te recomendamos una prueba A/B cuando implementas los anuncios nativos en tu aplicación. ¿Por qué? Porque los anuncios nativos te ofrecen mayor flexibilidad, e incluso pequeños cambios pueden hacer una gran diferencia en los ingresos de tu aplicación, o te pueden dar la tranquilidad de que estás mejorando la experiencia del usuario. Teniendo esto en cuenta, presentamos cuatro pasos que te ayudarán a ejecutar una prueba A/B efectiva.
1. Comienza con un objetivo e hipótesis definidos

Piensa en una sola hipótesis que tenga el mayor potencial para mejorar tu empresa y empieza desde ahí. ¿Dónde debes empezar la prueba? Un buen lugar son los elementos de diseño en tu plantilla de anuncios y cómo esta puede producir un mayor impacto en el compromiso del usuario con el anuncio. Por ejemplo, una simple variación como cambiar el tamaño de la fuente (de 10 px a 13 px) te haría pensar que un tamaño de fuente más grande aumentará el compromiso del usuario con el anuncio y, por lo tanto, facilitaría la implementación de esta idea. Mientras tanto, las métricas claves para revisar serían la tasa de clics, el ingreso por anuncios y la tasa de salidas de la aplicación.

Estos son algunos ejemplos de variables que puedes probar:
  • Tamaño de fuente 
  • Ubicación de una imagen dentro de un anuncio 
  • Tamaño del anuncio 
  • Ubicación del anuncio dentro de la aplicación





2. Recuerda probar solo una variación a la vez para que sea una prueba A/B de verdad.

Ponte tu bata blanca de laboratorio y empieza. La etapa de prueba requerirá dos variaciones de la pantalla de tu aplicación. La original, la versión actual y tu versión nueva y rediseñada. Cuando crees estas variaciones, el uso de la plataforma de prueba A/B facilitará el diseño, la ejecución y el monitoreo de tus pruebas.

3. Realiza el experimento

Es momento de probar tus resultados. Configura tu aplicación para que muestre de manera aleatoria la configuración original a la mitad de tus usuarios (es decir el “grupo de control”) y la segunda variación al otro 50 % (es decir el “grupo de experimentación”). Cuando usas el grupo de control, recolectas los datos base para comparar contra los resultados. Sin este, no puedes saber la diferencia entre la respuesta a tus nuevos diseños u otras variables, como las oportunidades de temporada.

4. Toma una decisión

Una vez que el experimento se termine, es hora de procesar los datos, revisar tus objetivos e hipótesis iniciales y determinar si vale la pena cambiar a la nueva variación. No te apresures en adoptar un nuevo look. Si los cambios son importantes, es ideal hacer el experimento sobre varios periodos de tiempo para asegurarte de que los resultados no se ven afectado por la temporada u otras variables.

A medida que sigues haciendo experimentos, recuerda que incluso con herramientas útiles, las pruebas toman tiempo y recursos. No gastes tiempo probando elementos que no tendrán un impacto significativo en tu objetivo. Usa los datos de app analytics (https://firebase.google.com/docs/analytics/) como ayuda para descubrir puntos en tu aplicación con oportunidades y potencial (imagínate, por ejemplo: pantallas con un alto tráfico, un alto compromiso, una gran disminución de usuarios). Una buena idea puede ser tener un miembro del equipo que dedique 25 % de su tiempo en monitorear la analítica, identificando ideas para optimizar los anuncios y probarlas.



AdMob by Google es una de las principales plataformas de anuncios para dispositivos móviles, en la que confían más de 650.000 aplicaciones en todo el mundo. Si deseas conocer más acerca de AdMob, visita este enlace.

Hasta la próxima, sigue conectado con AdMob siguiendo nuestras páginas de Twitter, LinkedIn y Google+.





Publicado por Pierce Vollucci, Gerente adjunto de producto, Gmail, y Steve Bazyl, Ingeniero de programas de desarrolladores, Google Apps

Cuando envías mensajes de correo electrónico, tus destinatarios pueden leerlos en una computadora, una tablet, un teléfono o, lo que es más probable, los tres equipos. Sin embargo, el aspecto de tu mensaje podría ser diferente en estos dispositivos. Posteriormente, este mes, podrás usar consultas de medios de CSS con Gmail e Inbox by Gmail para garantizar que tus mensajes tengan el formato que desees, independientemente de que se visualicen en computadoras, teléfonos en el modo de retrato o tablets en el modo de paisaje. Podrás cambiar estilos según el ancho, la rotación y la resolución. Esto permitirá un ajuste de formato más receptivo para optimizar tu correo electrónico conforme a los dispositivos.

Publicado por Pierce Vollucci, Gerente adjunto de producto, Gmail, y Steve Bazyl, Ingeniero de programas de desarrolladores, Google Apps

Cuando envías mensajes de correo electrónico, tus destinatarios pueden leerlos en una computadora, una tablet, un teléfono o, lo que es más probable, los tres equipos. Sin embargo, el aspecto de tu mensaje podría ser diferente en estos dispositivos. Posteriormente, este mes, podrás usar consultas de medios de CSS con Gmail e Inbox by Gmail para garantizar que tus mensajes tengan el formato que desees, independientemente de que se visualicen en computadoras, teléfonos en el modo de retrato o tablets en el modo de paisaje. Podrás cambiar estilos según el ancho, la rotación y la resolución. Esto permitirá un ajuste de formato más receptivo para optimizar tu correo electrónico conforme a los dispositivos.


Ejemplo de un mensaje de correo electrónico antes y después de la aplicación de diseño receptivo.



En debates con diseñadores de correo electrónico, estas reglas de CSS admitidas se identificaron como las consultas de medios más útiles para el diseño receptivo. Este es solo un aspecto de un esfuerzo general orientado a expandir la compatibilidad con CSS en Gmail y brindar a los diseñadores de correo electrónico más control sobre la representación de sus mensajes. En el caso siguiente de CSS, por ejemplo, se aplica el color rojo cuando el ancho de la pantalla supera los 500 px.
@media screen and (min-width: 500px) {
  .colored {
    color:red;
  }
}

Puedes encontrar la lista completa de reglas de CSS admitidas en la documentación para desarrolladores. Esperamos que esta referencia te ayude a crear mensajes de correo electrónico con más funciones y receptividad para los usuarios. ¡Suerte con el formateo!


Queremos informarles que la versión 3.6 de Firebase ya se encuentra disponible para iOS. Incluye diversas correcciones de errores y funciones importantes necesarias para su funcionamiento en iOS 10. Los alentamos a ejecutar un ...


¡Hola, programadores de iOS!
Queremos informarles que la versión 3.6 de Firebase ya se encuentra disponible para iOS. Incluye diversas correcciones de errores y funciones importantes necesarias para su funcionamiento en iOS 10. Los alentamos a ejecutar un pod update (o actualizar sus marcos de trabajo manualmente) y recompilar sus proyectos apenas puedan.

Si desean ver una lista de las correcciones y mejoras, consulten las notas de la versión. A continuación, incluimos un resumen de las novedades.

Nueva notificación de soporte


El envío de mensajes a través de la nube ahora es compatible con las notificaciones de usuario del nuevo iOS 10. Si tu app se está ejecutando en iOS 10, puedes gestionar las notificaciones entrantes con el método userNotificationCenter:willPresentNotification: withCompletionHandler. Y no te preocupes: si tu app solo admite los métodos application:didReceiveRemoteNotification: completionHandler anteriores, las APN llamarán estos métodos si no pueden encontrar los nuevos. ¿Necesitas más información? Consulta la documentación FCM actualizada para obtener más información.

Algunas notas sobre las pautas de revisión de la app


Con la actualización a iOS 10, Apple realizó algunos cambios a sus pautas de revisión de la App Store. La última versión de Firebase presenta varios cambios en respuesta a estas nuevas pautas. Y lo que es más importante, ya no encontrarás errores de iTunes Connect en los que debas ingresar texto para cosas como NSCalendarsUsageDescription y NSBluetoothPeripheralUsageDescription.

Una consecuencia de seguir estas pautas es que quitamos la tecnología que hasta ahora permitía medir los anuncios de instalación de aplicaciones de Búsqueda de iOS de Safari.

Aquellos que estén utilizando Invitaciones de Firebase, deberán suministrar cierto contenido para NSContactsUsageDescription en el archivo plist. Las Invitaciones de Firebase utilizan la información de contacto para completar la lista de amigos a los que el usuario puede querer enviar una invitación.

Por supuesto, este es un proceso constante. Monitorearemos de cerca el impacto de estos cambios y publicaremos actualizaciones cada vez que sea necesario.

Métodos alternativos para el inicio de sesión


En una entrada de blog anterior, informamos que Firebase Auth estaba experimentando errores en Xcode 8 ya que no podía escribir valores a la cadena de claves del simulador. Aunque ese problema todavía existe, desarrollamos un método alternativo en donde usamos NSUserDefaults en el simulador, y continuamos utilizando la cadena de claves en el dispositivo. Esto significa que ahora puedes desarrollar y probar Firebase Auth en el simulador y todo debe funcionar otra vez.

Correcciones de errores


Encontraste errores; ¡nosotros los corregimos! Continúa informando cualquier error o solicitud de funciones a través de nuestro formulario en línea. Nos aseguraremos de que se gestionen de manera adecuada.

Si tienes alguna pregunta, puedes realizarla en Stack Overflow con la etiqueta Firebase, o puedes enviarla a nuestro grupo de Google.

¡Gracias otra vez por ser un programador de Firebase! ¡Ahora continúa y actualiza tus apps!


publicado por Doug Stevenson, Representante de desarrolladores

publicado por Doug Stevenson, Representante de desarrolladores



Algunas veces, cuando usamos las API del cliente de Firebase para Android, Firebase debe realizar ciertas tareas a pedido del programador de manera asíncrona. Puede suceder que algunos de los datos requeridos no estén disponibles inmediatamente, o que el trabajo ingrese en una cola para su eventual ejecución. Cuando decimos que ciertos trabajos se deben realizar de manera asíncrona en una app, significa que el trabajo debe realizarse al mismo tiempo que la app realiza su tarea principal de enviar las vistas de la app, aunque sin obstruir este trabajo. Para realizar este trabajo asíncrono correctamente en las apps de Android, el trabajo no puede ocupar tiempo en el subproceso principal de Android; de lo contrario, la app puede retardar el envío de algunos marcos, lo que ocasionaría un "bloqueo" en la experiencia del usuario, o peor, ¡el temido ANR! Las solicitudes de red, lectura y escritura de archivos y cálculos extensos son algunos ejemplos de trabajos que pueden ocasionar demoras. En general, esto se denomina trabajo bloqueante, ¡y nunca queremos bloquear el subproceso principal!





Cuando un programador usa una API de Firebase para solicitar un trabajo que normalmente bloquearía el subproceso principal, la API debe hacer que ese trabajo se ejecute en un subproceso diferente, a fin de evitar bloqueos y ANR. Al finalizar, en ocasiones los resultados de ese trabajo deben volver al subproceso principal para actualizar las vistas de manera segura.

Esa es la tarea de la API Play Services Task. El objetivo de la API Task es brindar un marco de trabajo simple, liviano y con reconocimiento de Android para que las API del cliente Firebase (y Play services) realicen el trabajo de manera asíncrona. Se presentó en Play services versión 9.0.0 junto con Firebase. Si has utilizado características de Firebase en tu app, es posible que hayas utilizado la API Task sin ni siquiera notarlo. Por ello, lo que me gustaría hacer en esta serie del blog es revelar algunas de las formas en que las API de Firebase utilizan Tasks y debatir algunos patrones para uso avanzado.

Antes de comenzar, es importante que sepas que la API Task no es un reemplazo completo de otras técnicas de subprocesos en Android. El equipo de Android ha preparado contenidos excelentes que describen otras herramientas de subprocesos, como Services, Loaders y Handlers. También hay una serie completa de Application Performance Patterns en YouTube en donde se describen las diferentes opciones. Algunos programadores incluso usan como opciones bibliotecas de terceros que te ayudarán con tus subprocesos en las apps de Android. Por ello, depende de ti investigar estos contenidos y determinar cuál es la mejor solución para tus subprocesos particulares. Las API de Firebase utilizan Tasks de manera uniforme para gestionar el trabajo de los subprocesos, y puedes usarlas junto con otras estrategias que creas convenientes.

Un ejemplo de una tarea simple


Si estás usando Almacenamiento de Firebase, definitivamente encontrarás Tasks en algún punto. Aquí incluimos un ejemplo claro de obtención de metadatos sobre un archivo que ya está cargado en Almacenamiento, tomado directamente de la documentación de los metadatos del archivo:
    // Create a storage reference from our app
    StorageReference storageRef = storage.getReferenceFromUrl("gs://");

    // Get reference to the file
    StorageReference forestRef = storageRef.child("images/forest.jpg");

    forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(StorageMetadata storageMetadata) {
            // Metadata now contains the metadata for 'images/forest.jpg'
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Uh-oh, an error occurred!
        }
    });

Aunque nunca veamos una "Task" en ningún lugar del código, en realidad hay una Task aquí. La última parte del código anterior se puede reescribir de manera equivalente como se indica a continuación:
    Task task = forestRef.getMetadata();
    task.addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(StorageMetadata storageMetadata) {
            // Metadata now contains the metadata for 'images/forest.jpg'
        }
    });
    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Uh-oh, an error occurred!
        }
    });

¡Parece que después de todo había una Task escondida en ese código!

¡Prometo que haré esto!


Con el código de muestra reescrito que se muestra más arriba, ahora es más claro cómo se utiliza una Task para obtener los metadatos del archivo. El método getMetadata() de StorageReference debe asumir que los metadatos del archivo no están disponibles inmediatamente, por lo que hará una solicitud de red para obtenerlos. De esta manera, para evitar el bloqueo del subproceso que realizó la llamada en ese acceso de red, getMetadata() devuelve una Task que se puede escuchar para el eventual éxito o falla. Luego, la API realiza la solicitud en un subproceso que controla. La API oculta los detalles de este subproceso, pero se utiliza la Task devuelta para indicar cuándo los resultados están disponibles. De esta forma, la Task devuelta garantiza que al finalizar se invocará cualquier escuchador agregado. Esta forma en que la API gestiona los resultados del trabajo asíncrono a veces recibe el nombre de Promise en otros entornos de programación.

Nota que la Task devuelta se configura en parámetros por el tipo de StorageMetadata, y ese también es el tipo de objeto que pasa a onSuccess() en el OnSuccessListener. De hecho, todas las Tasks deben declarar un tipo genérico de esta forma para indicar el tipo de datos que generan, y el OnSuccessListener debe compartir ese tipo genérico. Además, cuando se produce un error, se pasa una Excepción a onFailure() en el OnFailureListener, que probablemente será la excepción específica que causó la falla. Si deseas saber más sobre esta Excepción, debes verificar su tipo para transmitirla en forma segura al tipo esperado.

Lo último que debes saber sobre este código es que se llamará a los escuchadores en el subproceso principal. La API Task se encarga de que esto suceda automáticamente. De esta manera, si deseas hacer algo en respuesta a la disponibilidad de los StorageMetadata en el subproceso principal, puedes hacerlo directamente en el método del escuchador. (¡Pero recuerda que igualmente no debes realizar ninguna tarea bloqueante en ese escuchador en el subproceso principal!) Existen algunas opciones sobre el modo en que trabajan estos escuchadores que explicaré en una publicación futura sobre las diferentes alternativas.

Solo tienes una oportunidad


Algunas funciones de Firebase ofrecen otras API que aceptan escuchadores no asociados con Tasks. Por ejemplo, si utilizas Autenticación de Firebase, casi seguro has registrado un escuchador para descubrir cuándo el usuario accede o sale con éxito de tu app:
    private FirebaseAuth auth = FirebaseAuth.getInstance();
    private FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
             // Welcome! Or goodbye?
        }
    };

    @Override
    protected void onStart() {
        super.onStart();
        auth.addAuthStateListener(authStateListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        auth.removeAuthStateListener(authStateListener);
    }

La API del cliente FirebaseAuth emite dos garantías principales aquí cuando agregas un escuchador con addAuthStateListener(). En primer lugar, llama inmediatamente a tu escuchador con el estado de acceso actualmente conocido para el usuario. Luego, llama al escuchador otra vez con todos los cambios subsiguientes al estado de acceso del usuario, en tanto se agregue el escuchador al objeto FirebaseAuth. ¡Este comportamiento es muy diferente al modo en que trabaja Tasks!

Tasks solo llama a cualquier escuchador como máximo una vez, y solo cuando el resultado está disponible. Además, Task invocará un escuchador inmediatamente si el resultado ya estaba disponible antes de agregar al escuchador. El objeto de Task recuerda efectivamente el objeto del resultado final y continúa enviándolo a cualquier escuchador futuro, hasta que no haya más escuchadores y se convierta prácticamente en basura recolectada. Entonces, si estás usando una API de Firebase que trabaja con escuchadores en un elemento que no es un objeto de Task, asegúrate de comprender sus propios comportamientos y garantías. ¡No asumas que todos los escuchadores de Firebase se comportan como escuchadores de Task!

Y no te olvides este paso importante


Considera la vida útil activa de tus escuchadores de Task agregados. Si no lo haces, dos cosas pueden salir mal. En primer lugar, puedes ocasionar una pérdida de Actividad si Task continúa más allá de la vida útil de una Actividad y un escuchador agregado está referenciando sus Vistas. En segundo lugar, puede que el escuchador agregado se ejecute cuando ya no es necesario, lo que provocaría la realización de tareas innecesarias y posiblemente haría cosas que accedan al estado de la Actividad cuando ya no es válido. La siguiente parte de esta serie del blog tratará estos problemas en más detalle, y explicará cómo evitarlos.

Para concluir (la parte 1 de esta serie)


Hemos visto brevemente la API Play Services Task y descubrimos su (a veces oculto) uso en ciertos códigos de muestra de Firebase. Las Tasks son la manera en que Firebase te permite responder al trabajo que tiene una duración desconocida y se debe ejecutar fuera del subproceso principal. Tasks también permite que se ejecuten los escuchadores otra vez en el subproceso principal para gestionar el resultado del trabajo. Sin embargo, solamente vimos a grandes rasgos lo que Tasks puede hacer por ti. La próxima vez, veremos las variaciones de los escuchadores de Task, para que decidas cuál se adapta mejor a tus casos.

Si tienes alguna pregunta, puedes usar Twitter con el hashtag #AskFirebase o el Grupo de Google firebase-talk. También tenemos un canal dedicado a Firebase Slack. Y puedes seguirme en @CodingDoug en Twitter.




Adquisición: ¿Cómo se captan usuarios?

En el mundo actual, raras serán las ocasiones en que funcione la frase “Si creas algo, vendrán a ti”. La adquisición es un campo muy amplio y comprende varias iniciativas diferentes, como la publicidad, las relaciones públicas y el marketing, entre otras.



Adquisición: ¿Cómo se captan usuarios?

En el mundo actual, raras serán las ocasiones en que funcione la frase “Si creas algo, vendrán a ti”. La adquisición es un campo muy amplio y comprende varias iniciativas diferentes, como la publicidad, las relaciones públicas y el marketing, entre otras.


En mi última publicación, analicé las cinco métricas piratas (adquisición, acicate, retención, recomendación y remuneración) y la importancia que tienen para el éxito de un producto. En esta publicación, me concentraré en la primera (la adquisición) y mostraré el uso que se puede dar al conjunto de Firebase suite para no solo controlarla, sino también mejorarla.





En Google, Adwords ha sido con el correr de los años el producto más importante que hemos ofrecido en términos de adquisición. A través de una campaña de Adwords, puedes acercarte a los usuarios no solo a través de resultados de búsqueda sino también en sitios como los de YouTube y Google Play. Con la nueva integración de Firebase para Adwords, puedes potenciar tu flujo de trabajo de adquisición aún más.

En primer lugar, puedes verificar de manera automática si tus campañas atraen a los usuarios correctos realizando un seguimiento de los eventos de apertura de apps que estos activan.

Supón que has creado un juego y tienes activas varias campañas. A través de esta integración, no solo puedes determinar las campañas que te permiten captar más usuarios con mejores índices, sino también las que generan en ellos una mayor atracción.

También puedes concretar adquisiciones con otras más de 30 redes y controlar el rendimiento de las campañas directamente en Firebase Analytics. Además, tal como se podría prever, puedes dividir por públicos dedicados los usuarios adquiridos a través de estas distintas fuentes.

A su vez, también puedes especificar los eventos importantes de tu app para que Adwords se dirija hacia los usuarios que probablemente los concreten. Continuando con el ejemplo del juego anterior, supongamos que este tiene modos de un jugador y multijugador. Al permitir que Adwords registre el evento de inicio de una partida multijugador, podrías aumentar las probabilidades de adquirir usuarios que opten por este modo de juego.

Por último, puedes dirigirte a públicos que hayas creado en Firebase Analytics. Esto puede tener una enorme capacidad para la reorientación, por ejemplo, a la hora de captar nuevamente, mediante la oferta de un poder especial, usuarios que puedan desistir después de experimentar desgaste en un nivel determinado.

La integración de Firebase con Adwords te ayuda a aprovechar al máximo el esfuerzo invertido. Consulta la documentación oficial para obtener información completa.

Además de Adwords, otra buena herramienta que ofrecemos como parte de Firebase es Dynamic Links. Dynamic Links te permite crear una sola URL para compartirla con usuarios potenciales, que por medio de redireccionamiento llegarán a las tiendas correspondientes para realizar descargas con Android o iOS. También puedes agregar a un enlace datos personalizados que se conservarán después del proceso de instalación. Aplicando esto, podrías mejorar considerablemente tu adquisición a través de canales como las redes sociales.

Digamos, por ejemplo, que deseas destacar un producto disponible para la venta en tu aplicación de comercio electrónico. Simplemente, crea un vínculo dinámico, agrégale información (como un ID que tu app pueda usar) y establece un vínculo profundo que conduzca directamente al producto. Los usuarios que tengan la app llegarán a la página del producto. Aquellos en cuyo caso esto no suceda llegarán primero a Play Store o App Store, y luego podrán llegar al producto cuando abran tu aplicación por primera vez.

Veremos más información sobre Dynamic Links en una publicación futura, pero puedes también consultar la documentación por ti mismo.

En la próxima publicación analizaremos la métrica del acicate.


Publicado por Emily Schechter, equipo de seguridad de Chrome

Chrome les indica a los usuarios la seguridad de la conexión en la barra de direcciones, para que puedan navegar en forma segura. Históricamente, Chrome no ha etiquetado explícitamente a las conexiones HTTP como inseguras. A partir de enero de 2017 (Chrome 56), marcaremos a los sitios HTTP que transmitan contraseñas o tarjetas de crédito en forma insegura, como parte de un plan a largo plazo para marcar como inseguros a todos los sitios HTTP.

Publicado por Emily Schechter, equipo de seguridad de Chrome

Chrome les indica a los usuarios la seguridad de la conexión en la barra de direcciones, para que puedan navegar en forma segura. Históricamente, Chrome no ha etiquetado explícitamente a las conexiones HTTP como inseguras. A partir de enero de 2017 (Chrome 56), marcaremos a los sitios HTTP que transmitan contraseñas o tarjetas de crédito en forma insegura, como parte de un plan a largo plazo para marcar como inseguros a todos los sitios HTTP.

Actualmente, Chrome señala a las conexiones HTTP con un indicador neutro. Esto no refleja la verdadera falta de seguridad para las conexiones HTTP. Cuando cargas un sitio web a través de HTTP, alguien más en tu red puede ver o modificar el sitio antes de que llegue a ti.


Hasta ahora, una porción considerable del tráfico web ya hizo su transición a HTTPS, y su uso está aumentando consistentemente. Hace poco llegamos a un hito, ya que más de la mitad de las páginas que se cargan en Chrome para escritorio lo hacen a través del protocolo HTTPS. Además, desde el momento en que lanzamos nuestro informe sobre HTTPS en febrero, 12 de los 100 sitios principales han cambiado su protocolo predeterminado de HTTP a HTTPS.


Los estudios muestran que los usuarios no perciben la falta de un icono de "seguridad" como un aviso, y también que dejan de prestar atención a los avisos que ocurren con mucha frecuencia. Nuestro plan para etiquetar los sitios HTTP como inseguros de una forma más clara y precisa se llevará a cabo en fases graduales, basadas en criterios de una rigurosidad creciente. A partir de enero de 2017, Chrome 56 etiquetará a las páginas HTTP que tengan campos de formulario de contraseña o tarjeta de crédito como "inseguras", debido a la sensibilidad de su naturaleza.


En los próximos lanzamientos continuaremos extendiendo las advertencias sobre HTTP, por ejemplo, etiquetando a las páginas HTTP como "inseguras" en modo de navegación de incógnito, que es donde los usuarios tienen mayores expectativas de privacidad. Con el tiempo, planeamos etiquetar a todas las páginas HTTP como inseguras y cambiar el indicador de seguridad de HTTP con el triángulo rojo que usamos para los sitios HTTPS averiados.

Publicaremos las actualizaciones de este plan a medida que sucedan los lanzamientos, pero no esperes demasiado, cambia cuanto antes a HTTPS. HTTPS es más simple y más barato que nunca y ofrece el mejor desempeño que existe en la Web, además de funciones nuevas y potentes que son demasiado avanzadas para HTTP. Si deseas comenzar, échale un vistazo a nuestras guías de preparación.