O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Android Firebase

2.464 visualizações

Publicada em

Nessa apresentação falamos sobre o Firebase, desenvolvimento Android.
Descrevemos os funcionamento do Firebase.
Para finalizar montamos um aplicativo de chat.

Publicada em: Celular

Android Firebase

  1. 1. Android + Firebase
  2. 2. Bruno de Lima e Silva google.com/+BrunoDeLimaS Gamer Pós-graduado Parto Humanizado Crowdmobi Trakto Coding Dojo
  3. 3. # O que é Firebase? ● Banco de Dados Real-time ● Autenticação ● Desenvolvimento rápido ● Foco no usuário ● Bibliotecas para várias plataformas
  4. 4. # Como o Firebase funciona? ●Uma ávore JSON ● Sem registros ● Novo objeto = Novo campo em um JSON ● Valores monitorados ● Por que “monitorar” um valor?
  5. 5. # Intro Android ● Estrutura do projeto ● Layout e Widgets ● Java, Activity, Fragment ● Resouces Qualifiers (orientation, locale, screenSize)
  6. 6. # What do we need ● Git ● JDK ● Android SDK ● Android Studio ● GenyMotion* Time to hit “next” *Emulador do android
  7. 7. Firebase
  8. 8. ## Biblioteca ● Com o gradle é muito simles ● Adicione essa dependência ● Clique em Gradle Sync dependencies { compile 'com.firebase:firebase-client-android:2.3.1' }
  9. 9. ## Biblioteca ● Em alguns casos, adicione android { packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE-FIREBASE.txt' exclude 'META-INF/NOTICE' } }
  10. 10. ## Permissões ● Internet Só isso mesmo <uses-permission android:name="android.permission.INTERNET" />
  11. 11. ## Inicialização ● O firebase precisa ser iniciado com um context ● Iniciar na classe Application ● Pode ser na activity, se você só tiver uma. ● Deve acontecer antes de qualquer operação com o firebase.
  12. 12. ## Inicialização Seu código deve ficar mais ou menos assim. public class Application extends android.app.Application { @Override public void onCreate() { super.onCreate(); Firebase.setAndroidContext(this); } }
  13. 13. # Salvando ● Existem várias formas ● Cada uma com seu propósito ● Cada operação precisa de uma referência Firebase ref = new Firebase("sua-url-aqui");
  14. 14. ## setValue() ● A Mais comum ● Escreve ou sobrescreve um valor Firebase userRef = ref.child("users").child("gdgmaceio"); userRef.child("name").setValue("GDG Maceió"); userRef.child("birthYear").setValue(2014);
  15. 15. ## setValue() O código anterior criou a seguinte estrutura.
  16. 16. ## setValue() Podemos passar um objeto. public class User { private int birthYear; private String name; ... } Firebase userRef = ref.child("users").child("gdgmaceio"); User user = new User("GDG Maceió", 2014); userRef.setValue(user);
  17. 17. ## setValue() O código anterior também pode ser substituído por um map. Firebase userRef = ref.child("users").child("gdgmaceio"); Map<String, String> userMap = new HashMap<String, String>(); userMap.put("birthYear", "2014"); userMap.put("name", "GDG Maceió"); userRef.setValue(userMap);
  18. 18. ## updateChildren() ● Atualiza apenas os nós alterados ● Usar pra editar múltiplos campos de simultaneamente Firebase userRef = ref.child("users").child("gdgmaceio"); Map<String, Object> userMap = new HashMap<String, Object>(); nickname.put("name", "GDG Maceió Rocks!"); userMap.put("birthYear", "2013"); userRef.updateChildren(userMap);
  19. 19. ## push() ● Usado para Listas ● Gerador de Identificador Único Firebase chats = ref.child("chats"); Map<String, String> post1 = new HashMap<String, String>(); post1.put("author", "brunodles"); post1.put("message", "Android Is Awesome"); chats.push().setValue(post1);
  20. 20. ## push() ● Para adicionar o um segundo post Map<String, String> post2 = new HashMap<String, String>(); post2.put("author", "gdgmaceio"); post2.put("message", "Firebase too! o/"); chats.push().setValue(post2);
  21. 21. ## runTransaction() ● Quando usar ○Operações concorrentes ○Possibilidade de inconsistência de dados ● Implementação diferente
  22. 22. ## runTransaction()ref.child("chatCount").runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData currentData) { if (currentData.getValue() == null) { currentData.setValue(1); } else { currentData.setValue((Long) currentData.getValue() + 1); } return Transaction.success(currentData); //we can also abort by calling Transaction.abort() } @Override public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) { //This method will be called once with the results of the transaction. } });
  23. 23. # Monitorando Dados ● Implementar Interface ● Observer ● Várias formas de observar
  24. 24. ## Eventos Os eventos são disparados de acordo com alguma ação dentro da referência atual. ● Adicionar ● Alterar ● Remover
  25. 25. ### Value ● Monitora todas alterações ● Primeira chama é o estado atual ● Chamadas seguintes são atualizações ● Sempre retorna estrutura interna completa ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { } @Override public void onCancelled(FirebaseError firebaseError) { } });
  26. 26. #### Child Added ● Monitora os filhos ● Usado para listas ● Chamado uma vez para cada filho ref.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { } });
  27. 27. #### Child Changed ● Monitora alteração dos Filhos ● Usado em conjunto com childAdded ● Chamado para alteração dos filhos ou descendentes ref.addChildEventListener(new ChildEventListener() { @Override public void onChildChanged(DataSnapshot snapshot, String previousChildKey) { } });
  28. 28. #### Child Removed ● Monitora remoção dos Filhos ● Usado em conjunto com childAdded e childChanged ● Recebe uma cópia do filho que foi removido ref.addChildEventListener(new ChildEventListener() { @Override public void onChildRemoved(DataSnapshot snapshot) { } });
  29. 29. ## Queries ● Ordenação ● Limites Query query = ref.child("chats").orderByChild("date");
  30. 30. Firedroid https://github.com/brunodles/Firedroid-gdg
  31. 31. 1_ Criar projeto
  32. 32. 1_ Criar projeto
  33. 33. 1_ Criar projeto
  34. 34. 1_ Criar projeto
  35. 35. 1_ Criar projeto
  36. 36. 2_ Importe o Firebase dependencies { compile 'com.firebase:firebase-client-android:2.3.1' } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE-FIREBASE.txt' exclude 'META-INF/NOTICE' } ● Importe usando o gradle ● Adicione para evitar possíveis conflitos
  37. 37. 3_ Permissão de Internet ● Adicione no AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" />
  38. 38. 4_ Inicialize o Firebase ● Crie uma nova classe java chamada Application ● Faça ela herdar de android.app.Application ● Sobrescreva o método onCreate ● Inicialize o Firebase ● Use essa classe como name da tag Application no AndroidManifest.xml
  39. 39. 4_ Inicialize o Firebase public class Application extends android.app.Application { @Override public void onCreate() { super.onCreate(); Firebase.setAndroidContext(this); } } <application android:name=".Application"
  40. 40. 5_ Classe auxiliar ● Essa classe vai ajudar a acessar o Firebase ● Pode evoluir pra um Data Access Object public class FirebaseHelper { public static Firebase get() { return new Firebase("https://firedroid.firebaseio.com/"); } } É possível colocar essa string em outros arquivos, deixando a compilação mais dinâmica.
  41. 41. 6_ Login ● Adicionar ao layout ○ Campos de texto ■Email ■Password ○ Botões ■Sign In ■ Sign UP ■Forgot password
  42. 42. 6_ Login ● Associar os campos no fragment ● Criar ○Click Listener para os botões ○registro de usuário ○login de usuário ○recuperar senha ● remover menu Existe uma lib para fazer essas associações de forma mais elegante.
  43. 43. 7_ Chat ● Montar tela do chat ○ TextView ○EditText ○Button ● Associar widgets ● Iniciar após o Login ● Enviar mensagem
  44. 44. 7_ Chat Firebase firebase = FirebaseHelper.get(); Firebase messageRef = firebase.child("messages").push(); messageRef.child("text").setValue(message.getText().toString());
  45. 45. 7_ Chat ● Exibir todas as mensagems no TextView ● Usando o Value Event Listener Depois vamos mudar isso, para um ListView Iterable<DataSnapshot> children = dataSnapshot.getChildren(); StringBuilder builder = new StringBuilder(); for (DataSnapshot child : children) { builder.append(child.child("text").getValue()); builder.append("n"); } messages.setText(builder.toString());
  46. 46. 8_ Melhorar Login ● Travar tela (Progress dialog) ● Logar usuário depois de registrar ● Guardar dados de login
  47. 47. 9_ Melhorar Chat ● Enviar mensagem direto do teclado ● Limpar texto atual ● Colocar ListView no Layout ● Layout dos itens ● Adapter ● Mover para última messagem
  48. 48. 10_ Melhorar Código ● Organizar classes ● Criar Classe Mensagem ● Helper para referencia de mensagem ● Enviar mensagem usando helper ● Extrair Login Preference
  49. 49. 11_ Libs ● ButterKnife¹ ● SnackBar (DesignCompat)² ¹ Remover “findViewById” e “Click Listeners” compile 'com.jakewharton:butterknife:7.0.1' compile 'com.android.support:design:22.2.1' ² Substituir Toast
  50. 50. Obrigado +BrunoDeLimaS Bruno de Lima @brunodles

×