En otra entrada de blog, hablamos sobre nuestra intención de cambiar a un nuevo modelo de control para el Proyecto AMP.Read More
Un nuevo modelo de control abierto para AMP
En otra entrada de blog, hablamos sobre nuestra intención de cambiar a un nuevo modelo de control para el Proyecto AMP.
Vinculador de AMP
Para los navegadores que restringen el acceso de cookies de terceros, la función Vinculador de AMP es una nueva forma de mantener sincronizadas las sesiones de usuario. Consulta nuestra entrada de blog del anuncio para obtener detalles y conocer cómo implementarlo en tus páginas web.
Desplazamiento infinito con amp-next-page
El componente <amp-next-page> (ahora disponible como un experimento) admite lo que algunos llaman un "desplazamiento infinito" de artículos. Los desarrolladores pueden especificar hasta tres URL para cargar cuando el usuario llega a una profundidad de desplazamiento específica en la página, y estos documentos se cargarán de manera integrada sin inconvenientes.
Animaciones según la inclinación con amp-orientation-observer
Ya se lanzó el componente <amp-orientation-observer>, que admite la sincronización de bajo nivel entre la orientación del dispositivo del usuario y los marcos en una animación determinada. Ahora, puedes crear una variedad de efectos, como cambiar sutilmente el fondo de tu página, desplazar imágenes o mostrar una animación con el dispositivo inclinado. Incluso puedes crear un espacio 3D segmentado si cambias entre varios componentes superpuestos de una escena a diferentes velocidades.
Compara imágenes con amp-image-slider
<amp-image-slider> permite a los usuarios comparar dos imágenes como superposiciones. Esto puede resultar muy útil para las fotos de "antes y después". Obtén más información sobre este componente en nuestra entrada de blog reciente.
Compatibilidad para anuncios de historias en formato AMP en Google Ad Manager (beta)
Google Ad Manager ahora admite la entrega de publicidad de venta directa de publicadores en las historias en formato AMP que crean. Puedes obtener más información sobre el tema aquí.
Mira el anuncio de Google Pixel 2 como una de las páginas de la historia
Lo mejor del resto
Lanzamos varios componentes nuevos:
<amp-pan-zoom admite el desplazamiento y el zoom de contenido interactivo integrado. Esto ayuda a los usuarios en diferentes casos de uso, como consultar detalles en la imagen de un producto o seleccionar asientos en un mapa de asientos interactivo.
<amp-date-picker> admite el ingreso de fechas y períodos en formularios. Este componente, que se lanzó anteriormente como un experimento, ya está disponible a nivel general. Más detalles aquí.
<amp-date-countdown> muestra una cuenta regresiva dinámica a una fecha y hora determinadas.
<amp-google-document-embed> muestra archivos de documento, como documentos de Word, hojas de cálculo de Excel y PDF integrados, en páginas AMP.
Ahora, los desarrolladores pueden personalizar las transiciones dentro y fuera del componente <amp-lightbox> existente.
MOATlanzó compatibilidad beta para la instrumentación de la visibilidad y la detección de spam para anuncios HTML de AMP. Comunícate con MOAT para participar en la versión beta.
Los proveedores de correo electrónico pueden integrarse con AMP para correo electrónico siguiendo las instrucciones especificadas aquí.
Características venideras que vale la pena mencionar
¿Alguna vez quisiste seguir viendo un video mientras leías un artículo sobre él, o leer una receta y, al mismo tiempo, ver un video de alguien haciéndola? El atributo "acoplar" en <amp-video> pronto admitirá la posibilidad de minimizar videos en la esquina de la vista del puerto cuando el usuario se desplaza por una página. Los desarrolladores podrán personalizar dónde y cómo se acopla el video.
<amp-video-iframe> pronto admitirá un conjunto de funciones disponibles para amp-video y otros componentes de video de terceros (por ejemplo, la función para minimizar videos especificada anteriormente) para los videos incorporados dentro de un iframe.
Al igual que AMP ahora incluye <amp-next-page> para el desplazamiento infinito de documentos, pronto estará disponible el mismo comportamiento para los elementos de página en una lista. Esto resultará útil para desplazarse infinitamente por los elementos de una lista, como los resultados de una búsqueda y las tarjetas de productos.
Dentro de poco tiempo, el enmascaramiento de entrada ayudará a los usuarios a llenar formularios con mayor eficiencia, ya que agregará automáticamente el formato, como los espacios y los caracteres intersticiales especificados por los desarrolladores.
Próximamente, se anunciará la compatibilidad para el marco de transparencia y consentimiento de IAB como parte de <amp-consent>, junto con la posibilidad de integrar CMP de terceros. Si eres un publicador o perteneces a una CMP que desea la integración con el marco de consentimiento de IAB en páginas AMP, comunícate con nosotros en GitHub.
Se mejorará el reproductor <amp-ima-video> con funciones nuevas y la corrección de errores, entre ellas, la inclusión de botones faltantes para silenciar o dejar de silenciar, la posibilidad de fijar controles ocultos durante la reproducción y la capacidad de reproducir videos en bucle.
Se agregará compatibilidad con anuncios fijos en el escritorio en una posición fija en el extremo izquierdo o derecho de la página.
* * * Gracias a la comunidad de desarrollo AMP por su trabajo y sus comentarios. Como siempre, cuéntanos si tienes algún problema o quieres solicitar características. Publicado por Eric Lindley, administrador de producto, Proyecto AMP en Google
En Firebase, creemos que las apps permiten que las personas vivan, trabajen, aprendan y socialicen mejor. Por eso, nuestra misión es hacer que el desarrollo de apps sea lo más fácil posible, ofreciéndote una plataforma que resuelva dificultades clave a lo largo de todo el ciclo de vida de la app. Firebase puede ayudar tanto a las startups pujantes como a las empresas consolidadas a desarrollar apps, mejorarlas y hacer crecer sus negocios.Read More
Francis Ma
Director de Producto
En Firebase, creemos que las apps permiten que las personas vivan, trabajen, aprendan y socialicen mejor. Por eso, nuestra misión es hacer que el desarrollo de apps sea lo más fácil posible, ofreciéndote una plataforma que resuelva dificultades clave a lo largo de todo el ciclo de vida de la app. Firebase puede ayudar tanto a las startups pujantes como a las empresas consolidadas a desarrollar apps, mejorarlas y hacer crecer sus negocios.
Es muy emocionante ver cómo Firebase evoluciona con la ayuda de nuestra apasionada comunidad. En este momento, más de 1.5 millones de apps usan Firebase de forma activa todos los meses. Nos encanta conocer sus historias porque nos inspiran a seguir haciendo que Firebase sea aún mejor para que ustedes sigan triunfando. Una historia que conocimos hace poco es la de Hotstar, la mayor app de entretenimiento de India, con más de 150 millones de usuarios mensuales activos en todo el mundo.
Hace unos meses, el equipo de Hotstar lanzó de manera segura algunas funciones nuevas para su pantalla de visualización de video durante la transmisión en vivo de un importante evento deportivo. Esos cambios, junto con las actualizaciones de su proceso de integración, permitieron aumentar un 38% la interacción de los usuarios. Notablemente, mediante una combinación de productos de Firebase, Hotstar logró aplicar el cambio sin importunar a los usuarios, sacrificar la estabilidad ni lanzar una nueva compilación.
Puedes obtener más información sobre su historia aquí:
Hoy estamos presentando la tercera Firebase Summit anual, en Praga, para conocer a muchos más miembros de nuestra comunidad de desarrolladores y saber más sobre las maravillas que están creando. Todas las sesiones se publicarán en nuestro canal de YouTube, o puedes seguir leyendo para enterarte de todas las emocionantes actualizaciones que anunciaremos hoy.
Apoyo a equipos de desarrollo sofisticados
Estamos esforzándonos mucho para que a los equipos de desarrollo de apps sofisticados les resulte más fácil usar Firebase. Hoy, nos complace anunciar que vamos a incluir la asistencia para Firebase a nuestros paquetes de asistencia de Google Cloud Platform (GCP), cuya versión Beta estará disponible a fin de año.
Si ya pagaste un paquete de asistencia de GCP, nuestra versión Beta te permitirá obtener respuestas a tus preguntas de Firebase a través del canal de asistencia de GCP sin costo adicional. Cuando el nuevo formato de asistencia pase a estar disponible de manera general, incluiremos tiempos de respuesta objetivo, administración de cuenta técnica (para el nivel empresarial) y más. Puedes obtener más información sobre la asistencia de GCP aquí.
Si deseas seguir usando la asistencia gratuita de Firebase, no te preocupes: no haremos ningún cambio en el modelo de asistencia actual. No dejes de contactar a nuestro equipo de asistencia si necesitas ayuda.
Además de agregar la asistencia de CGP, realizamos mejoras generales en Firebase. ¡Sigue leyendo para obtener más información!
Nuevas herramientas para crear mejores apps
Administra proyectos con facilidad con la API de administración de Firebase
Hicimos un gran esfuerzo para abrir el acceso a nuestras API del lado del servidor a fin de que puedas integrar con facilidad los servicios de Firebase con tus sistemas actuales. Hoy anunciamos el lanzamiento de la API de administración de Firebase, una API de REST que te permite crear y administrar proyectos de manera programática. Ahora podrás crear y destruir entornos de Firebase en el contexto de tu flujo de trabajo de desarrollo existente.
La API de administración también permite que nuestros socios creen asombrosas experiencias nuevas. Nos alegra anunciar que ahora podrás implementar Firebase Hosting directamente desde StackBlitz y Glitch, dos IDE basados en la Web. Ahora, sus plataformas detectan de forma automática si estás creando una app de Firebase, lo que te permite implementar Firebase Hosting con un solo clic, sin abandonar las plataformas.
Lo mejor es que no es solo para socios. Es una nueva API extensible. Tenemos muchas ganas de ver qué crearán con ella. Puedes obtener más información y comenzar a usarla aquí.
Detección de rostro mejorada con ML Kit ML Kit, lanzado en Google I/O en mayo, hace que el aprendizaje automático sea fácil y accesible para todos los desarrolladores aunque no tengan experiencia al respecto. Si eres nuevo en el tema, puedes usar las API listas para usar de ML Kit, como la de reconocimiento de texto y la de detección de rostro. Si tienes más experiencia, puedes incorporar tus propios modelos TensorFlow Lite personalizados y usarlos con Firebase.
Hoy anunciamos la expansión de la API de detección de rostro, con el lanzamiento de la versión Beta de la función de contornos de rostros, que te permite detectar más de 100 puntos detallados en el rostro y alrededor del rostro del usuario. Esta función permite que las apps superpongan máscaras o accesorios sobre las facciones, con alta fidelidad y una ubicación precisa, y que agreguen elementos de embellecimiento, como el alisado de piel o la pigmentación. ¡Consulta nuestros documentos para obtener más información!
Implementación más confiable con Cloud Firestore
Anteriormente, nos han dicho que puede ser difícil hacer pruebas en Firebase. Por ejemplo, a veces es complicado definir las reglas correctas para garantizar que una app sea segura. Para ayudar a resolver este problema, vamos a lanzar emuladores locales de Cloud Firestore y Realtime Database. Los emuladores te permiten desarrollar y hacer pruebas de forma local, y pueden incorporarse a tu flujo de trabajo de integración continua de modo que puedas realizar la implementación con más confianza y con la conciencia tranquila. Obtén más información sobre el emulador aquí.
Propagación de actualizaciones de Remote Config en tiempo casi real e integración con Cloud Functions
Los desarrolladores disfrutan de Remote Config porque les permite modificar su aplicación, personalizar la IU o lanzar una nueva función sin implementar una nueva versión, lo que podría ser engorroso para los usuarios. Sin embargo, no existía una manera sencilla de saber si la Remote Config de una app se había actualizado. Era necesario buscar actualizaciones en Remote Config con una frecuencia de unas pocas horas para asegurarse de que los usuarios siempre tuvieran los últimos cambios en su app.
Hoy nos complace anunciar que Remote Config ya tiene integración con Cloud Functions y Firebase Cloud Messaging, por lo que podrás notificar a tus aplicaciones en tiempo casi real si publicas (o reviertes) una nueva configuración. Eso reduce la complejidad de la configuración de Remote Config y usa menos ancho de banda en los dispositivos, ya que las aplicaciones solo buscan la nueva configuración cuando está disponible.
Además, Remote Config ahora puede disparar funciones definidas por el desarrollador cuando publicas o reviertes tu configuración. Así, puedes mantener varios proyectos de Remote Config sincronizados (para los flujos de trabajo de desarrollo/etapas/entorno de producción) y enviar mensajes de Slack a tu equipo cuando se publique una nueva configuración. Consulta nuestros documentos para obtener más información.
Según nuestro socio de acceso anticipado eBay:
"La combinación de Cloud Functions con la API de REST de Firebase Remote Config permite que mi equipo distribuido de eBay reciba notificaciones al instante sobre cualquier cambio en la configuración de nuestra aplicación. Usar estas herramientas para crear una función que notifica los cambios en Slack garantiza que cualquier persona que tenga que enterarse sobre un cambio de configuración reciba esa información inmediatamente".
- Jake Hall, Classifieds Group Mobile Architect de eBay
Nuevas herramientas para mejorar la calidad de las aplicaciones
Test Lab para iOS pasa a estar disponible de manera general
En Google I/O, también lanzamos la versión Beta de Firebase Test Lab para iOS. En los últimos meses, expandimos la selección de dispositivos iOS, sumamos compatibilidad con iOS 12 y versiones anteriores, e integramos la IU de iOS en la Firebase console. Con esas actualizaciones, Test Lab de iOS sale de la fase Beta y pasa a estar disponible de manera general. Obtén más información y empieza a usar Test Lab ahora mismo.
Performance Monitoring: Estadísticas de sesiones y administración de problemas
Aunque realices pruebas exhaustivas durante el ciclo de desarrollo, es inevitable que aparezcan errores y problemas de rendimiento en tu app de producción de tanto en tanto. Performance Monitoring te ofrece estadísticas útiles sobre esos problemas y revela automáticamente los temas más críticos en una instancia de seguimiento determinada (es decir, el proceso de inicio o de pago de una app determinada). Ahora puedes concentrarte en una sesión de seguimiento específica para determinar con precisión qué ocurrió cuando se produjo el problema de rendimiento.
Por ejemplo, en el siguiente panel, puedes ver que el uso de la CPU aumenta notablemente luego de que la app busca y muestra una imagen de producto. Esto te indica qué parte específica del código debes investigar.
Con todos los datos y problemas que revela Performance Monitoring, puede ser difícil priorizar el trabajo. Por esa razón, también lanzamos la posibilidad de "silenciar", "cerrar" y "reabrir" los problemas en la consola. Si silencias el problema, dejas de verlo temporalmente para poder concentrarte en otro tema hasta que estés listo para resolverlo. Si marcas un problema como "cerrado" indicas que fue resuelto, pero Firebase te notificará si vuelve a producirse.
Obtén más información sobre las estadísticas de sesión y la administración de problemas aquí.
Crashlytics ahora tiene integración con PagerDuty
Los problemas de rendimiento y estabilidad de una app pueden aparecer en cualquier momento. A fin de que nunca pierdas de vista la estabilidad, incluso si estás lejos de tu escritorio, vamos a introducir un resumen de estabilidad por correo electrónico de Firebase Crashlytics, y una nueva integración con PagerDuty. El resumen de estabilidad destaca los temas emergentes que podrían ser problemáticos a futuro, mientras que la integración con PagerDuty te permite alertar a tu equipo en caso de una falla de alto impacto, en cualquier momento del día. Para conectar Crashlytics con PagerDuty, sigue estas instrucciones.
Saca más provecho de tus datos con BigQuery y Data Studio
En la primera parte del año, integramos Crashlytics con BigQuery a fin de habilitar la posibilidad de realizar análisis más profundos de los datos sobre fallas. Para ayudarte a empezar a usar BigQuery, preparamos una plantilla de Data Studio que te permite producir rápidamente un informe para compartir. Puedes acceder a una vista previa de la plantilla con datos ficticios y personalizar el informe en función de tus necesidades. Obtén más información aquí.
Nuevas herramientas para que tu empresa crezca
Predictions sale de la fase Beta y pasa estar disponible de manera general
En la Firebase Summit del año pasado presentamos Firebase Predictions. Predictions aplica el aprendizaje automático de Google a los datos de estadísticas de aplicaciones para crear segmentos de usuarios en función del comportamiento proyectado. Predictions ofrece estadísticas respecto de qué segmentos de usuarios tienen más probabilidades de desertar o gastar (o realizar otro evento de conversión) para que puedas tomar decisiones mejor fundamentadas sobre los productos, sin exigir que un miembro de tu equipo tenga experiencia con el aprendizaje automático. Este año nos complace anunciar que Predictions sale de la fase Beta y pasa a estar disponible de manera general, con una serie de nuevas funciones diseñadas para que sea más útil.
¿Quieres saber qué hay en una predicción determinada? Agregamos una nueva página de detalles que muestra los factores que tuvo en cuenta el aprendizaje automático (como eventos, dispositivos, datos del usuario, etc.) al momento de hacer la predicción. También incluimos métricas de rendimiento de cada predicción: podrás ver el rendimiento histórico de la predicción comparado con el comportamiento efectivo del usuario, a fin de calibrar mejor tu nivel de tolerancia al riesgo. Por último, si deseas hacer un análisis más detallado de los datos de predicciones o usarlos en servicios externos, puedes exportar la totalidad de los conjuntos de datos a BigQuery.
Revisa nuestros documentos para obtener más información.
Llega de manera más eficaz a los usuarios con los públicos dinámicos de Google Analytics Google Analytics para Firebase siempre te dio la opción de segmentar a tus usuarios en públicos, en función de eventos, tipos de dispositivo y otras dimensiones. Ahora mejoramos la herramienta de creación de públicos con algunas actualizaciones importantes: evaluación de público dinámica, exclusión de públicos y duración de la participación.
En primer lugar, ahora los públicos son dinámicos de forma predeterminada, lo que implica que Firebase incorporará a los nuevos usuarios que cumplan con tus criterios y quitará a los que ya no los cumplan automáticamente. Por ejemplo, si creas un público de usuarios que estén en el nivel 5 de tu juego, los usuarios son quitados del público una vez que terminen el nivel y pasen al siguiente. Del mismo modo, los usuarios que llegan al nivel 5 son agregados automáticamente al público de nivel 5 que definiste.
En segundo lugar, puedes definir mejor a tu público con criterios de exclusión con instrucciones del tipo "y/o", lo que te permite crear un público, por ejemplo, de "usuarios que agregaron un artículo al carrito pero no hicieron una compra".
Por último, los públicos ahora pueden incluir la duración de la participación, lo que te permite asegurarte de que tu público esté activo. Esto te permite dirigirte a los usuarios que realizaron una acción en un intervalo específico (p. ej.,, "usuarios que realizaron una compra en las últimas dos semanas").
Los públicos dinámicos te permiten llegar a tus usuarios de manera más eficaz, con mensajes pertinentes y una experiencia más personalizada en la app. Obtén más información y empieza a usar los públicos dinámicos aquí.
Pon en circulación campañas automáticamente recurrentes con Cloud Messaging
Una vez que hayas definido tus segmentos de usuarios con Analytics o Predictions, puedes usar Firebase Cloud Messaging (FCM) para enviar notificaciones a los usuarios latentes a fin de que vuelvan a usar tu app. Rediseñamos la consola de notificaciones para que sea compatible con campañas más sofisticadas. La nueva IU te ofrece la posibilidad de crear campañas de notificaciones recurrentes que envían mensajes automáticamente a los nuevos usuarios que cumplen con los criterios de segmentación. Antes, solo podías programar mensajes que se enviaban una vez.
Además, la nueva IU de notificaciones te permite segmentar fácilmente a los usuarios en función de la fecha de su primera sesión o de la cantidad de días transcurridos desde la última vez que abrieron una app. Por último, hemos actualizado la vista de los resultados de la campaña a fin de que puedas hacer un seguimiento diario de las campañas de notificaciones recurrentes.
¡Revisa la nueva IU en tu consola!
Una mirada al futuro
Todas las actualizaciones de Firebase que anunciamos hoy nos llenan de entusiasmo. Nos encantaría recibir tus comentarios a medida que seguimos ampliando y mejorando la plataforma. Únete a nuestro programa Alfa para dar un vistazo a lo que estamos desarrollando, compartir tus ideas y dar forma al futuro de Firebase.
Si no pudiste acompañarnos en persona en Praga, todas nuestras sesiones se graban y se publican en nuestro canal de YouTube. ¡Gracias por ser parte de nuestra comunidad! ¡Feliz compilación!
Publicado por Matt Henderson, gerente de producto (Google Play)
Hoy comienza Playtime, nuestra serie de eventos globales que se celebra todos los años, con más de 800 participantes en Berlín y San Francisco reunidos con el objetivo de compartir información valiosa brindada por expertos de todo el mundo y conocer las últimas novedades sobre nuestros productos. También se celebrarán eventos en São Paulo, Singapur, Taipéi, Seúl y Tokio.Read More
Publicado por Matt Henderson, gerente de producto (Google Play)
Hoy comienza Playtime, nuestra serie de eventos globales que se celebra todos los años, con más de 800 participantes en Berlín y San Francisco reunidos con el objetivo de compartir información valiosa brindada por expertos de todo el mundo y conocer las últimas novedades sobre nuestros productos. También se celebrarán eventos en São Paulo, Singapur, Taipéi, Seúl y Tokio.
En Google Play, seguimos invirtiendo en herramientas para que sea más fácil desarrollar y distribuir apps a un público global. A continuación, se incluyen algunas de las increíbles actualizaciones que anunciaremos hoy:
Creación de apps más livianas
Android App Bundle es el nuevo formato de publicación de Android que permite ofrecer fácilmente una gran experiencia en un tamaño más pequeño. Las apps más livianas tienen porcentajes de conversión más altos, y nuestra investigación de usuarios indica que el tamaño es uno de los factores que genera más desinstalaciones. Gracias a la modulización de Android App Bundle, también puedes ofrecer funciones on demand (en lugar de hacerlo al momento de la instalación), lo que permite reducir el tamaño de las apps.
Ya hay en producción miles de conjuntos de apps, con un promedio de reducción de tamaño del 35%. Hoy presentamos actualizaciones que ofrecen más razones para comenzar a usar este conjunto.
Más formas de ahorrar tamaño: En promedio, y sin que los desarrolladores deban realizar tareas adicionales, el tamaño de los conjuntos de apps se reducirá un 8% para las descargas y un 16% en el almacenamiento interno para dispositivos que ejecuten Android M o una versión posterior. Esto se obtiene al agregar compatibilidad con bibliotecas nativas sin comprimir, lo que elimina la necesidad de almacenar varias copias en el dispositivo.
Compatibilidad mejorada para apps más grandes: Ahora puedes subir conjuntos con tamaños de APK instalados de hasta 500 MB sin necesidad de usar archivos de expansión. Esta función es de acceso anticipado y estará disponible para más desarrolladores en el futuro.
Si quieres obtener más información sobre Android App Bundle, las funciones dinámicas y todos los beneficios que obtendrás al crear una app modular y más pequeña,lee nuestra publicación de Medium.
Creación de una experiencia instantánea unificada
Como los desarrolladores nos pidieron que implementáramos un proceso de creación de apps instantáneas más sencillo, recientemente aumentamos el límite de tamaño a 10 MB para la función PROBAR AHORA en Play Store y quitamos el requisitos de URL. Nos complace anunciarles a los desarrolladores de juegos que nos hemos asociado con Unity a fin de diseñar un complemento para Google Play Instant, y hemos agregado compatibilidad con apps instantáneas directamente en la nueva versión de Cocos Creator.
Ahora usamos Android App Bundle para resolver uno de los obstáculos más importante durante la creación de apps instantáneas. Anteriormente, era necesario publicar tanto la app instantánea como la versión instalable. Con Android Studio 3.2, se podían publicar conjuntos compatibles con apps instantáneas, aunque también se requería un conjunto que incluyera la app principal.
Ahora ya no es necesario usar diferentes códigos. Con la versión 3.3 (Beta) de Android Studio, los desarrolladores pueden publicar un conjunto de app único y clasificarlo, o bien publicar un módulo particular compatible con apps instantáneas. El conjunto de apps unificado es el futuro de las experiencias de apps instantáneas. Esperamos que lo pruebes y decidas implementarlo.
Extensión de pruebas de apps instantáneas
Google Play Instant ahora está disponible para títulos premium y campañas de pre-registro, lo que permitirá a los usuarios probar tu juego antes de su lanzamiento y generar más expectativa. Todos los días, nuevas apps y juegos se unen a Google Play Instant. En esta ocasión, nos complace darles la bienvenida a Umiro, de Devolver Digital, y a Looney Tunes World of Mayhem, de Scopely, como dos de los primeros títulos en incluir estas nuevas funciones.
Mejoras de calidad y reducción de tasas de fallas
Play Console ofrece dos herramientas que permiten supervisar el rendimiento y mejorar la calidad de las apps. El reporte previo al lanzamiento ejecuta apps en dispositivos reales de Firebase Test Lab y genera metadatos útiles que permiten identificar y corregir problemas antes de que se envíen las apps a la etapa de producción. Android vitals permite hacer un seguimiento del rendimiento y la calidad de las apps en dispositivos de usuarios reales.
Ahora los vincularemos para brindar estadísticas más útiles. Cuando se observe una falla real en Android vitals durante la ejecución de un reporte previo al lanzamiento, recibirás los metadatos adicionales del reporte en el panel de Android vitals para que puedas depurar con mayor efectividad. El vínculo es bidireccional, de modo que si se produce una falla en los reportes previos al lanzamiento que también se esté registrando en el mundo real, podrás ver el impacto en Android vitals y, de esta forma, priorizar mejor los problemas destacados en los reportes.
Optimización de tu app y negocio
Implementamos varias actualizaciones para facilitar el proceso de administración de apps y negocios en Play.
Herramientas para retener suscriptores: En I/O, presentamos la encuesta de cancelación, que permite obtener información valiosa sobre los motivos de las cancelaciones. Ahora estamos probando la posibilidad de que los usuarios puedan pausar temporalmente las suscripciones en lugar de directamente cancelarlas, lo que te permite ofrecer promociones para recuperar esos suscriptores.
Precios de suscripciones más flexibles: Ahora puedes cambiar el precio de una suscripción existente sin necesidad de crear un nuevo SKU en la versión 1.2 de la Biblioteca de facturación de Play. También puedes ofrecer un cambio de plan y aplicar las modificaciones en la próxima fecha de renovación.
Métricas más útiles: Para ayudarte a analizar tus métricas más importantes, también agregamos nuevas herramientas en Play Console, como datos acumulativos, métricas promedio de lanzamiento a 30 días y opciones para diferentes períodos a fin de ir a la par con el ritmo de tu negocio. También puedes descargar cualquier reporte configurado como archivo .CSV.
Actualizaciones de apps más sencillas: Ahora puedes usar una nueva API llamada "In-App Updates" (Actualizaciones dentro de la app) para solicitar a los usuarios que actualicen sin necesidad de salir de la aplicación. Los desarrolladores pueden mostrar una experiencia de pantalla completa que incluya desde la descarga hasta el reinicio de la app, o bien que abarque la descarga y la instalación en segundo plano, mientras supervisas el proceso. Por el momento, este programa es de acceso anticipado y se lanzará en los próximos meses.
Una nueva forma de obtener información sobre Play
Nos complace anunciar el lanzamiento de Academy for App Success (Academia para crear apps exitosas), que incluye nuevos cursos interactivos para ayudar a los desarrolladores a aprovechar Play Console al máximo, comprender las políticas de Play y utilizar recomendaciones que permitan mejorar la calidad y aumentar el rendimiento comercial. Este nuevo programa gratuito permite hacer un seguimiento del proceso de aprendizaje mediante cuestionarios y logros para demostrar tu conocimiento. Si bien solo está disponible en inglés, pronto se agregarán cursos traducidos y más contenido.
Seguimos inspirándonos en lo que diseñas y el impacto que eso tiene en usuarios de todo el mundo. Echa un vistazo a nuestra colección #IMakeApps, que rinde homenaje a personas increíbles que crean apps y juegos. Comparte tu propia historia con #IMakeApps.
¿Qué tan útil te resultó esta entrada de blog?
★★★★★
Imagen de una NES (Dale M.A. Johnson)
Debo confesarles algo. Me encantan los videojuegos. Mis favoritos son los de The Legend of Zelda . Imaginen mi emoción cuando conocí los "randomizers", esos programas que mostraban de forma aleatoria elementos, entradas a calabozos, diseños de mapas y estadísticas de personajes para que incluso los jugadores más habilidosos disfrutaran de nuevas experiencias. Los utilizaban algunos de mis juegos favoritos, como la versión original de ...Read More
Imagen de una NES (Dale M.A. Johnson)
Debo confesarles algo. Me encantan los videojuegos. Mis favoritos son los de The Legend of Zelda . Imaginen mi emoción cuando conocí los "randomizers", esos programas que mostraban de forma aleatoria elementos, entradas a calabozos, diseños de mapas y estadísticas de personajes para que incluso los jugadores más habilidosos disfrutaran de nuevas experiencias. Los utilizaban algunos de mis juegos favoritos, como la versión original de The Legend of Zelday The Adventure of Link. Dado que muchos de nosotros ya no tenemos los dispositivos originales donde se jugaban, utilizamos emuladores.
En ocasiones, puede ser extremadamente complicado implementar este tipo de software. Pero, al parecer, emular un sistema como la NES en una computadora moderna no es ningún desafío. Básicamente, un emulador de NES es un bucle muy sencillo que lee la siguiente instrucción y la ejecuta.
Conceptos básicos
Podríamos escribir una enorme lista de "if-else-if" con todas las instrucciones, pero sería difícil de mantener. Como alternativa, usemos when.
val instruction = fetchNextInstruction()
when (instruction) {
0x0 -> handleBreak()
0x8 -> handlePushProcessorStatus()
0x10 -> handleBranchOnPlus()
// Many other instructions...
else -> throw IllegalStateException("Unknown instruction: ${instruction.toHex()}")
}
inline fun Int.toHex() = this.toString(16)
En esta implementación, el parámetro when es casi idéntico a una instrucción switch de C++ o Java.
El motivo del casi es que, como notarán quienes provengan de C++ o Java, no hay instrucciones break. Las instrucciones que forman parte de when no pasan inadvertidas.
Y esto es solo a primera vista.
Como expresión
Los cartuchos de juegos para la NES estaban disponibles en diferentes variedades, aunque casi todos usaban el mismo conector. Tenían diferentes tipos y cantidades de ROM y RAM, incluida una RAM que tenía una batería para guardar el juego. Recuerdo que algunos cartuchos incluían hardware adicional. El sistema de circuitos del cartucho que lo controlaba se llama "mapper".
Si nos basamos en que when se utiliza como switch en Kotlin, este tipo de código nos sirve para decidir qué mapper usar para un juego en particular:
fun getCartridgeMapper(rom: Cartridge): Mapper {
var mapper: Mapper? = null
when (rom.mapperId) {
1 -> mapper = MMC1(rom)
3 -> mapper = CNROM(rom)
4 -> mapper = MMC3(rom)
// Etc…
}
return mapper ?: throw NotImplementedError("Mapper for ${rom.mapperId} not yet implemented")
}
Esto está bien, pero no es lo ideal. El documento de referencia describe al parámetro when como expresión, lo que significa que puede contener un valor (al igual que if en Kotlin). Con esto en mente, podemos simplificar la función anterior:
fun getCartridgeMapper(rom: Cartridge): Mapper = when (rom.mapperId) {
1 -> MMC1(rom)
3 -> CNROM(rom)
4 -> MMC3(rom)
// Etc...
else -> throw NotImplementedError("Mapper for ${rom.mapperId} not yet implemented")
}
De esta manera, nos deshacemos de la variable temporal y convertimos el cuerpo del bloque de esa función en uno de expresión, lo que mantiene el enfoque en la parte importante del código.
Más allá de las instrucciones simples
Otra restricción de switch es que los valores se limitan a expresiones constantes. En contraposición, when permite usar una variedad de expresiones, como comprobaciones de intervalo. Por ejemplo, el emulador necesita que la dirección de memoria se lea de forma diferente según el bit del hardware emulado que contenga los datos. El código encargado de hacer esto se encuentra en nuestro mapper.
val data = when (addressToRead) {
in 0..0x1fff -> {
// With this mapper, the graphics for the game can be in one of two locations.
// We can figure out which one to look in based on the memory address.
val bank = addressToRead / 0x1000
val bankAddress = addressToRead % 0x1000
readBank(bank, bankAddress)
}
in 0x6000..0x7fff -> {
// There's 8k of program (PRG) RAM in the cartridge mapped here.
readPrgRam(addressToRead - 0x6000)
}
// etc...
}
También podemos usar el operador is para comprobar que el tipo del parámetro sea when. Esto resulta muy útil cuando se utiliza una clase sealed:
sealed class Interrupt
class NonMaskableInterrupt : Interrupt()
class ResetInterrupt : Interrupt()
class BreakInterrupt : Interrupt()
class InterruptRequestInterrupt(val number: Int) : Interrupt()
Y entonces…
interrupt?.let {
val handled = when (interrupt) {
is NonMaskableInterrupt -> handleNMI()
is ResetInterrupt -> handleReset()
is BreakInterrupt -> handleBreak()
is InterruptRequestInterrupt -> handleIRQ(interrupt.number)
}
}
Vemos que aquí no necesitamos usar else. Esto se debe a que Interrupt es de clase sealed, y el compilador conoce todos los tipos posibles de interrupt. Si nos falta algún tipo de interrupt o si se agrega uno más adelante, el compilador mostrará un error que indicará que when debe ser exhaustivo o se debe agregar una ramificación de else.
También podemos usar when sin un parámetro. En este caso, funcionaría como una expresión "if-then-else" en la que cada caso se evalúa como una expresión booleana. Si leemos desde arriba hacia abajo, se ejecuta el primer caso que evalúa el parámetro true.
Antes, para poder usar una función en una expresión when, la única manera de hacerlo era utilizando expresiones como esta:
getMapper().let { mapper ->
when (mapper) {
is MMC5 -> mapper.audioTick()
is Mapper49 -> mapper.processQuirks()
// Etc...
}
}
A partir de Kotlin 1.3M1, es posible optimizar este código creando una variable en el parámetro de la expresión when.
when (val mapper = getMapper()) {
is MMC5 -> mapper.audioTick()
is Mapper49 -> mapper.processQuirks()
// Etc...
}
Similar a lo que ocurre en el ejemplo con let, el alcance de mapper se reduce a la expresión when en sí misma.
Conclusión
Hemos visto que when funciona como switch en C++ y Java, y que puede utilizarse de muchas otras maneras; por ejemplo, a modo de expresión (incluidos intervalos para tipos Comparable) o para simplificar bloques largos de "if-then-else".
Si te interesa aprender más sobre la emulación de la NES (y Kotlin), visita el Proyecto KTNES en GitHub de Felipe Lima.
Asegúrate de seguir las publicaciones de Desarrolladores de Android para descubrir más contenido increíble y no perderte ningún artículo sobre Kotlin.
Publicado por Matthew Burgess y Natasha Noy (Google IA)
A comienzos de este mes, lanzamos Google Dataset Search, una herramienta diseñada para que los investigadores descubran con mayor facilidad conjuntos de datos que puedan ayudarlos en sus trabajos. Google Dataset Search, al que coloquialmente llamamos "Google Académico para datos", es un motor de búsqueda que reúne metadatos de millones de conjuntos de datos disponibles en repositorios de toda la Web. En esta publicación, detallaremos la creación de Dataset Search, describiremos lo que creemos que ayudará a desarrollar un ecosistema de datos abiertos y abordaremos una pregunta que nos hacen con frecuencia desde el ...Read More
Publicado por Matthew Burgess y Natasha Noy (Google IA)
A comienzos de este mes, lanzamos Google Dataset Search, una herramienta diseñada para que los investigadores descubran con mayor facilidad conjuntos de datos que puedan ayudarlos en sus trabajos. Google Dataset Search, al que coloquialmente llamamos "Google Académico para datos", es un motor de búsqueda que reúne metadatos de millones de conjuntos de datos disponibles en repositorios de toda la Web. En esta publicación, detallaremos la creación de Dataset Search, describiremos lo que creemos que ayudará a desarrollar un ecosistema de datos abiertos y abordaremos una pregunta que nos hacen con frecuencia desde el lanzamiento de Dataset Search: "¿Por qué mi conjunto de datos no aparece en Google Dataset Search?".
Descripción general
A grandes rasgos, Google Dataset Search depende de que los proveedores de conjuntos de datos, tanto grandes como pequeños, agreguen metadatos estructurados a sus sitios utilizando el estándar abierto schema.org/Dataset. Los metadatos especifican las propiedades destacadas de cada conjunto de datos: el nombre y la descripción, la cobertura espacial y temporal, la información de origen, etc. Dataset Search usa estos metadatos, los vincula con otros recursos disponibles en Google (abarcaremos este punto más adelante) y crea un índice de este corpus enriquecido de metadatos. Una vez que creamos el índice, podemos comenzar a responder las consultas de los usuarios y establecer qué resultados son más adecuados para ellas.
Descripción general de la tecnología detrás de Google Dataset Search
Uso de metadatos estructurados de los proveedores de datos
Cuando el motor de búsqueda de Google procesa una página web con el lenguaje de marcado schema.org/Dataset, entiende que hay metadatos de conjuntos y procesa esos metadatos estructurados para crear "registros" que describan cada conjunto incluido en una página. El uso de schema.org permite que los desarrolladores incorporen esta información estructurada en HTML sin que esto afecte la apariencia de la página al mismo tiempo que se visibiliza la semántica de la información para todos los motores de búsqueda.
No obstante, sin importar qué tan precisas sean las definiciones o los lineamientos de schema.org, algunos de los metadatos inevitablemente estarán incompletos, serán erróneos o no estarán incluidos. Además, las distinciones entre algunos campos pueden ser imprecisas: ¿el repositorio del conjunto de datos es un editor o un proveedor? ¿Cómo podemos distinguir entre las citas a una publicación científica que describe la creación del conjunto de datos y las publicaciones que detallan su uso? De hecho, muchas de estas preguntas suelen generar debates académicos activos.
A pesar de estas variaciones, Dataset Search debe proporcionar una experiencia del usuario uniforme y predecible en la interfaz frontend. Por lo tanto, en algunos casos sustituimos un nombre de campo más general (p. ej., "proporcionado por") para mostrar los valores provenientes de otros campos (p. ej., "editor", "creador", etc.). En otros casos, directamente no podemos usar algunos de los campos. Por lo general, esto ocurre cuando proveedores de conjuntos de datos interpretan un campo específico de diferentes formas. A modo de solución, evitamos ese campo y trabajamos con la comunidad para que aclarar los lineamientos con mayor precisión. En cada decisión, hubo una pregunta específica que nos ayudó a afrontar los casos difíciles: "¿Qué será más útil para el descubrimiento de datos?". Este enfoque sobre la tarea que estábamos abordando hizo que algunos de los problemas fueran más fáciles de resolver de lo que parecía al principio.
Conexión de réplicas de conjuntos de datos
Es muy común que un conjunto de datos, en especial uno popular, esté presente en más de un repositorio. Usamos varios indicadores para determinar los casos en que un conjunto de datos es una réplica de otro. Por ejemplo, en schema.org se puede especificar la conexión de forma explícita mediante schema.org/sameAs, que es la mejor manera de vincular diferentes réplicas y de dirigir al origen canónico de un conjunto de datos. Otros indicadores incluyen dos descripciones de conjuntos de datos que dirigen a la misma página canónica, que poseen el mismo identificador de objeto digital (DOI), que comparten vínculos para descargar el conjunto de datos o que tienen una gran superposición en otros campos de metadatos. Dado que ninguno de estos indicadores son perfectos por sí solos, cuando hay dos conjuntos de datos iguales, los combinamos a fin de obtener la indicación más fuerte posible.
Conciliación con el Gráfico de conocimiento de Google
El Gráfico de conocimiento de Google es una plataforma potente que describe y vincula información sobre muchas entidades, incluidas las que aparecen en los metadatos de los conjuntos de datos: organizaciones que proporcionan conjuntos de datos, ubicaciones para cobertura espacial de los datos, agencias de financiamiento, etc. Por lo tanto, tratamos de conciliar la información mencionada en los campos de metadatos con los elementos del Gráfico de conocimiento. Llevamos a cabo esta conciliación con una precisión alta por dos motivos. En primer lugar, conocemos los tipos de elementos que se incluyen en el Gráfico de conocimiento y las clases de entidades que esperamos encontrar en los campos de metadatos. Por tal motivo, podemos limitar los tipos de entidades del Gráfico de conocimiento que hacemos coincidir con valores de un campo de metadatos específico. Por ejemplo, un proveedor de un conjunto de datos debería coincidir con la entidad de una organización en el Gráfico de conocimiento y no con una ubicación. En segundo lugar, el contexto de la página web en sí permite reducir la cantidad de opciones, lo que es especialmente útil para distinguir entre organizaciones que comparten la misma sigla. Por ejemplo, "CAMRA" puede hacer referencia a "Chilbolton Advanced Meteorological Radar" (el radar meteorológico avanzado de Chilbolton) o a "Campaign for Real Ale" (una campaña de promoción de la verdadera cerveza). Si usamos los términos de la página web, podemos determinar con mayor facilidad que "CAMRA" es, de hecho, el radar de Chilbolton, ya que en la página aparecen términos como "nubes", "vapor" y "agua".
Este tipo de conciliación abre la puerta a muchísimas posibilidades para mejorar la experiencia de búsqueda de los usuarios. Por ejemplo, Dataset Search puede localizar resultados y mostrar valores conciliados de metadatos en el mismo idioma que el resto de la página. Además, puede usar sinónimos, errores ortográficos típicos, siglas expandidas o bien otras relaciones en el Gráfico de conocimiento para ampliar las consultas.
Vínculo con otros recursos de Google
Google posee varios recursos, como Google Académico, que permiten aumentar los metadatos de los conjuntos de datos. Conocer a qué conjuntos se hace referencia y se cita en las publicaciones es útil por dos motivos:
Permite saber qué tan importante y relevante es un conjunto de datos.
Permite a los autores de los conjuntos acceder a citas de sus datos y recibir el crédito correspondiente con facilidad.
De hecho, esperamos que destacar las publicaciones que usan datos genere un ecosistema de citas más beneficioso. Por el momento, nuestros vínculos a Google Académico son muy aproximados, ya que no contamos con un buen modelo sobre cómo los usuarios citan los datos. Tratamos de ir más allá de los identificadores de objetos digitales para brindar una mejor cobertura, pero la cantidad de artículos que citan un conjunto de datos termina siendo un número aproximado. Esperamos progresar más en esta área para poder obtener un nivel de precisión más alto.
Búsqueda y clasificación de resultados
Cuando un usuario realiza una consulta, buscamos en el corpus de conjuntos de datos de forma similar a como trabaja la Búsqueda de Google con las páginas web. Al igual que con cualquier búsqueda, necesitamos determinar si un documento es relevante para la consulta y, luego, clasificar el grado de relevancia. Debido a que no hay estudios a gran escala sobre la manera en que los usuarios buscan conjuntos de datos, como primera aproximación, nos basamos en la clasificación web de Google. Sin embargo, dado que existe una diferencia entre clasificar conjuntos de datos y páginas web, agregamos algunos indicadores adicionales que tienen en cuenta la calidad de los metadatos, las citas, etc. A medida que más usuarios usen Dataset Search y entendamos mejor cómo buscan conjuntos de datos, esperamos que la clasificación mejore significativamente.
Un mejor ecosistema de datos abiertos
Desarrollamos Dataset Search con la intención de crear una herramienta que impacte de forma positiva en la visibilidad de los datos. La decisión de basarnos en estándares abiertos (schema.org, W3C DCAT, JSON-LD, etc.) para el lenguaje de marcado es intencional, ya que Dataset Search solo puede ser tan efectivo como el ecosistema de datos abiertos que admita. Por lo tanto, el objetivo de Google Dataset Search es admitir un ecosistema de datos abiertos mediante la promoción de lo siguiente:
La adopción generalizada de formatos de metadatos para describir los datos publicados
El desarrollo continuo de formatos de metadatos abiertos para describir más tipos de datos en mayor profundidad
La cultura de citar datos de la misma forma en que se citan las publicaciones de investigación para darles a quienes crean y publican datos el crédito que se merecen
El desarrollo de herramientas que aprovechan estos metadatos para permitir más visualizaciones y mejorar el uso de datos
La mayor adopción de estándares de metadatos abiertos en conjunto con el desarrollo continuo de Dataset Search (y, esperamos, de otras herramientas) debería fomentar un ecosistema de datos abiertos más saludable en el que los datos se conviertan en objetos fundamentales de las investigaciones.
Entonces, ¿dónde está tu conjunto de datos?
Es probable que a esta altura ya esté claro que Dataset Search es tan efectivo como los metadatos de las páginas web para conjuntos de datos. La respuesta más común a la pregunta de por qué un conjunto de datos específico no aparece en nuestros resultados es que la página web de ese conjunto de datos no incluye lenguaje de marcado. Con solo ingresar la página en la Herramienta de pruebas de datos estructurados, podrás ver si incluye este lenguaje. Si el sitio no incluye lenguaje de marcado y eres su propietario, puedes agregarlo. Si la página no te pertenece, puedes pedirles a sus propietarios que lo agreguen para que aumente su visibilidad.
Esperamos que Dataset Search sea útil para la comunidad, que los usuarios realicen descubrimientos fascinantes más rápido, y que los científicos y periodistas puedan aprovechar de forma productiva el tiempo que se ahorran buscando datos.
Agradecimientos Queremos agradecer a Xiaomeng Ban, Dan Brickley, Lee Butler, Thomas Chen, Corinna Cortes, Kevin Espinoza, Archana Jain, Mike Jones, Kishore Papineni, Chris Sater, Gokhan Turhan, Shubin Zhao y Andi Vajda por su trabajo en este proyecto. También queremos destacar a todos nuestros compañeros, colaboradores y usuarios pioneros por su ayuda.
Publicado por Jonathan Huang, gerente sénior de Productos (Google AR/VR)
Desde que lanzamos Daydream por primera vez, los desarrolladores han respondido creando experiencias de realidad virtual (RV) entretenidas, educativas y útiles. Hoy tenemos el agrado de presentar un nuevo conjunto de funciones experimentales para que los desarrolladores usen en ...Read More
Publicado por Jonathan Huang, gerente sénior de Productos (Google AR/VR)
Desde que lanzamos Daydream por primera vez, los desarrolladores han respondido creando experiencias de realidad virtual (RV) entretenidas, educativas y útiles. Hoy tenemos el agrado de presentar un nuevo conjunto de funciones experimentales para que los desarrolladores usen en Lenovo Mirage Solo (nuestro visor Daydream independiente) a fin de seguir impulsando la plataforma. Estas son las novedades:
Controles experimentales de 6DoF
En primer lugar, agregamos API para admitir el seguimiento de controles posicionales con seis grados de libertad (o 6DoF) para el Mirage Solo. Con el seguimiento de 6DoF, puedes mover las manos de forma más natural en entornos de RV, tal como lo harías en el mundo físico. Hasta ahora, este tipo de experiencia se limitaba a una costosa RV basada en PC con seguimiento externo.
También creamos controles experimentales de 6DoF que usan un sistema de seguimiento óptico único que permite a los desarrolladores comenzar a crear contenido con funciones de 6DoF en el Mirage Solo. En lugar de usar cámaras y sensores externos y costosos que deben calibrarse cuidadosamente, nuestro sistema utiliza aprendizaje automático y piezas ya disponibles para calcular de forma precisa la orientación y la posición 3D de los controles. Lo que nos entusiasma de este enfoque es que disminuye la necesidad de usar hardware costoso y permite que más personas puedan acceder a experiencias de 6DoF.
Algunos desarrolladores ya probaron estos controles experimentales y pronto lo harán otros más.
Controles experimentales de 6DoF
Modo transparente
También presentamos el modo transparente, que permite ver lo que te rodea en el mundo físico mientras tienes puesto el visor de RV.
Este modo aprovecha nuestra tecnología WorldSense, que se creó para proporcionar un seguimiento preciso de baja latencia. Y, debido a que las cámaras de seguimiento del Mirage Solo están ubicadas aproximadamente a la distancia de los ojos, también se puede disfrutar de una percepción de profundidad precisa. Como resultado, se obtiene un modo transparente logrado que permitirte jugar al tenis de mesa con el visor puesto.
Tenis de mesa con el modo transparente en el Mirage Solo
La combinación del modo transparente y la tecnología de seguimiento del Mirage Solo también abre la puerta para que los desarrolladores mezclen el mundo físico con el digital de nuevas formas mediante la creación de prototipos de realidad aumentada (RA). Imaginemos, por ejemplo, que un diseñador de interiores puede planificar un diseño para una habitación agregando sillas, mesas y objetos de decoración virtuales en el espacio real.
App experimental que usa objetos de Poly, el modo transparente y controles de 6DoF para diseñar un espacio en nuestra oficina
Apps de RV para smartphones Android
Por último, agregamos la posibilidad de abrir cualquier app de Android para smartphones en tu dispositivo Daydream, lo que te permitirá usar en el modo de RV los juegos y las herramientas que más te gustan. Por ejemplo, puedes jugar al famoso juego independiente Mini Metro en una gran pantalla virtual a fin de tener más espacio para ver y planificar tu propio sistema complejo de transporte público.
Versión en RV de Mini Metro en una pantalla grande
Gracias a la compatibilidad con las apps de RV para Android, los desarrolladores podrán hacer que sus aplicaciones 2D actuales admitan el modo de RV de Daydream sin tener que empezar de cero. El equipo de Chrome reutilizó las interfaces 2D existentes de Sincronización de Chrome y la configuración, entre otros elementos, para ofrecer una experiencia de navegación llena de funciones en Daydream.
La app de Chrome en Daydream usa una interfaz de configuración 2D en el modo de RV
Prueba estas funciones
Disfrutamos mucho de crear contenido con estas herramientas y nos encantaría ver qué puedes hacer con ellas. Muy pronto, el modo transparente y las apps de RV para Android estarán a disposición de todos los desarrolladores para que las prueben.
Si eres desarrollador de EE.UU., haz clic aquí para obtener más información y solicitar un kit especial de controles experimentales de 6DoF.
Publicado por el equipo de Flutter en GoogleRead More
Publicado por el equipo de Flutter en Google
Flutter es un nuevo conjunto de herramientas de apps para dispositivos móviles que permite crear bonitas interfaces nativas en iOS y Android en tiempo récord. Hoy, durante la presentación principal de Google Days en Shangai, anunciamos Flutter Release Preview 2: nuestro último hito importante antes de Flutter 1.0.
Esta actualización continúa con el trabajo de finalizar los casos principales y mejorar la calidad, proceso que comenzó con nuestra versión beta en febrero y continuó con la disponibilidad de nuestra Release Preview, a principios de este verano. Ahora el equipo está completamente enfocado en completar nuestra versión 1.0.
Novedades de Release Preview 2
El tema para esta versión son las apps para iOS de píxeles perfectos. Mientras diseñábamos Flutter con la mente puesta en experiencias personalizadas y orientadas a marcas, escuchamos comentarios de algunos de ustedes que querían crear aplicaciones que cumplieran estrictamente con las pautas de interfaz de Apple. Por ello, en esta actualización hemos ampliado enormemente nuestra asistencia para los controles temáticos “Cupertino” en Flutter, con una biblioteca extensa de widgets y clases que facilitan más que nunca la compilación orientada a iOS.
Adición de compatibilidad con el desplazamiento infinito y el desplazamiento en bucle
Adición de compatibilidad con varias columnas para la proyección cilíndrica fuera de eje.
Como siempre, la documentación de Flutter es el recurso indicado para obtener información detallada sobre las clases Cupertino*. (Tengan en cuenta que en el momento de la escritura, aún estábamos trabajando para agregar algunos de estos nuevos widgets de Cupertino en el catálogo visual de widgets).
También pudimos avanzar para completar otros casos también. En cuanto a lo subyacente, se agregó compatibilidad para ejecutar código Dart en segundo plano, incluso cuando la aplicación se suspende. Los autores de los complementos pueden aprovechar esto para crear complementos nuevos que ejecuten un código en un evento activado, como la activación de un temporizador o la recepción de una actualización de ubicación. Para obtener una introducción más detallada, lee este artículo de Medium, en el que se muestra cómo usar la ejecución en segundo plano para crear un complemento de geovallado.
Otra mejora es una reducción de hasta el 30% en el tamaño de paquetes de aplicaciones en Android e iOS. Nuestra app de Flutter mínima en Android ahora pesa solo 4,7 MB cuando se compila en el modo de lanzamiento, lo que representa un ahorro de 2 MB desde que iniciamos el esfuerzo y seguimos identificando más optimizaciones potenciales. (Ten en cuenta que si bien las mejoras tienen efecto en iOS y Android, puedes ver diferentes resultados en iOS debido a la forma en que se crean los paquetes de iOS).
Impulso creciente
En tiempos en que muchos desarrolladores nuevos continúan descubriendo Flutter, nos sentimos honrados de que sea actualmente uno de los mejores 50 repositorios de software activos en GitHub:
En Google I/O, este año, declaramos a Flutter en condición de “listo para la producción”. Al hallarse este más cerca que nunca de la versión 1.0 estable, muchas aplicaciones nuevas desarrolladas con él se actualizan y miles de apps basadas en él ya aparecen en las tiendas de Apple y Google Play. Se incluyen algunas de las aplicaciones de mayor magnitud conforme al uso en el mundo, como Alibaba (Android e iOS), Tencent Now (Android e iOS) y Google Ads (Android e iOS). A continuación, se muestra un video sobre cómo Alibaba usó Flutter para crear su app Xianyu (Android e iOS), actualmente utilizada por más de 50 millones de clientes en China:
Nos tomamos muy en serio la satisfacción de los clientes y realizamos encuestas entre nuestros usuarios de manera regular. Prometimos compartir los resultados con la comunidad, y nuestra encuesta más reciente muestra que el 92% de los desarrolladores están satisfechos o muy satisfechos con Flutter y que lo recomendarían a otros. Cuando se trata de desarrollo rápido y de IU atractivas, el 79% piensa que Flutter fue extremadamente útil o muy útil para alcanzar la velocidad de ingeniería máxima e implementar una IU ideal. Además, el 82% de los desarrolladores de Flutter están satisfechos o muy satisfechos con el lenguaje de programación Dart, que recientemente celebró el hito de su versión 2.
El fuerte crecimiento de la comunidad de Flutter se puede sentir de otras formas también. En StackOverflow, vemos un crecimiento rápido en Flutter. Se publican, responden y visualizan muchas preguntas nuevas, como se muestra en este gráfico:
Número de vistas de preguntas de StackOverflow etiquetadas con cada uno de los cuatro marcos de trabajo populares de IU a través del tiempo.
Flutter ha sido de código abierto desde el primer día. Eso es por diseño. Nuestro propósito es ser transparentes con respecto a nuestro progreso, y fomentar las contribuciones de individuos y otras empresas que comparten nuestro deseo de ver experiencias de usuarios atractivas en todas las plataformas.
Primeros pasos
¿Cómo se realiza la actualización a Flutter Release Preview 2? Si ya se encuentran en el canal beta, esto solo requiere un comando:
$ flutter upgrade
Pueden verificar si tienen instalada la Release Preview 2 ejecutando flutter --version desde la línea de comandos. Si tienen la versión 0.8.2 o una posterior, ya disponen de todo lo descrito en esta publicación.
Si aún no han probado Flutter, este es el momento ideal y en flutter.io se ofrece toda la información para descargar Flutter y comenzar con sus primeras apps.
Cuando estén listos, podrán encontrar un ecosistema de apps y fragmentos de código de ejemplo que les servirán para poner manos a la obra. Podrán encontrar ejemplos del equipo de Flutter en el repositorio flutter/samples de GitHub. En ellos se tratan aspectos como la forma de usar Material y Cupertino y enfoques para deserializar datos codificados en JSON, entre otros. También existe una lista seleccionada de ejemplos que se vincula con algunos de los mejores ejemplos creados por la comunidad de Flutter.
También podrán aprender y mantenerse actualizados respecto de Flutter a través de videos prácticos, boletines informativos, artículos de la comunidad y muestras de desarrolladores que ofrecemos. Están disponibles grupos de discusión, salas de chat, opciones de asistencia de la comunidad y un evento semanal en línea para ayudarlos durante la creación de sus aplicaciones. La Release Preview 2 es nuestra versión preliminar de la versión. Siguiente parada: ¡la versión 1.0!
En la entrada del blog “Notificar a tus usuarios con FCM”, compartimos información sobre el uso de FCM en versiones modernas de Android en relación con todas las características de administración de energía. En línea con esto, observemos el flujo de trabajo común de los mensajes de FCM (mensajes de notificación y mensajes de datos) y la manera de controlar esos mensajes en tu código.Read More
Jingyu Shi
Representante de desarrolladores
En la entrada del blog “Notificar a tus usuarios con FCM”, compartimos información sobre el uso de FCM en versiones modernas de Android en relación con todas las características de administración de energía. En línea con esto, observemos el flujo de trabajo común de los mensajes de FCM (mensajes de notificación y mensajes de datos) y la manera de controlar esos mensajes en tu código.
Mensajes de notificación
Al enviar notificaciones push a tus usuarios, los mensajes de notificación son el método preferido si quieres aprovechar la Firebase console y permitir que el sistema de Android controle la publicación de la notificación. Los mensajes de notificación son prioritarios de forma predeterminada, y los mensajes de FCM con alta prioridad se entregarán a los usuarios de inmediato, aunque el dispositivo esté inactivo.
Cuando usas un mensaje de notificación de FCM, el sistema controla la manera en que se muestra la notificación en representación de tu app cuando esta se encuentra en segundo plano. Cuando tu app está en segundo plano, el mensaje de notificación de FCM se entrega al controlador onMessageReceived()y puedes manejarlo publicando una notificación, si es necesario, actualizando el contenido de la app con los datos de la carga útil de FCM (4 KB como máx.) u obtener contenido del servidor de la app.
El servidor de apps envía un mensaje de notificación.
Los mensajes de notificación son altamente prioritarios de forma predeterminada y contraíbles; el siguiente mensaje reemplazará el mensaje actual si aún no se ha enviado.
El mensaje de FCM se envía a la app cliente.
Cuando tu app está en primer plano
El desarrollador debe manejar el mensaje de notificación en el controlador.
Publica una notificación o actualiza el contenido de la app en el callback de FCM.
Cuando tu app está en segundo plano
La notificación se envía a la bandeja del sistema.
Si se publica una notificación, tu usuario puede tocar la notificación y abrir tu app. Luego puedes usar los datos de getIntent() para actualizar el contenido de la app, si es necesario.
Nota: Si el usuario descarta la notificación, los datos no se enviarán cuando se abra la app.
Ejemplo de código:
class SimpleFirebaseMessagingService : FirebaseMessagingService() {
private val TAG = "spFirebaseMsgService"
override fun onMessageReceived(remoteMessage: RemoteMessage) {
// when App is in foreground, notification message:
if (remoteMessage.notification != null) {
// post notification if needed
updateContent(remoteMessage.notification)
}
// process data payload
}
private fun updateContent(notification: RemoteMessage.Notification) {}
}
SimpleFirebaseMessagingService.kt
Mensaje de datos
Debes usar mensajes de datos si necesitas controlar la notificación en la app cliente, ya sea para personalizar la notificación o para desencriptar los datos de carga útil recibidos.
De forma predeterminada, un mensaje de datos tiene prioridad normal, lo cual significa que, de forma predeterminada, se enviará en lotes al siguiente período de mantenimiento cuando el dispositivo esté en Descanso.
Manejar mensajes
Al enviar mensajes de datos, debes manejarlos en el callback de onMessageReceived() de la app cliente. El enfoque sugerido en el controlador es el siguiente:
Cuando necesites notificar al usuario, primero publica una notificación.
Actualiza el contenido de la app con datos de carga útil.
Si es necesario, programa la obtención de datos adicionales del servidor de la app.
Flujo de trabajo
Un servidor de apps envía mensajes de datos para notificar a los usuarios con un mensaje de FCM completamente encriptado:
El servidor de apps envía un mensaje de datos al servidor de FCM
El mensaje de datos debe incluir todos los datos necesarios para una notificación en la carga útil.
Cuando se recibe el mensaje en el cliente de la app de FCM, tienes un período breve* para administrar el mensaje y publicar una notificación.
Administra la desencriptación de la carga útil y la notificación personalizada en el callback onMessageReceived() , y luego publica de inmediato una notificación para el usuario.
Ten en cuenta que FCM NO garantiza el orden de la entrega. Los desarrolladores deben controlarlo cuando los mensajes se envían desordenados; cuando envías mensajes no contráctiles, puedes realizar un seguimiento del orden con un ID de secuencia de mensaje y dejar de notificar al usuario hasta que se reciban todos los mensajes o dejes de esperar en caso de que los mensajes de TTL previos caduquen.
Usa los datos de carga útil para actualizar el contenido del cliente y almacenar los datos localmente.
Si necesitas datos adicionales que superen el límite de carga útil de FCM de 4 KB, programa un trabajo o usa WorkManager para obtener los datos, pero no bloquees la visualización de una notificación inicial sobre esto.
Si necesitas actualizar la notificación con los datos que obtuviste, actualízala si todavía está activa.
El usuario abre la app.
Si el contenido de la app no está actualizado, comprueba si se completaron las tareas programadas en 2.3 y actualiza el contenido de tu app de forma correspondiente.
Nota: Recuerda que el controlador de FCM solo tiene alrededor de 20 segundos una vez que se recibe el mensaje y está diseñado para completar tareas cortas, como publicar una notificación. Si necesitas un procesamiento más prolongado, te recomendamos programar un trabajo o usar la WorkManager API.
Ejemplo de código:
class SimpleFirebaseMessagingService : FirebaseMessagingService() {
private val TAG = "spFirebaseMsgService"
override fun onMessageReceived(remoteMessage: RemoteMessage) {
// Use data payload to create a notification
if (remoteMessage.data.isNotEmpty()) {
// step 2.1: decrypt payload
val notificationMessage = decryptPayload(remoteMessage.data)
// step 2.1: display notification immediately
sendNotification(notificationMessage)
// step 2.2: update app content with payload data
updateContent(remoteMessage.data)
// Optional step 2.3: if needed, fetch data from app server
/* if additional data is needed or payload is bigger than 4KB, App server can send a flag to notify client*/
if (remoteMessage.data["url"] != null) {
scheduleJob()
// use WorkManager when it's stable
}
}
// process notification payload when app in foreground...
}
private fun decryptPayload(dataPayload: Map<String, String>): String {
return "decrypted message"
}
private fun sendNotification(notificationMessage: String) {}
private fun updateContent(dataPayload: Map<String, String>) {}
private fun scheduleWork() {
// it's recommended to use WorkManager when it's stable, use JobScheduler
// on background work complete, update the notification if still active
}
}
SimpleFirebaseMessagingService.kt
FCM en versiones modernas de Android
Android introdujo muchas características para mejorar la potencia en versiones recientes, por lo que debes asegurarte de revisar y probar tus casos de uso de FCM con estas características. Puedes obtener más información sobre las características de Android Power y su funcionamiento con FCM en esta entrada de blog.
Si todavía no usas FCM, llegó el momento de realizar una mejora. La biblioteca C2DM quedó obsoleta oficialmente en 2012 y se dio de baja por completo en 2015, por lo que ya no es compatible con versiones modernas de Android. En abril de 2018, también anunciamos que el servidor de Google Cloud Messaging (GCM) y las API de cliente quedaron obsoletos, y se eliminarán el 11 de abril de 2019. Puedes obtener más información sobre el anuncio y las guías de migración en esta entrada de blog.
Para aprovechar por completo la funcionalidad y las características que FCM y Android ofrecen, te recomendamos usar FCM hoy mismo. Para comenzar, consulta la documentación de Firebase Cloud Messaging.