Slide 1

Slide 1 text

Firebase e Android Construindo aplicações Android com Firebase

Slide 2

Slide 2 text

Firebase

Slide 3

Slide 3 text

Firebase

Slide 4

Slide 4 text

Firebase Banco em Tempo Real Autenticação de Usuário Host

Slide 5

Slide 5 text

Firebase Banco em Tempo Real • NoSQL • Dados Armazenados em estrutura JSON • Suporte Offline • Pushes e Updates em milissegundos

Slide 6

Slide 6 text

Firebase • Email e Senha • Provedores OAuth: • Google • Facebook • Twitter • Github • Customizada • Autenticação Anônima Autenticação de usuário

Slide 7

Slide 7 text

Firebase Host • Facilidade no Deploy • Auto escalável • Gratuito(Até 100 conexões)

Slide 8

Slide 8 text

Iniciando no Firebase Crie uma conta no Firebase: https://www.firebase.com/login 1 Crie seu primeiro App Firebase 2

Slide 9

Slide 9 text

Configurando Ambiente File->Project Structure->Cloud

Slide 10

Slide 10 text

Configurando Ambiente AndroidManifest.xml build.gradle Android Application

Slide 11

Slide 11 text

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]”);

Slide 12

Slide 12 text

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 • List

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Salvando Dados private 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 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()

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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()); } });

Slide 17

Slide 17 text

Buscando e monitorando Dados • Child Added – É usado geralmente para obter uma lista de itens no Firebase e é disparado toda vez que é adicionado algum objeto no pai Firebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/"); refUsers.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario usuario = dataSnapshot.getValue(Usuario.class); } }

Slide 18

Slide 18 text

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); } }

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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("", authResultHandler); ref.authAnonymously(authResultHandler); ref.authWithPassword("[email protected]", "correcthorsebatterystaple", authResultHandler); // Autenticação com OAuth providers ("facebook", "github", "google", ou "twitter") ref.authWithOAuthToken("", "", authResultHandler);

Slide 21

Slide 21 text

Bônus

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Cloudinary Configurando compile 'com.cloudinary:cloudinary-android:1.4.1' Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL); cloudinary.uploader().upload(inputStream, Collections.emptyMap()); Upload com parametros Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL); cloudinary.uploader().upload(inputStream, ObjectUtils.asMap("transformation", new Transformation().width(800).height(600).crop("limit"))); Realizando upload()

Slide 24

Slide 24 text

Cloudinary Buscando url de imagens cloudinary.url().type("fetch").imageTag(“upload/finn.jpg");

Slide 25

Slide 25 text

Cloudinary Buscando url de imagens utilizando parametros cloudinary.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.pn g

Slide 26

Slide 26 text

Links • App JamDroidFireChat: https://github.com/ygorcesar/JamDroidFireChat • Firebase: https://www.firebase.com • Firebase Docs: https://www.firebase.com/docs • Cloudinary: http://cloudinary.com • Cloudinary Github: https://github.com/cloudinary/cloudinary_java/tree/master/cloudinary-android

Slide 27

Slide 27 text

Obrigado! Ygor César ygorces4r [email protected]