Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Firebase

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

  • Login to see the comments

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

×