Aplicações Android Real-Time com Firebase

27
Firebase e Android Construindo aplicações Android com Firebase

Transcript of Aplicações Android Real-Time com Firebase

Page 1: Aplicações Android Real-Time com Firebase

Firebase e AndroidConstruindo aplicações Android com Firebase

Page 2: Aplicações Android Real-Time com Firebase

Firebase

Page 3: Aplicações Android Real-Time com Firebase

Firebase

Page 4: Aplicações Android Real-Time com Firebase

Firebase

Banco em Tempo Real

Autenticação de Usuário

Host

Host, o deploy de uma aplicação Firebase é em questão de segundos onde ele já fica hospedado e pronto para uso em produção-Ygor César
O Firebase disponibiliza de autenticação de usuários com email e senha, e providers como Google, Facebook, Twitter, Github, e autenticação anônima, ele controla também sessão você pode informar tempo ou dias, meses, anos para a sessão expirar.-Ygor César
Armazena e sincroniza os dados em um banco de dados na nuvem com formanto NoSQL. Os dados são armazenado no Firebase em formato de JSON, e são sincronizados com todos clientes em tempo real ele também "pode" fica disponível qndo a aplicação está offline.-Ygor César
Page 5: Aplicações Android Real-Time com Firebase

Firebase

Banco em Tempo Real• NoSQL

• Dados Armazenados em estrutura JSON

• Suporte Offline

• Pushes e Updates em milissegundos

Page 6: Aplicações Android Real-Time com Firebase

Firebase

• Email e Senha• Provedores OAuth:• Google• Facebook• Twitter• Github• Customizada

• Autenticação Anônima

Autenticação de usuário

Page 7: Aplicações Android Real-Time com Firebase

Firebase

Host• Facilidade no Deploy

• Auto escalável

• Gratuito(Até 100 conexões)

Page 8: Aplicações Android Real-Time com Firebase

Iniciando no FirebaseCrie uma conta no Firebase: https://www.firebase.com/log

in

1 Crie seu primeiro App Firebase

2

Page 9: Aplicações Android Real-Time com Firebase

Configurando AmbienteFile->Project Structure->Cloud

Page 10: Aplicações Android Real-Time com Firebase

Configurando Ambiente

AndroidManifest.xml

build.gradle

Android Application

Page 11: Aplicações Android Real-Time com Firebase

Referência Firebase

Firebase refUsers = new Firebase(”https://meuprimeiroapp.firebaseio.com/users/”);

refUsers.child(”[email protected]”);

Referência(”https://meuprimeiroapp.firebaseio.com/users/[email protected]”);

Page 12: Aplicações Android Real-Time com Firebase

Model

public class Usuario{ private String email; private String nome;

public Usuario() { }

public Usuario(String email, String nome) { this.email = email; this.nome = nome; }

public String getEmail() { return email; }

public String getNome() { return nome; }}

“jam@mail,com":{ "email": “[email protected]", "nome": “Android Jam"}

Java Object Model JSON Object

Tipos de Dados:• String• Boolean• Long• Double• Map<String, Object>• List<Object>

Page 13: Aplicações Android Real-Time com Firebase

Salvando Dados

• setValue() – Salva ou sobrescreve um valor no path definido

• updateChildren() – Atualiza algumas das chaves sem substituir

todos os dados

• push() – Adiciona para o Firebase gerando um um id único

• runTransaction() – Usa transação do Firebase para evitar concorrência e dados que podem ser corrompidos

Page 14: Aplicações Android Real-Time com Firebase

Salvando Dadosprivate void criarUsuario(String email, String nome){ Usuario user = new Usuario(email, nome); Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/")

.child(email.replace(".", ",")); refUsers.setValue(user);}new Usuario().criarUsuario("[email protected]", "Android-Jam-2");

Map<String, Object> userName = new HashMap<>();userName.put("nome", "AndroidJam");refUsers.updateChildren(userName);

refUsers.push();refUsers.setValue(user);String key = refUsers.getKey();

refUsers.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData currentData) { currentData.child(user.email).setValue(user); return Transaction.success(currentData); } @Override public void onComplete(FirebaseError firebaseError,

boolean commited, DataSnapshot dataSnapshot) { //Commit na transaction }});

push()updateChildren()

setValue()

runTransaction()

Page 15: Aplicações Android Real-Time com Firebase

Salvando DadosO código onde criamos o usuário gerou a estrutura abaixo:

Page 16: Aplicações Android Real-Time com Firebase

Buscando e monitorando Dados• Ao adicionar o listener addValueEventListener é necessário

implementar os métodos onDataChange() e onCancelled()

Firebase refUserName = new Firebase("https://URL-FIREBASE-APP/users/" + "androidjam@mail,com/nome");refUserName.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Log.d("FIREBASE", dataSnapshot.getValue().toString());

//dataSnapshot.getValue().toString == Android-Jam-2 }

@Override public void onCancelled(FirebaseError firebaseError) { Log.d("FIREBASE", firebaseError.getMessage()); }});

