SlideShare uma empresa Scribd logo
1 de 44
Desenvolvendo
protótipos
Android
de
ALTA QUALIDADE
Vítor Bruno
Global Solutions
20%
80%
80%
20%
TEMPO RESULTADOS
Excesso de
trabalho
marginal
Trabalho no
core
Firebase
Exemplo: OurChat
Você já está chegando? Você já está chegando?
Não esqueça o pão Não esqueça o pão
OK OK
Ad
Pão fresco é na padaria do Manuel!
Esforço
• Máquina servidora
– Instalação e manutenção de ambiente LAMP em máquina hospedada
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– Instalação e manutenção de ambiente LAMP em máquina hospedada
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– Instalação e manutenção de ambiente LAMP em máquina hospedada
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Construção de módulo de comunicação HTTP
– Construção de módulo de conversão JSON <-> java objects
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit +
Gson)
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit +
Gson)
– Construção de módulo de exibição e cache de imagens
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit +
Gson)
– Adição de biblioteca para exibição e cache de imagens (Glide)
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit +
Gson)
– Adição de biblioteca para exibição e cache de imagens (Glide)
– Construção de módulo de polling por novas mensagens
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
– Envio de push notifications (GCM)
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit + Gson)
– Adição de biblioteca para exibição e cache de imagens (Glide)
– Adição de biblioteca para Recebimento de push notifications (GCM)
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
– Envio de push notifications (GCM)
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit + Gson)
– Adição de biblioteca para exibição e cache de imagens (Glide)
– Adição de biblioteca para Recebimento de push notifications (GCM)
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Máquina servidora
– LAMP stack rodando em Amazon EC2
– API REST para GET e POST de mensagens
– Otimizações do DB para troca de mensagens
– Envio de push notifications (GCM)
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para SSN Login (Facebook Sign In)
– Adição de biblioteca para consumo de API REST (Retrofit + Gson)
– Adição de biblioteca para exibição e cache de imagens (Glide)
– Adição de biblioteca para Recebimento de push notifications (GCM)
– Adição de biblioteca para exibição de Ads (AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting (Crittercism)
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para exibição e cache de
imagens (Glide)
– Adição da biblioteca Firebase
• Máquina servidora
– Instalação e manutenção de ambiente LAMP
em máquina hospedada
– API para login
– API para armazenamento de mensagem
– API para armazenamento de imagens
– API para recuperação de mensagens
– Otimizações do DB para troca de mensagens
• Aplicativo Android
– Construção de interface
– Construção de módulo de login
– Construção de módulo de comunicação
HTTP
– Construção de módulo de conversão JSON
<-> java objects
– Construção de módulo de exibição e cache
de imagens
– Construção de módulo de polling por novas
mensagens
– Adição de biblioteca para exibição de Ads
(AdMob)
– Adição de biblioteca para Analytics (Flurry)
– Adição de biblioteca para crash reporting
(Crittercism)
• Aplicativo Android
– Construção de interface
– Adição de biblioteca para
exibição e cache de
imagens (Glide)
– Adição da biblioteca
Firebase
Firebase console
Show me the code!
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
// Register a listener for a reference of the DB
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
// Upload a data stream to Storage
InputStream stream = new FileInputStream(new
File(“path/to/images/my_image.jpg"));
UploadTask uploadTask = mountainsRef.putStream(stream);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new
OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
{
Uri downloadUrl = taskSnapshot.getDownloadUrl();
}
});
Apodrecimento de código
Model-View-Presenter
Ferramentas
• FirebaseUI
• RetroLambda
• EventBus
• ButterKnife
• Retrofit
• Gson
• Realm
• ...e muitas outras
https://github.com/wasabeef/awesome-android-libraries
www.materialup.com
www.material.io/guidelines
www.lottiefiles.com
https://github.com/wasabeef/awesome-android-ui
Feedback
Obrigado!
v.almeida@samsung.com

Mais conteúdo relacionado

Semelhante a Desenvolvendo protótipos android

Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da Microsoft
Osvaldo Daibert
 

Semelhante a Desenvolvendo protótipos android (20)

Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
WebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthWebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuth
 
Mini Curso Mashup Coreu
Mini Curso Mashup CoreuMini Curso Mashup Coreu
Mini Curso Mashup Coreu
 
Web 2.0 - Uma Visão Corporativa e Tecnológica
Web 2.0 - Uma Visão Corporativa e TecnológicaWeb 2.0 - Uma Visão Corporativa e Tecnológica
Web 2.0 - Uma Visão Corporativa e Tecnológica
 
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
 
Construindo Data Lakes e Analytics na AWS - BDA301 - Sao Paulo Summit
Construindo Data Lakes e Analytics na AWS -  BDA301 - Sao Paulo SummitConstruindo Data Lakes e Analytics na AWS -  BDA301 - Sao Paulo Summit
Construindo Data Lakes e Analytics na AWS - BDA301 - Sao Paulo Summit
 
Criando Aplicações Serverless
Criando Aplicações ServerlessCriando Aplicações Serverless
Criando Aplicações Serverless
 
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
 
AWS
AWS AWS
AWS
 
Construindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon RedshiftConstruindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon Redshift
 
Modelos de Programação Leve
Modelos de Programação Leve Modelos de Programação Leve
Modelos de Programação Leve
 
M O D E L O S L E V E S D E P R O G R A M AÇÃ O Web 2
M O D E L O S  L E V E S  D E  P R O G R A M AÇÃ O Web 2M O D E L O S  L E V E S  D E  P R O G R A M AÇÃ O Web 2
M O D E L O S L E V E S D E P R O G R A M AÇÃ O Web 2
 
Minicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTIMinicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTI
 
Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da Microsoft
 
Building blocks #4 - Rede de entrega de conteúdo (CDN) na AWS
Building blocks #4 - Rede de entrega de conteúdo (CDN) na AWSBuilding blocks #4 - Rede de entrega de conteúdo (CDN) na AWS
Building blocks #4 - Rede de entrega de conteúdo (CDN) na AWS
 
Introduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação WebIntroduçãoo aws, escalando uma aplicação Web
Introduçãoo aws, escalando uma aplicação Web
 
Usando Amazon CloudFront para aumentar performance, disponibilidade e cache n...
Usando Amazon CloudFront para aumentar performance, disponibilidade e cache n...Usando Amazon CloudFront para aumentar performance, disponibilidade e cache n...
Usando Amazon CloudFront para aumentar performance, disponibilidade e cache n...
 
Community Webcast: Portal Silverlight Brasil - Criando Aplicativos Ricos Para...
Community Webcast: Portal Silverlight Brasil - Criando Aplicativos Ricos Para...Community Webcast: Portal Silverlight Brasil - Criando Aplicativos Ricos Para...
Community Webcast: Portal Silverlight Brasil - Criando Aplicativos Ricos Para...
 
Arquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXIArquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXI
 

Mais de Vítor Bruno de Almeida

Mais de Vítor Bruno de Almeida (6)

LiveOps para games usando o Firebase
LiveOps para games usando o FirebaseLiveOps para games usando o Firebase
LiveOps para games usando o Firebase
 
Como criar e integrar a tecnologia dos chatbots
Como criar e integrar a tecnologia dos chatbotsComo criar e integrar a tecnologia dos chatbots
Como criar e integrar a tecnologia dos chatbots
 
Ui analysis in android
Ui analysis in androidUi analysis in android
Ui analysis in android
 
Não reinvente a roda! Desenvolvendo com bibliotecas Android
Não reinvente a roda! Desenvolvendo com bibliotecas AndroidNão reinvente a roda! Desenvolvendo com bibliotecas Android
Não reinvente a roda! Desenvolvendo com bibliotecas Android
 
Scrum: entendendo o framework e aplicando no dia-a-dia
Scrum: entendendo o framework e aplicando no dia-a-diaScrum: entendendo o framework e aplicando no dia-a-dia
Scrum: entendendo o framework e aplicando no dia-a-dia
 
Por que e como desenvolver aplicativos Android
Por que e como desenvolver aplicativos AndroidPor que e como desenvolver aplicativos Android
Por que e como desenvolver aplicativos Android
 

Desenvolvendo protótipos android

  • 4.
  • 5.
  • 6.
  • 8. Você já está chegando? Você já está chegando? Não esqueça o pão Não esqueça o pão OK OK Ad Pão fresco é na padaria do Manuel!
  • 9. Esforço • Máquina servidora – Instalação e manutenção de ambiente LAMP em máquina hospedada – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 10. • Máquina servidora – Instalação e manutenção de ambiente LAMP em máquina hospedada – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 11. • Máquina servidora – Instalação e manutenção de ambiente LAMP em máquina hospedada – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 12. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 13. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 14. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 15. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 16. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 17. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 18. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Adição de biblioteca para exibição e cache de imagens (Glide) – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 19. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Adição de biblioteca para exibição e cache de imagens (Glide) – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 20. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens – Envio de push notifications (GCM) • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Adição de biblioteca para exibição e cache de imagens (Glide) – Adição de biblioteca para Recebimento de push notifications (GCM) – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 21. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens – Envio de push notifications (GCM) • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Adição de biblioteca para exibição e cache de imagens (Glide) – Adição de biblioteca para Recebimento de push notifications (GCM) – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 22.
  • 23. • Máquina servidora – LAMP stack rodando em Amazon EC2 – API REST para GET e POST de mensagens – Otimizações do DB para troca de mensagens – Envio de push notifications (GCM) • Aplicativo Android – Construção de interface – Adição de biblioteca para SSN Login (Facebook Sign In) – Adição de biblioteca para consumo de API REST (Retrofit + Gson) – Adição de biblioteca para exibição e cache de imagens (Glide) – Adição de biblioteca para Recebimento de push notifications (GCM) – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism)
  • 24. • Aplicativo Android – Construção de interface – Adição de biblioteca para exibição e cache de imagens (Glide) – Adição da biblioteca Firebase
  • 25. • Máquina servidora – Instalação e manutenção de ambiente LAMP em máquina hospedada – API para login – API para armazenamento de mensagem – API para armazenamento de imagens – API para recuperação de mensagens – Otimizações do DB para troca de mensagens • Aplicativo Android – Construção de interface – Construção de módulo de login – Construção de módulo de comunicação HTTP – Construção de módulo de conversão JSON <-> java objects – Construção de módulo de exibição e cache de imagens – Construção de módulo de polling por novas mensagens – Adição de biblioteca para exibição de Ads (AdMob) – Adição de biblioteca para Analytics (Flurry) – Adição de biblioteca para crash reporting (Crittercism) • Aplicativo Android – Construção de interface – Adição de biblioteca para exibição e cache de imagens (Glide) – Adição da biblioteca Firebase
  • 27.
  • 28.
  • 29.
  • 30. Show me the code!
  • 31. // Write a message to the database FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("message"); myRef.setValue("Hello, World!");
  • 32. // Register a listener for a reference of the DB myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String value = dataSnapshot.getValue(String.class); Log.d(TAG, "Value is: " + value); } @Override public void onCancelled(DatabaseError error) { Log.w(TAG, "Failed to read value.", error.toException()); } });
  • 33. // Upload a data stream to Storage InputStream stream = new FileInputStream(new File(“path/to/images/my_image.jpg")); UploadTask uploadTask = mountainsRef.putStream(stream); uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle unsuccessful uploads } }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Uri downloadUrl = taskSnapshot.getDownloadUrl(); } });
  • 36. Ferramentas • FirebaseUI • RetroLambda • EventBus • ButterKnife • Retrofit • Gson • Realm • ...e muitas outras
  • 38.

