25/08/16

Preparativos finais para o Android 7.0 Nougat

Publicado por Dave Burke, vice-presidente de engenharia

Android Nougat

Android 7.0 Nougat


No dia 22, o Android 7.0 Nougat começou a ser lançado para os usuários, primeiramente para os dispositivos Nexus. Ao mesmo tempo, estamos levando o código-fonte do Android 7.0 para o Android Open Source Project (AOSP), ampliando a disponibilidade pública desta nova versão do Android para um ecossistema maior.

Trabalhamos com você nos últimos meses para saber a sua opinião sobre essa versão e para garantir que seus aplicativos estejam prontos para os usuários que os usarão em dispositivos Nougat.


Recursos do Nougat


O Android Nougat reflete a opinião de milhares de fãs e desenvolvedores como você, de todo o mundo. Há mais de 250 recursos principais no Android Nougat, incluindo o Modo VR no Android. Trabalhamos em todos os níveis da pilha do Android no Nougat — desde como o sistema operacional lê dados do sensor a como envia pixels à tela — para torná-lo desenvolvido especialmente para fornecer experiências de VR mobile de alta qualidade.

Além disso, o Nougat contém diversos novos recursos para ajudar a tornar o Android mais poderoso, produtivo e seguro. Ele traz um novo compilador JIT/AOT para melhorar o desempenho do software, agiliza instalações de aplicativos e consome menos espaço de armazenamento. O Nougat também adiciona compatibilidade de plataforma com o Vulkan, uma API multiplataforma e de pouca sobrecarga para gráficos 3D de alto desempenho. A compatibilidade com multijanelas permite que os usuários executem dois aplicativos ao mesmo tempo e o Direct Reply permite que os usuários respondam diretamente a notificações sem precisar abrir o aplicativo. Como todos já sabem, o Android foi desenvolvido com camadas de segurança e criptografia robustas para manter seus dados privados seguros, por isso o Nougat contém novos recursos, como a criptografia com base em arquivo, atualizações diretas e o Direct Boot.

Você pode encontrar todos os recursos ao desenvolvedor do Nougat aqui, incluindo detalhes sobre mudanças no comportamento e novos recursos para os aplicativos. Veja uma visão geral das novidades para os desenvolvedores aqui e explore todos os novos recursos ao usuário do Nougat aqui.


Modo multijanela do Android Nougat

Modo multijanela do Android Nougat

A próxima geração de usuários


Começando hoje e com lançamentos graduais nas próximas semanas, os Nexus 6, Nexus 5X, Nexus 6P, Nexus 9, Nexus Player, Pixel C e General Mobile 4G (Android One) receberão uma atualização de software remota para o Android 7.0 Nougat. Os dispositivos inscritos no Programa beta do Android também receberão esta versão final.

E há muitos dispositivos incríveis já com Android Nougat vindo dos nossos parceiros, incluindo o LG V20, que será o primeiro smartphone com Android Nougat de fábrica.

Com todos esses novos dispositivos começando a executar o Nougat, só falta você publicar a atualização do seu aplicativo no Google Play. Recomendamos compilar e segmentar com a API 24. Se ainda estiver testando algumas mudanças de última hora, uma ótima estratégia é usar o recurso de testes beta do Google Play para receber opiniões antecipadas de um pequeno grupo de usuários — incluindo os que usam o Android 7.0 Nougat — e fazer um lançamento em etapas à medida que lança o aplicativo atualizado para todos os usuários.


O que vem a seguir para o Nougat


Estamos colocando o Nougat em um novo programa de manutenção regular nos próximos trimestres. Na verdade, já começamos a trabalhar com a primeira versão de manutenção do Nougat, que terá refinamentos e polimentos contínuos, além de estarmos planejando disponibilizá-la para você nesta primavera como uma prévia do desenvolvedor. Fique ligado!

Resolveremos erros em aberto registrados nas versões da Developer Preview em breve, mas pedimos que você continue enviando comentários e opiniões! Se você ainda vir um problema que registrou no rastreador da prévia, é só registrar um novo problema relacionado ao Android 7.0 no rastreador de falhas do AOSP.

Obrigado por fazer parte da prévia, que, neste ano, compartilhamos mais cedo, visando dar a todos a oportunidade de melhorar a próxima versão do Android. Seus comentários contínuos foram extremamente benéficos para a lapidação dessa versão final, não só para os usuários, mas para todo o ecossistema Android.

