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

Apps realtime com Firebase

Apps realtime com Firebase

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

Jean Pimentel

May 18, 2016
Tweet

More Decks by Jean Pimentel

Other Decks in Technology

Transcript

  1. 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
  2. <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
  3. Baseado principalmente em: - Conexões simultâneas - Quantidade de dados

    armazenados - Quantidade de tráfego Firebase | Custos
  4. JSON Tree DICAS: Saiba como os dados serão lidos. Aninhe

    dados com moderação. Desnormalize!
  5. 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);
  6. 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()); } }
  7. 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()); } } });
  8. 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()); } }
  9. 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);
  10. Smart Canvas | Usos ChildEventListener listener = new ChildEventListener() {

    @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { // ... } @Override public void onChildRemoved(DataSnapshot snapshot) { // ... } }
  11. 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);
  12. 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);
  13. Firebase | Ordenação Query queryRef = ref.orderByChild("age").limitToFirst(5); queryRef.addChildEventListener(new ChildEventListener() {

    // ... }); Query queryRef = ref.orderByValue().limitToLast(3); queryRef.addChildEventListener(new ChildEventListener() { // ... });
  14. Firebase | Autenticação .authWithPassword("<email>", "<password>", /* handler */) .authWithOAuthToken("<google>", "<oauth-token>",

    /* handler */) .authAnonymously(/* handler */) .authWithCustomToken("<token>", /* handler */)
  15. 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!"); } });
  16. Firebase | Autorização Linguagem declarativa, que resulta em V ou

    F { "rules": { ".read": true, ".write": false } }
  17. 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" } } } } }
  18. 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'])" } } } } }
  19. Backups Google Cloud Storage ou Amazon S3 Pode ser habilitado

    em alguns planos Não contabiliza a transferência de dados
  20. 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