aplicações android real-time com firebase
TRANSCRIPT
![Page 1: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/1.jpg)
Firebase e AndroidConstruindo aplicações Android com Firebase
![Page 2: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/2.jpg)
Firebase
![Page 3: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/3.jpg)
Firebase
![Page 4: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/4.jpg)
Firebase
Banco em Tempo Real
Autenticação de Usuário
Host
![Page 5: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/5.jpg)
Firebase
Banco em Tempo Real• NoSQL
• Dados Armazenados em estrutura JSON
• Suporte Offline
• Pushes e Updates em milissegundos
![Page 6: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/6.jpg)
Firebase
• Email e Senha• Provedores OAuth:• Google• Facebook• Twitter• Github• Customizada
• Autenticação Anônima
Autenticação de usuário
![Page 7: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/7.jpg)
Firebase
Host• Facilidade no Deploy
• Auto escalável
• Gratuito(Até 100 conexões)
![Page 8: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/8.jpg)
Iniciando no FirebaseCrie uma conta no Firebase: https://www.firebase.com/log
in
1 Crie seu primeiro App Firebase
2
![Page 9: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/9.jpg)
Configurando AmbienteFile->Project Structure->Cloud
![Page 10: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/10.jpg)
Configurando Ambiente
AndroidManifest.xml
build.gradle
Android Application
![Page 11: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/11.jpg)
Referência Firebase
Firebase refUsers = new Firebase(”https://meuprimeiroapp.firebaseio.com/users/”);
refUsers.child(”[email protected]”);
Referência(”https://meuprimeiroapp.firebaseio.com/users/[email protected]”);
![Page 12: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/12.jpg)
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>
![Page 13: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/13.jpg)
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
![Page 14: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/14.jpg)
Salvando Dadosprivate 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()
![Page 15: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/15.jpg)
Salvando DadosO código onde criamos o usuário gerou a estrutura abaixo:
![Page 16: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/16.jpg)
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()); }});
![Page 17: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/17.jpg)
Buscando e monitorando Dados
•Child Added – É disparado toda vez que é adicionado algum objeto no paiFirebase refUsers = new Firebase("https://URL-FIREBASE-APP/users/");mRefUsers.keepSynced(true);refUsers.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnapshot != null && dataSnapshot.getValue() != null) { Usuario usuario = dataSnapshot.getValue(Usuario.class); } }
• Ao adicionar o listener addChildEventListener é necessário implementar os métodos onChildAdded(), onChildChanged(), onChildRemoved() e onChildMoved() esse listener é usado geralmente para obter uma lista de itens no Firebase
![Page 18: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/18.jpg)
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); }}
![Page 19: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/19.jpg)
Autenticação•Email e Senha•Anônimo•Google•Facebook
•Twitter•Github•Custom
![Page 20: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/20.jpg)
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);
![Page 21: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/21.jpg)
Bônus
![Page 22: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/22.jpg)
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
![Page 23: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/23.jpg)
Cloudinary
Configurandocompile 'com.cloudinary:cloudinary-android:1.4.1'
Cloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);cloudinary.uploader().upload(inputStream, Collections.emptyMap());
Upload com parametrosCloudinary cloudinary = new Cloudinary(Constants.CLOUDINARY_URL);cloudinary.uploader().upload(inputStream,
ObjectUtils.asMap("transformation",new Transformation().width(800).height(600).crop("limit")));
Realizando upload()
![Page 24: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/24.jpg)
CloudinaryBuscando url de imagenscloudinary.url().type("fetch").imageTag(“upload/finn.jpg");
![Page 25: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/25.jpg)
CloudinaryBuscando url de imagens utilizando parametroscloudinary.url().transformation(new Transformation().gravity("face") .radius(100).width(300).height(300).crop("crop")) .imageTag(“upload/finn.png");
http://URL_CLOUDINARY/upload/c_crop,g_face,r_max,w_300,h_300/finn.png
![Page 26: Aplicações Android Real-Time com Firebase](https://reader035.vdocuments.site/reader035/viewer/2022062522/58707fd71a28ab57368b6195/html5/thumbnails/26.jpg)
Links
• JamDroidFirechat GitHub: github.com/ygorcesar/JamDroidFireChat• Google Play: Link App na Google Play
• Firebase: https://www.firebase.com
• Firebase Docs: https://www.firebase.com/docs
• Cloudinary: http://cloudinary.com
• Cloudinary Github: Link Github Cloudinary