21/07/16

Apresentando Firebase Notifications

O Firebase Notifications é um serviço gratuito que possibilita notificações de usuário para dispositivos Android e iOS. Pelo console do Firebase, é possível enviar notificações de forma fácil e rápida em diversas plataformas, sem precisar de código de servidor. Estas notificações podem ser direcionadas a usuários individualmente, a assuntos em que eles se inscreveram ou a segmentos definidos pelos públicos-alvo do Analytics.

O Notifications foi desenvolvido usando o Firebase Cloud Messaging como base e fornece uma opção que permite criar uma plataforma de notificações com esforço mínimo de programação. Ele oferece um console gráfico para enviar mensagens, eliminando a necessidade de criar um servidor. Com este console, você pode envolver os usuários novamente e reter a base de usuários, promover o crescimento do aplicativo e apoiar campanhas de marketing. Se você atualmente está usando o Google Cloud Messaging, recomendamos a migração para o Firebase Cloud Messaging para que os aplicativos para iOS e Android se beneficiem do Firebase Notifications. Confira nosso guia de migração aqui.

O Firebase Notifications se integra muito bem ao Firebase Analytics, permitindo que você defina públicos personalizados e direcione notificações a eles. Então, por exemplo, você pode enviar notificações a segmentos de usuários para um determinado aplicativo, versão de aplicativo ou idioma.

Criar notificações é muito simples: basta usar a GUI do Firebase Notifications no console para compor e enviar notificações a aplicativos vinculados a seu projeto no console. Quando o aplicativo está em segundo plano no dispositivo de um usuário, as notificações são enviadas para a bandeja do sistema. Tocar na notificação abre o aplicativo. Com um pouco de código, é fácil adicionar manipuladores para receber a mensagem quando o aplicativo está em primeiro plano, e para responder a ele, por exemplo, lançando uma atividade em primeiro plano.

Esta conversa sobre o Firebase Notifications da Google I/O 2016 vai além do Firebase Notifications, mostrando como o console funciona e como é fácil escrever código para implementar notificações em um aplicativo ou site.

O Busbud usa o Firebase Notifications para envolver com facilidade os consumidores que viajam o mundo

Busbud é o site de reserva de lugar em ônibus que oferece, toda semana, mais de dez milhões de pontos de partida a viajantes de todo o mundo. Ele permite que o usuário busque, compare e compre passagens de centenas de empresas de ônibus em milhares de cidades e para milhares de rotas. Ele usa as notificações para informar os usuários sobre as mudanças relevantes a eles e envolver-se novamente com eles com códigos de desconto e promoções.

Usando o Firebase Notifications, eles puderam enviar, receber e ver notificações push em 3 minutos. Só precisaram recompilar o aplicativo usando as bibliotecas do Firebase. Depois disso, puderam enviar mensagens a usuários em um idioma específico, de um tema específico ou a um público específico usando uma única linha de código.

“O Firebase [Notifications] permitiu que abandonássemos código do Busbud que não queríamos manter, simplificou o envio de novas notificações segmentadas pelo console em conjunto com o acompanhamento do envolvimento. É uma ferramenta poderosa que torna o aplicativo Busbud uma ótima companhia para os viajantes de ônibus.” Jean Baptiste Morin, desenvolvedor-chefe para dispositivos móveis do Busbud

Saiba mais sobre o Firebase Notifications no site Google Developers, onde você pode ver a documentação e exemplos do Firebase Notifications no Android e no iOS.

20/07/16

Apresentando Firebase Dynamic Links

Nós todos conhecemos bem a ideia de URLs que levam o usuário a um local específico de um site. E, com o aumento da computação móvel, URLs que levam o usuário a um local específico de um aplicativo específico estão se tornando muito mais comuns. Um conceito que a maioria de nós conhece como link direto.

A ideia do link direto no aplicativo é atraente, e é fácil de entender por quê. Com apenas um URL, é possível não só enviar usuários direto para o aplicativo, como também a um local preciso dentro dele. Imagine se sua campanha de e-mail que promove o novo recurso especial do seu aplicativo pudesse levar os usuários diretamente para esse novo recurso com um único clique. Ou se o botão “Experimente o nosso aplicativo” no seu site pudesse não apenas levar os usuários ao aplicativo, mas conduzi-los diretamente ao conteúdo do site que os inspirou a instalar seu aplicativo originalmente.

