Apps realtime com Firebase

Apps realtime com Firebase

O que é Firebase? Como fazer? Casos de uso no Smart Canvas.

Dd958da4c68b7d3227b3f1cd92a429a6?s=128

Jean Pimentel

May 18, 2016
Tweet

Transcript

  1. Apps realtime com Firebase

  2. Jean Pimentel Product Engineer na CI&T Desenvolvedor mobile há 2

    anos Leitor de ficção científica Co-organizador do Android Meetup BH e CocoaHeads BH
  3. Firebase

  4. Backend as a Service

  5. Hosting User Authentication Realtime Database

  6. Comunicação em tempo real entrega muito valor ao usuário. Essencial

    hoje em dia!
  7. Realtime Database pronto pra usar

  8. <Insert here an image> AngularJS, Ember, ReactJS, Ionic, Backbone.js JavaScript

    <Insert here an image> Android <Insert here an image> iOS <Insert here an image> Java, Ruby, Python, Go, PHP, C# REST
  9. Baseado principalmente em: - Conexões simultâneas - Quantidade de dados

    armazenados - Quantidade de tráfego Firebase | Custos
  10. Firebase Dados

  11. Seu conhecimento em SQL? Esqueça!

  12. JSON Tree DICAS: Saiba como os dados serão lidos. Aninhe

    dados com moderação. Desnormalize!
  13. JSON Tree LIMITES: Profundidade máxima de 32 nós. Tamanho de

    um filho não pode passar de 10MB
  14. Smart Canvas

  15. Inspire your teams to tear down silos.

  16. Smart Canvas

  17. Smart Canvas | Usos Novos conteúdos Histórico de buscas Contadores

    de Likes, Pins, Bookmarks Presença
  18. Smart Canvas | Usos Novos conteúdos

  19. Smart Canvas | Usos Firebase ref = new Firebase( "https://foo.com/tenants/ciandt/users/<id>/stream/lastUpdate"

    ); ValueEventListener listener = new ValueEventListener() { .. } // onResume ref.addValueEventListener(listener); // onPause ref.removeEventListener(listener);
  20. Smart Canvas | Usos ValueEventListener listener = new ValueEventListener() {

    @Override public void onDataChange(DataSnapshot snapshot) { System.out.println(snapshot.getValue()); } @Override public void onCancelled(FirebaseError firebaseError) { System.out.println(firebaseError.getMessage()); } }
  21. Smart Canvas | Usos Histórico de buscas

  22. Smart Canvas | Usos Firebase ref = new Firebase( "https://foo.com/tenants/ciandt/users/<id>/searches"

    ); ref.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { for (DataSnapshot child: snapshot.getChildren()) { System.out.println(child("query").getValue()); } } });
  23. Smart Canvas | Usos Contadores de Likes, Pins, Bookmarks

  24. Smart Canvas | Usos Firebase ref = new Firebase( "https://foo.com/tenants/ciandt/posts/<id>/statistics"

    ); ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { System.out.println(snapshot.child("likes").getValue()); System.out.println(snapshot.child("bookmarks").getValue()); System.out.println(snapshot.child("pins").getValue()); } }
  25. Smart Canvas | Usos Presença

  26. Smart Canvas | Usos Firebase ref = new Firebase( "https://foo.com/tenants/ciandt/presence/<collection>|<id>"

    ); ChildEventListener listener = new ChildEventListener() { .. } // onResume ref.addChildEventListener(listener); // onPause ref.removeEventListener(listener);
  27. Smart Canvas | Usos ChildEventListener listener = new ChildEventListener() {

    @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { // ... } @Override public void onChildRemoved(DataSnapshot snapshot) { // ... } }
  28. Smart Canvas | Usos // send presence Firebase ref =

    new Firebase( "https://foo.com/tenants/ciandt/presence/<collection>|<id>" ); Map<String, String> info = new HashMap<String, String>(); info.put("avatar", "http://foo.bar/img.jpg"); info.put("name", "Jean Pimentel"); ref.child("jpimentel").setValue(info);
  29. Smart Canvas | Usos // send presence Firebase ref =

    … public class User { private String avatar; private String name; public User() {} public User(String avatar, int name) { .. } public String getAvatar() { return avatar; } public String getName() { return name; } } User user = new User("http://foo.bar/img.jpg", "Jean Pimentel"); ref.child("jpimentel").setValue(user);
  30. Smart Canvas | Usos Outros métodos - setValue() - updateChildren()

    - push() - runTransaction()
  31. Firebase Queries

  32. Firebase | Ordenação - orderByKey() - orderByValue() - orderByChild("<name>") -

    orderByPriority()
  33. Firebase | Ordenação - limitToFirst(n) - limitToLast(n) - startAt(n) -

    endAt(n) - equalTo()
  34. Firebase | Ordenação Query queryRef = ref.orderByChild("age").limitToFirst(5); queryRef.addChildEventListener(new ChildEventListener() {

    // ... }); Query queryRef = ref.orderByValue().limitToLast(3); queryRef.addChildEventListener(new ChildEventListener() { // ... });
  35. Firebase Autenticação

  36. Firebase | Autenticação Login/Senha OAuth (Google, GitHub, Facebook, Twitter) Guest

    Custom - JSON Web Tokens (JWT)
  37. Firebase | Autenticação .authWithPassword("<email>", "<password>", /* handler */) .authWithOAuthToken("<google>", "<oauth-token>",

    /* handler */) .authAnonymously(/* handler */) .authWithCustomToken("<token>", /* handler */)
  38. Firebase | Autenticação Firebase ref = new Firebase("https://foo.firebaseio.com/"); ref.authWithCustomToken(<TOKEN>, new

    Firebase.AuthResultHandler() { @Override public void onAuthenticationError(FirebaseError error) { System.err.println("Login Failed! " + error.getMessage()); } @Override public void onAuthenticated(AuthData authData) { System.out.println("Login Succeeded!"); } });
  39. Firebase Autorização

  40. Firebase | Autorização Linguagem declarativa, que resulta em V ou

    F { "rules": { ".read": true, ".write": false } }
  41. Firebase | Autorização { "rules": { ".write": "false", "tenants": {

    "$tenant": { "presence": { ".read": "auth != null && auth.tenant === $tenant", ".write": "auth != null && auth.tenant === $tenant" }, "$other": { ".read": "true", ".write": "false" } } } } }
  42. Firebase | Autorização { "rules": { ".write": "false", "tenants": {

    "$tenant": { "presence": { ".read": "auth != null && auth.tenant === $tenant", ".write": "auth != null && auth.tenant === $tenant" ".validate": "newData.hasChildren(['avatar', 'name'])" } } } } }
  43. Firebase Backups

  44. Backups Google Cloud Storage ou Amazon S3 Pode ser habilitado

    em alguns planos Não contabiliza a transferência de dados
  45. Backups Google Cloud Storage ou Amazon S3 Pode ser habilitado

    em alguns planos Não contabiliza a transferência de dados REST API Limite de 200MB por vez Contabiliza a transferência de dados
  46. Obrigado!