Notas do Editor

  1. Princípio de Pareto 80% dos efeitos são gerados a partir de 20% das causas
  2. “Arquitetura Serverless” ou “Desenvolvimento Serverless”
  3. Firebase começou em 2011 como uma startup. Na época, ela possuia o serviço de Realtime database, hosting e autenticação.
  4. Em 2014, o Firebase foi comprado pelo Google. A partir da compra, não houve mais notícias da plataforma, até o anúncio no Google I/O 2016 O google detectou que uma queixa de programadores Android era a manutenção de diversos SDKs diferentes, além da necessidade de acesso a Dashboards diferentes para acesso à informações. Com isso, nos últimos 2 anos, reuniu as principais ferramentas em um único pacote, o novo Firebase, que é acessado via um único Dashboard.
  5. Banco de dados NoSQL compartilhado, distribuido em tempo real Autenticação multi-plataforma Hosting Cloud messaging Armazenamento de dados Test Lab Crash reporting Links dinâmicos Advertisement Configuração em tempo real Analytics
  6. Vamos tentar fazer um exercício. O que precisamos para contruir um app como o exemplificado?
  7. Manter uma máquina dedicada em um servidor é caro, trabalhoso e ineficiente. A máquina vai ficar muito tempo ociosa, vai ter que ser configurada e, caso haja algum pico de requisição, não poderá atender. Além de que ela pode cair, prejudicando o funcionamento do serviço
  8. Existem serviços como o da Amazon onde você pode ter disponibilidade de cloud server baseado em demanda, pagando apenas pela capacidade utilizada (inclusive tendo um serviço gratuito em determinadas condições). Esse serviço garante um uptime, maior facilidade de instalação e elasticidade
  9. O módulo de login é um mal necessário, pois precisamos identificar unicamente nossos usuários, porém é uma solução que é cada vez menos usada. Usuários evitam criar contas novas para cada serviço ou aplicativo, pois cada conta é uma nova senha que deve ser lembrada, além de ser um novo ponto suscetível a quebras de segurança. Além disso, é uma implementação complicada, que normalmente envolve protocolos de segurança na comunicação e que não traz valor agregado ao produto
  10. Ainda que numa solução final não seja uma boa ideia trocar o login tradicional por um login de SSN, uma vez que usuários podem não ter a conta de SSN pedida, para um protótipo é totalmente aceitável e incentivado, tornando o processo de login mais seguro, prático e simples, tanto pro usuário quanto pro desenvolvedor
  11. A construção de APIs de servidor pode ser caótica. Mudanças no servidor podem acarretar em grandes mudanças no client. Além disso, todo um protocolo de comunicação deve ser estabelecido (e cumprido por ambas as partes), e barreiras como cookies, autenticação, tempo de sessão, compressão de dados, entre outros muitos problemas não planejados, podem (e vão) surgir durante a implementação
  12. Padronizando as APIs do servidor em um formato REST, conseguimos minimizar o tamanho das respostas e diminuir os pontos de atrito utilizando bibliotecas que consomem uma API rest, mapeando-a em objetos java e tratando callbacks de forma simples, abstraindo comunicação e protocolos.
  13. Imagens podem ser muito pesadas para um app e problemas como baixa performance, ou pior, crashes por falta de memória, não são raros. É necessária a implementação cuidadosa de um módulo responsável para exibição, cache de imagens e gerenciamento de memória
  14. Alternativamente, existem bibliotecas especializadas e comprovadas no mercado, que facilitam muito a utilização e gerenciamento de imagens em apps
  15. A prática de polling, apesar de ainda ser comum, é muito ruim. Essa técnica causa utilização excessiva de bateria e rede do usuário para checar por atualizações em um servidor.
  16. Serviços como o Google Cloud Message (GCM) possibilitam a comunicação Servidor -> Cliente, com APIs e callbacks simples para implementação e serviço gratuito (em cenários razoáveis de utilização)
  17. Tipos suportados: String Long Double Boolean Map<String, Object> List<Object>
  18. Um mesmo código será produzido por (idealmente) 3 desenvolvedores diferentes, com pressa, e que talvez nunca tenham trabalhado juntos antes. É necessário que exista uma preocupação para que o código não apodreça e se perca muito tempo com side-effects (o foco tem que ser sempre no CORE)
  19. O padrão MVP é um entre vários padrões possíveis de arquitetura de apresentação de software (e o meu favorito) Cada elemento de UI cria e passa seus eventos para o seu Presenter; O presenter deve conter a lógica de apresentação desse elemento de UI; O presenter atualiza os objetos de Model assíncronamente; O modelo realimenta o presenter com os resultados da sua atualização; O presenter atualiza a View; Pontos extras para presenters que não mantém estado e podem ser recriados Pontos extras para presenters que “não sabem” que fazem parte de um app android
  20. Não deixar de lado a estética para favorecer um protótipo recheado de funcionalidades Seu projeto será usado (e avaliado) por humanos, que gostam de padrões, de consistência, de beleza
  21. https://pt.surveymonkey.com/r/8CR8HHP