Infelizmente, o link direto para um aplicativo não é perfeito. É difícil fazer o mesmo link apontar para as versões para iOS e Android do aplicativo. E eles podem ser comportar de forma diferente — ou simplesmente não funcionar — se o usuário não tiver o aplicativo instalado. E o mais importante: se o usuário-alvo tiver que instalar o aplicativo pela loja de aplicativos primeiro, o contexto desse link original normalmente se perde e os usuários recebem a tela inicial genérica em vez de boas-vindas calorosas e personalizadas.

Por isso, criamos os links dinâmicos do Firebase — links diretos que funcionam do jeito que você quiser. Com um único link, você pode enviar usuários ao seu aplicativo para iOS e Android se os tiverem instalado. Se não tiverem, você pode enviá-los para a lista adequada na App Store ou no Google Play. Além disso, esses links sobrevivem ao processo de instalação, portanto, quando um usuário inicializa o aplicativo pela primeira vez, você ainda pode recuperar o URL do link direto que o levou ao aplicativo.

Compartilhe uma Coca e uma música com links dinâmicos

Como uma promoção divertida de verão, o Shazam formou recentemente uma parceria com a Coca-Cola para permitir que os usuários compartilhassem suas músicas favoritas com amigos por meio da bela arte dos vídeos de dublagem.

Os amigos que receberam esses vídeos tinham que vê-los em uma página da web. Antes de implementar os links dinâmicos do Firebase, estas páginas web continham dois links separados: “Instale o aplicativo” e “Faça o seu vídeo”, e o usuário podia escolher o link em que queria clicar. Mas, depois de implementar os links dinâmicos do Firebase, o Shazam pôde substituir esses dois links por um único link com o texto: “Faça o seu vídeo com o Shazam”, que levou futuras estrelas da dublagem de áudio gravado para o aplicativo ou para a loja de aplicativos da respectiva plataforma.

Graças ao uso dos links dinâmicos, os usuários que instalaram o aplicativo puderam pular diretamente para a parte do aplicativo importante para eles e o Shazam descobriu que os usuários que instalaram o aplicativo por este tipo de fluxo de integração apresentaram retenção após 2 semanas 15% maior do que os usuários que inicializaram o aplicativo normalmente.

Criação de links dinâmicos

Os links dinâmicos do Firebase podem ser criados dinamicamente, assim o aplicativo ou o site podem gerar um novo link quando você quiser. Além disso, é possível usar o console do Firebase para criar links dinâmicos com nosso formulário on-line, caso você tenha membros não técnicos na equipe que queiram criar os próprios links e não gostem de perder tempo deixando URLs escapar.

Como os links dinâmicos do Firebase são parte da plataforma Firebase, ele funciona em conjunto com outros recursos, como o Firebase Analytics. Podemos não só fornecer informações básicas, como o número de pessoas que clicou em um link, como a plataforma Firebase também rastreará utm_parameters automaticamente (são parâmetros que a equipe de marketing normalmente adiciona a uma campanha externa) para poder analisar seus eventos importantes no aplicativo pela campanha ou o meio que as levou até lá.

Comece hoje mesmo!

O Firebase Dynamic Links é gratuito e você pode começar hoje — não importa o quanto você usará da plataforma Firebase. Precisa de algumas ideias para começar? Algumas sugestões:

  • Se você tiver um jogo para dispositivo móvel, gere links dinâmicos para compartilhar níveis ou jogadas específicas dentro do jogo. Faça os usuários desafiarem os amigos para ultrapassarem a pontuação na mesma fase ou vincule ao perfil do personagem. Os link dinâmicos do Firebase são perfeitos para compartilhamento entre usuários dentro do aplicativo.
  • Converta usuários de computador em usuários de dispositivos móveis! Se tiver um site e deseja estimular os usuários a seguir suas instruções em um aplicativo para dispositivos móveis, você pode usar os links dinâmicos para impulsionar um recurso do tipo “Veja esta página no celular”. Na verdade, o Google Maps faz exatamente isso com o recurso “Enviar para o celular” para compartilhar locais por SMS ou e-mail.
  • De forma semelhante, se os usuários estiverem acessando seu site em um dispositivo móvel e você deseja incentivá-los a ver esse conteúdo no aplicativo, um link dinâmico pode garantir que eles acessem o aplicativo e sejam conduzidos diretamente para o conteúdo de que precisam.

