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

Avatar for 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