Aplicações Android Real-Time com Firebase
-
Upload
ygor-cesar -
Category
Technology
-
view
344 -
download
0
Transcript of Aplicações Android Real-Time com Firebase
Firebase e AndroidConstruindo aplicações Android com Firebase
Firebase
Firebase
Firebase
Banco em Tempo Real
Autenticação de Usuário
Host
Firebase
Banco em Tempo Real• NoSQL
• Dados Armazenados em estrutura JSON
• Suporte Offline
• Pushes e Updates em milissegundos
Firebase
• Email e Senha• Provedores OAuth:• Google• Facebook• Twitter• Github• Customizada
• Autenticação Anônima
Autenticação de usuário
Firebase
Host• Facilidade no Deploy
• Auto escalável
• Gratuito(Até 100 conexões)
Iniciando no FirebaseCrie uma conta no Firebase: https://www.firebase.com/log
in
1 Crie seu primeiro App Firebase
2
Configurando AmbienteFile->Project Structure->Cloud
Configurando Ambiente
AndroidManifest.xml
build.gradle
Android Application
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]”);
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>
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
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()
Salvando DadosO código onde criamos o usuário gerou a estrutura abaixo:
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()); }});
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
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); }}
Autenticação•Email e Senha•Anônimo•Google•Facebook
•Twitter•Github•Custom
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);
Bônus
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
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()
CloudinaryBuscando url de imagenscloudinary.url().type("fetch").imageTag(“upload/finn.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
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