E, é claro, os links dinâmicos são ótimos para integrar a suas campanhas por e-mail, SMS ou redes sociais.

Para saber mais sobre os links dinâmicos do Firebase, confira nossa documentação aqui e use o console do Firebase para começar.

19/07/16

Apresentando o Firebase Analytics

Bem-vindos, desenvolvedores novos e antigos do Firebase! Há muito a descobrir com a plataforma Firebase -- mais do que poderíamos explicar em apenas uma publicação de blogue. Ao longo das últimas semanas, compartilhamos publicações com foco em cada um dos recursos do Firebase. Em nossa primeira publicação, queríamos que você conhecesse o Firebase Analytics -- a solução de analítica ilimitada e gratuita para desenvolvedores para dispositivos móveis.

O Analytics é o coração dos aplicativos de sucesso, assim, quando expandimos o Firebase para ajudar os desenvolvedores para dispositivos móveis a criar aplicativos melhores e expandir negócios de sucesso, achamos que era importante criar uma solução de analítica que atendesse às necessidades de todos os desenvolvedores de aplicativos, de empresas iniciantes de dois funcionários a empresas grandes e estabelecidas.

Conheça o Firebase Analytics, uma ferramenta de analítica ilimitada e gratuita criada do zero para aplicativos móveis. O Firebase Analytics é o centro da plataforma Firebase, fornecendo as informações necessárias para criar aplicativos de sucesso.

Toda a analítica do seu aplicativo em um lugar.

O Firebase Analytics ajuda você a entender o que os usuários estão fazendo no seu aplicativo. Ele tem todas as métricas que você esperaria em uma ferramenta de analítica de aplicativos (receita média por usuário (ARPU), usuários ativos, relatórios de retenção, contagens de evento etc.), combinadas com propriedades do usuário, como tipo de dispositivo, versão do aplicativo e versão do sistema operacional, para dar a você percepções sobre como os usuários interagem com seu aplicativo.

Coletar todos estes dados é simples e funciona instantaneamente. Ao adicionar o Firebase ao seu aplicativo, os principais eventos são medidos automaticamente -- incluindo primeiras aberturas (pense nelas como instalações), compras dentro do aplicativo e muito mais. Com até 500 tipos de evento distintos (cada um com até 25 parâmetros em pares de valor-chave), você pode medir eventos personalizados e adicionais sugeridos exclusivos do seu aplicativo com apenas algumas linhas de código.

Alguns eventos são mais importantes para você do que outros, mas, com o acompanhamento de conversão, é possível definir os eventos mais importantes que acontecem no seu aplicativo (como a compra de um item ou o compartilhamento do aplicativo com outras pessoas) e criar funis somente para estes eventos para descobrir onde os usuários saíram do processo.

Mas o Firebase Analytics ajuda você a analisar mais do que apenas comportamentos do usuário. Ele também fornece um vasto conjunto de dados que ajuda a descrever os usuários – como informações geográficas, demográficas e de interesses, que podem ajudar você a ajustar melhor seu aplicativo e refinar atividades de marketing.

Ainda que os dados demográficos padrão sejam úteis, também é importante entender as propriedades do usuário específicas do seu aplicativo. O Firebase Analytics permite definir propriedades de usuário personalizadas para todos os usuários. Por exemplo, o aplicativo de exercícios físicos pode registrar o exercício favorito de um usuário ou o aplicativo de música pode registrar o gênero favorito do usuário. O Firebase Analytics também está integrado ao BigQuery, o armazém de dados totalmente gerenciado da Google, para que você possa exportar seus dados brutos do Firebase e juntá-los com dados personalizados para realizar análises adicionais.

Marketing de aplicativo mais inteligente e eficaz.

