Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Firebase e Android

Firebase e Android

Apresentação do Ygor Cesar para o Android Jam Talks do GDG Aracaju

GDG Aracaju

April 02, 2016
Tweet

More Decks by GDG Aracaju

Other Decks in Programming

Transcript

  1. Firebase Banco em Tempo Real • NoSQL • Dados Armazenados

    em estrutura JSON • Suporte Offline • Pushes e Updates em milissegundos
  2. Firebase • Email e Senha • Provedores OAuth: • Google

    • Facebook • Twitter • Github • Customizada • Autenticação Anônima Autenticação de usuário
  3. 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>
  4. 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
  5. 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<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()
  6. 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()); } });
  7. 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); } }
  8. 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); } }
  9. 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);
  10. 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
  11. 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()
  12. 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