Page 17: Aplicações Android Real-Time com Firebase

Buscando e monitorando Dados

•Child Added – É disparado toda vez que é adicionado algum objeto no paiFirebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/");mRefUsers.keepSynced(true);refUsers.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario usuario = dataSnapshot.getValue(Usuario.class); } }

• Ao adicionar o listener addChildEventListener é necessário implementar os métodos onChildAdded(), onChildChanged(), onChildRemoved() e onChildMoved() esse listener é usado geralmente para obter uma lista de itens no Firebase

Page 18: Aplicações Android Real-Time com Firebase

Buscando e monitorando Dados•Child Changed – Ocorre toda vez que um filho ou um descendente é alterado@Override public void onChildChanged(DataSnapshot dataSnapshot, String s) {

if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); }}

•Child Removed – Disparado toda vez que um filho é removido podendo-se obter o filho removido

@Override public void onChildRemoved(DataSnapshot dataSnapshot) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); }}

•Child Moved – Evento usado quando se trabalha com ordenação de dados @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) {

if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario u = dataSnapshot.getValue(Usuario.class); }}

Page 19: Aplicações Android Real-Time com Firebase

Autenticação•Email e Senha•Anônimo•Google•Facebook

•Twitter•Github•Custom

Page 20: Aplicações Android Real-Time com Firebase

Autenticação

Firebase ref = new Firebase("https://URL-FIREBASE-APP");Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() { @Override public void onAuthenticated(AuthData authData) { }

@Override public void onAuthenticationError(FirebaseError firebaseError) { }};ref.authWithCustomToken("<token>", authResultHandler);ref.authAnonymously(authResultHandler);ref.authWithPassword("[email protected]", "correcthorsebatterystaple", authResultHandler);// Autenticação com OAuth providers ("facebook", "github", "google", ou "twitter")ref.authWithOAuthToken("<provider>", "<oauth-token>", authResultHandler);

Page 21: Aplicações Android Real-Time com Firebase

Bônus

Page 22: Aplicações Android Real-Time com Firebase

Cloudinary

O que é?O Cloudinary é um serviço de gerenciamento de imagens e arquivos na nuvem. Além de oferecer o serviço de hospedagem de imagens, ele disponibiliza diversas manipulações, uso de efeitos, detecção facial e muitos outros recursos para as imagens enviadas.O que é preciso?Cadastrar-se gratuitamente, o cadastro pode ser feito com uma conta gratuita limitada.https://cloudinary.com/users/register/free

Page 23: Aplicações Android Real-Time com Firebase

Cloudinary

Configurandocompile 'com.cloudinary:cloudinary-android:1.4.1'

Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);cloudinary.uploader().upload(inputStream, Collections.emptyMap());

Upload com parametrosCloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);cloudinary.uploader().upload(inputStream,

ObjectUtils.asMap("transformation",new Transformation().width(800).height(600).crop("limit")));

Realizando upload()

Page 24: Aplicações Android Real-Time com Firebase

CloudinaryBuscando url de imagenscloudinary.url().type("fetch").imageTag(“upload/finn.jpg");

Page 25: Aplicações Android Real-Time com Firebase

CloudinaryBuscando url de imagens utilizando parametroscloudinary.url().transformation(new Transformation().gravity("face") .radius(100).width(300).height(300).crop("crop")) .imageTag(“upload/finn.png");

http://URL_CLOUDINARY/upload/c_crop,g_face,r_max,w_300,h_300/finn.png

Page 26: Aplicações Android Real-Time com Firebase

Links

• JamDroidFirechat GitHub: github.com/ygorcesar/JamDroidFireChat• Google Play: Link App na Google Play

• Firebase: https://www.firebase.com

• Firebase Docs: https://www.firebase.com/docs

• Cloudinary: http://cloudinary.com

• Cloudinary Github: Link Github Cloudinary

Page 27: Aplicações Android Real-Time com Firebase

Obrigado!

Ygor César

[email protected]