Entender o comportamento do usuário é apenas uma parte importante do Firebase Analytics -- você também precisa entender como a publicidade e as atividades de marketing influenciam estes comportamentos. O Firebase Analytics pode vincular o comportamento dos usuários automaticamente do seu aplicativo a uma fonte de tráfego para que você saiba de onde esses usuários valiosos estão vindo. Ele funciona com o Google AdWords e mais de 20 outras redes de anúncio grandes sem precisar instalar SDKs adicionais, facilitando a compreensão do ROI sobre o gasto com marketing e publicidade. Você também pode importar os eventos de conversão do Firebase Analytics diretamente para o Google AdWords para poder ofertar, com apenas alguns cliques, em eventos específicos do usuário que acontecem no seu aplicativo.

O Firebase Analytics torna todo o Firebase melhor.

O Firebase Analytics foi projetado para tornar acionáveis os dados de analítica. Você pode usar o recurso Audiences para criar um segmento de usuários com base nos dados de evento e nas propriedades do usuário. Por exemplo, um público de pessoas que adicionaram itens ao carrinho, mas não finalizaram a compra. Ou um público de fãs de música clássica que ouviram mais de 200 músicas.

Você pode, então, usar estes públicos em conjunto com outros recursos do Firebase, como o Remote Config, que permite alterar a aparência e o estilo do aplicativo somente para um público específico. Quer criar uma página inicial personalizada para usuários que assinaram seu boletim informativo ou atingiram um determinado nível no seu aplicativo de exercícios físicos? Você pode fazer isso diretamente do console do Firebase usando o Remote Config e o Audiences no Firebase Analytics.

O Audiences do Firebase Analytics também funciona com o Notifications, permitindo que você envie notificações dentro do aplicativo para qualquer público que tiver definido. Assim, se você enviou apenas um novo conjunto de armaduras para a loja dentro do aplicativo do jogo, pode notificar somente os usuários que compraram itens dentro do jogo no passado. Além disso, quando sua conta do Firebase está vinculada ao AdWords, você pode usar os públicos para envolver novamente usuários inativos há algum tempo com campanhas de anúncio. Para saber mais sobre os recursos de analítica do aplicativo no Firebase Analytics, confira nosso vídeo:

Embora o Firebase funcione bem como uma ferramenta autônoma, o verdadeiro poder do Firebase Analytics está na percepção do cliente que ele fornece a outros recursos do Firebase - percepção que ajuda você a expandir, desenvolver e ganhar dinheiro com seu aplicativo para dispositivos móveis.

18/07/16

Apresentando Firebase Remote Config

Transformar um ótimo aplicativo em um negócio de sucesso requer mais do que simplesmente lançar o aplicativo e esperar. Você precisa se adaptar rapidamente às opiniões dos usuários, testar novos recursos e fornecer o conteúdo mais relevante para os usuários.

É para isto que o Firebase Remote Config serve. Ao permitir que você altere a aparência do seu aplicativo pela nuvem, o Firebase Remote Config possibilita continuar responsivo às necessidades do seu usuário. O Firebase Remote Config também permite fornecer diferentes conteúdos a diferentes usuários, assim você pode realizar experimentos, lançar recursos gradualmente e até fornecer conteúdo personalizado com base em como os usuários interagem no aplicativo.

Vejamos o que você pode realizar ao colocar seu aplicativo para trabalhar com o Remote Config.

Atualize seu aplicativo sem atualizá-lo

Todos nós passamos pela experiência de lançar um aplicativo e descobrir logo depois que ele não era perfeito. Talvez você tivesse textos incorretos ou confusos dos quais os usuários não gostaram. Talvez você tivesse deixado uma fase do jogo muito difícil e os jogadores não conseguiam passar dela. Ou talvez fosse algo tão simples quanto adicionar uma animação que demorava muito para acabar.

Tradicionalmente, você precisaria consertar estes tipos de erro atualizando os valores no código do aplicativo, compilar e publicar uma nova versão do aplicativo e depois esperar que todos os usuários baixassem a nova versão.

Mas, se você conectou seu aplicativo ao Remote Config na plataforma do Firebase, pode mudar esses valores de forma rápida e fácil diretamente na nuvem. O Remote Config pode baixar esses novos valores na próxima vez em que o usuário inicializar o aplicativo e tratar as necessidades dos usuários, tudo isso sem precisar publicar uma nova versão do aplicativo.

Forneça o conteúdo certo para as pessoas certas

O Firebase Remote Config permite fornecer diferentes configurações a grupos segmentados de usuários por meio de condições, que usam regras de segmentação para fornecer valores específicos a diferentes usuários. Por exemplo, você pode enviar dados personalizados do Remote Config aos usuários de diferentes países. Ou pode enviar diferentes conjuntos de dados separadamente para dispositivos iOS e Android.

Você também pode fornecer valores diferentes com base nos públicos definidos no Firebase Analytics para obter segmentação um pouco mais sofisticada. Então, se você deseja mudar a aparência da sua loja dentro do aplicativo apenas para os jogadores que acessaram a loja no passado, mas que ainda não compraram nada, pode fazer isso criando valores no Remote Config somente para esse público.

Realize testes A/B e lançamentos graduais

As condições do Remote Config também permitem fornecer valores diferentes a conjuntos de usuários aleatórios. Você pode tirar vantagem deste recurso para realizar testes A/B ou lançar novos recursos gradualmente.

Se estiver lançando um novo recurso no aplicativo, mas não tiver certeza de que o público gostará dele, poderá escondê-lo em um sinalizador no código. Em seguida, poderá mudar o valor desse sinalizador usando o Remote Config para ativar ou desativar o recurso. Definindo a condição “My New Feature Experiment” que está ativa para, digamos, 10% da população, você pode ativar este novo recurso para um pequeno subconjunto de usuários e garantir que ele forneça uma ótima experiência antes de disponibilizá-lo para o restante da população.

De forma semelhante, você pode realizar testes A/B fornecendo valores diferentes a diferentes grupos da população. Quer ver se as pessoas são mais propensas a concluir uma compra se o botão de compra no aplicativo é “Compre agora” ou “Finalizar”? É esse tipo de experimento que você pode fazer facilmente usando testes A/B.

Se deseja acompanhar os resultados destes testes A/B, você pode fazer isso hoje mesmo definindo uma propriedade do usuário no Firebase Analytics baseada no experimento. Depois, você pode filtrar qualquer relatório do Firebase (como se o usuário iniciou o processo de compra ou não) com esta propriedade. Fique de olho neste espaço para ver notícias sobre futuras melhorias nos testes A/B.

Uma melhoria fabulosa na retenção

Muitos dos nossos parceiros antigos já estão usando o Firebase Remote Config para testar mudanças dentro do aplicativo.

Fabulous, um aplicativo da Duke University projetado para ajudar as pessoas a adotar melhores hábitos de vida, queria experimentar o fluxo de primeiros passos para ver que métodos eram mais eficazes em tornar os usuários ativos no aplicativo. Eles não apenas testaram as mudanças com testes A/B, como imagens, texto e rótulos de botão, mas também testaram desta forma todo o processo de integração usando o Remote Config para determinar que caixas de diálogo as pessoas viriam e em que ordem.

Graças a esses experimentos com o Remote Config, o Fabulous pôde aumentar o número de pessoas que concluíam o fluxo de integração de 42% para 64%, além de aumentar a taxa de retenção de um dia em 27%.

A pesquisa mostrou que um aplicativo médio perde a maioria dos usuários nos 3 primeiros dias, por isso, fazer estes tipos de melhoria no processo de integração do aplicativo -- e confirmar a eficácia realizando testes A/B -- pode ser crucial para garantir o sucesso do aplicativo a longo prazo.

Seu aplicativo está conectado?

Quando se usa o Remote Config, é possível fornecer todos os tipos de valores padrão localmente no dispositivo e depois apenas enviar novos valores pela nuvem caso difiram dos padrões. Isto dá a flexibilidade de determinar qualquer valor do aplicativo como sendo potencialmente configurável pelo Remote Config sem prejudicar as chamadas leves de rede, pois você só enviará mudanças. Então, fique à vontade para pegar todas as strings codificadas, constantes e aquele arquivo AppConstants que você deixou de lado (tudo bem, todo mundo já fez isso), e conectá-los ao Remote Config!

O Firebase Remote Config é parte da plataforma do Firebase e está disponível gratuitamente para iOS e Android. Se quiser saber mais, consulte nossa documentação e não deixe de explorar todos os recursos do Firebase SDK.

15/07/16

Provedor de segurança “Crypto” descontinuado no Android N

Publicado por Sergio Giro, engenheiro de software

random_droid

Se seu aplicativo Android deriva chaves usando o algoritmo SHA1PRNG do provedor Crypto, você deve começar a usar uma função de derivação de chave real e possivelmente criptografar os dados novamente.

A arquitetura de criptografia Java permite que os desenvolvedores criem uma instância de uma classe, como uma criptografia ou um gerador de número pseudoaleatório, usando chamadas como:

SomeClass.getInstance("SomeAlgorithm", "SomeProvider");

Ou simplesmente:

SomeClass.getInstance("SomeAlgorithm");

Por exemplo,

Cipher.getInstance(“AES/CBC/PKCS5PADDING”);
SecureRandom.getInstance(“SHA1PRNG”);

No Android, recomendamos não especificar o provedor. Em geral, toda chamada das Java Cryptography Extension (JCE) APIs que especificam um provedor só deve ser realizada se o provedor está incluso no aplicativo ou se o aplicativo consegue lidar com uma possível ProviderNotFoundException.

Infelizmente, muitos aplicativos dependem do provedor “Crypto”, agora removido, para um antipadrão de derivação de chave.

Este provedor só fornecia uma implementação do algoritmo “SHA1PRNG” para instâncias de SecureRandom. O problema é que o algoritmo SHA1PRNG não é criptograficamente forte. Para leitores interessados em detalhes, Sobre distância estatística baseada em testes de sequências pseudoaleatórias e experimentos com PHP e Debian OpenSSL, seção 8.1, de Yongge Want e Tony Nicol, define que a sequência “aleatória”, considerada na forma binária, tem a tendência a retornar zeros, e que isso piora dependendo da semente.

Como resultado, no Android N, estamos removendo completamente a implementação do algoritmo SHA1PRNG e do provedor Crypto. Abordamos os problemas no uso do SecureRandom para derivação de chave há alguns anos em Como usar criptografia para armazenar credenciais com segurança. No entanto, dado seu uso continuado, falaremos sobre isso novamente aqui.

Um uso comum, mas incorreto, deste provedor era para derivar chaves de criptografia usando uma senha como semente. A implementação de SHA1PRNG tinha um erro que a tornava determinista se setSeed() fosse chamado antes de se obter a saída. Este erro era usado para derivar uma chave fornecendo uma senha como semente e depois usando os bytes da saída “aleatória” da chave (“aleatória” nesta frase significa “previsível e criptograficamente fraca”). Essa chave poderia, então, ser usada para criptografar e decodificar dados.

A seguir, explicamos como derivar chaves de forma correta e como decodificar os dados que foram criptografados usando uma chave sem segurança. Além disso, há um exemplo completo, incluindo uma classe auxiliar para usar a funcionalidade SHA1PRNG removida, com o único objetivo de decodificar dados que, de outra forma, estariam indisponíveis.

As chaves podem ser derivadas da seguinte forma:

  • Se estiver lendo uma chave AES do disco, basta armazenar a chave atual e não passar por essa confusão. Você pode obter um SecretKey para usar o AES dos bytes fazendo o seguinte:

    Chave SecretKey = novo SecretKeySpec(keyBytes, "AES");

  • Se estiver usando uma senha para derivar uma chave, siga o excelente tutorial de Nikolay Elenkov, com a cautela de que uma boa regra prática é que o tamanho de salt deve ser o mesmo da saída da chave. Fica assim:
   /* User types in their password: */  
   String password = "password";  

   /* Store these things on disk used to derive key later: */  
   int iterationCount = 1000;  
   int saltLength = 32; // bytes; should be the same size
              as the output (256 / 8 = 32)  
   int keyLength = 256; // 256-bits for AES-256, 128-bits for AES-128, etc  
   byte[] salt; // Should be of saltLength  

   /* When first creating the key, obtain a salt with this: */  
   SecureRandom random = new SecureRandom();  
   byte[] salt = new byte[saltLength];  
   random.nextBytes(salt);  

   /* Use this to derive the key from the password: */  
   KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,  
              iterationCount, keyLength);  
   SecretKeyFactory keyFactory = SecretKeyFactory  
              .getInstance("PBKDF2WithHmacSHA1");  
   byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();  
   SecretKey key = new SecretKeySpec(keyBytes, "AES");  

Pronto. Você não deve precisar de mais nada.

Para facilitar o trânsito de dados, abordamos o caso de desenvolvedores que têm dados criptografados com uma chave sem segurança, que é sempre derivada de uma senha. Você pode usar a classe auxiliar InsecureSHA1PRNGKeyDerivator no exemplo de aplicativo para derivar a chave.

 private static SecretKey deriveKeyInsecurely(String password, int
 keySizeInBytes) {  
    byte[] passwordBytes = password.getBytes(StandardCharsets.US_ASCII);  
    return new SecretKeySpec(  
            InsecureSHA1PRNGKeyDerivator.deriveInsecureKey(  
                     passwordBytes, keySizeInBytes),  
            "AES");  
 }  

Em seguida, você pode criptografar os dados novamente com uma chave derivada de forma segura, conforme explicado acima, e ser feliz!

Observação 1: como uma medida temporária para que os aplicativos continuem funcionando, decidimos ainda criar a instância para aplicativos que visam a versão 23 do SDK, a versão para Marshmallow ou anterior. Não fique dependente da presença do provedor Crypto no Android SDK, nosso plano é excluí-lo totalmente no futuro.

Observação 2: já que muitas partes do sistema presumem a existência de um algoritmo SHA1PRNG, quando uma instância de SHA1PRNG é solicitada e o provedor não é especificado, retornamos uma instância de OpenSSLRandom, que é uma fonte segura de números aleatórios derivados do OpenSSL.

14/07/16

Chrome 52 Beta: confinamento CSS, medição de desempenho mais simples, respostas por stream a partir de Service Workers e mais opções para push na web

Salvo indicação em contrário, as mudanças descritas abaixo se aplicam ao canal de lançamento do Chrome Beta mais recente para Android, Chrome OS, Linux, Mac e Windows.
Confinamento CSS
Experiências ricas e interativas são um dos pilares da web, mas às vezes podem levar muito tempo para renderizar devido à complexidade. Atualmente, o Chrome melhora o desempenho da renderização usando heurística para determinar que partes de uma página foram alteradas. Em vez de renderizar toda a página 60 vezes por segundo, só as seções alteradas são atualizadas. No entanto, como os elementos podem ser exibidos fora dos limites dos seus pais, é possível que alterações em um elemento afetem elementos no restante do documento. Isso aumenta drasticamente o número de elementos que o Chrome precisa considerar durante a renderização.


Como novidade dessa versão, a propriedade contain do CSS permite que os desenvolvedores evitem que o secundário de um elemento seja exibido fora dos limites. Quando um elemento atualiza, esta garantia permite que o Chrome ignore todos os elementos fora do nó relacionado durante a renderização, o que agiliza a renderização.
Observador de desempenho
A coleta de dados precisos de medição de usuários reais (RUM) é fundamental para detectar problemas de desempenho e regressões que podem prejudicar a experiência do usuário de um site. As DevTools do Chrome permitem testar o site localmente, mas avaliar como o site se sai para usuários reais com diversos dispositivos pode ser complicado. A versão mais recente do Chrome é compatível com a API PerformanceObserver, que confere um meio simples e eficaz de coletar dados RUM em tempo de execução. Em vez de fazer pesquisas por atualizações, os sites podem declarar em que métricas estão interessados. O navegador notifica o site quando novos pontos de dados para essas métricas se tornam disponíveis.
Respostas do trabalhador de serviço potencializadas por ReadableStreams
O streaming de respostas HTTP permite aos navegadores renderizar as partes anteriores de um documento HTML grande progressivamente antes de a resposta inteira ficar disponível. A versão mais recente do Chrome melhora os trabalhadores de serviço adicionando compatibilidade com a transmissão. Os sites podem usar a Streams API para construir objetos Response transmissíveis, passando um ReadableStream ao construtor de Response.
O cliente off-line da Wikipédia demonstra os benefícios de velocidade de fluxos legíveis.
Compatibilidade com protocolo push na web e VAPID
As notificações por push possibilitaram um novo nível de reenvolvimento para aplicativos web, mas até então os desenvolvedores tiveram que usar serviços de entrega de mensagens por push de terceiros e diferentes APIs para diferentes navegadores. O Chrome agora é compatível com VAPID, um padrão aberto para autenticar o servidor de um site com um serviço de push. Ao usar o VAPID, os sites recebem um ponto de extremidade do Firebase Cloud Messaging, que é compatível com o protocolo de push na web para diversos navegadores.
Outros recursos desta versão
Publicado por Shubhie Panicker, líder de desempenho