Buscar

aula7 (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

7ºAula
Implementação II
Objetivos de aprendizagem
Ao término desta aula, vocês serão capazes de:
• criar um módulo para armazenamento em banco de dados local;
• criar um módulo para armazenamento em banco de dados remoto.
Olá, 
Começaremos a Aula 07 dando continuidade disciplina 
Programação para Dispositivos Móveis. Na aula anterior foi 
desenvolvida uma aplicação que cria uma lista de convidados, 
essas informações são salvas em um banco de dados local.
Nesta aula, o código da aula anterior é refatorado para 
retirar de dentro dele os mecanismos de armazenamento local, 
criando um módulo para esse fim. Além disso, o módulo foi 
preparado para também possibilitar o armazenamento em um 
banco de dados na nuvem.
Leia atentamente esta aula e se tiver alguma dúvida, use os 
recursos que estão na sua área do aluno.
Bons estudos!
40Programação para Dispositivos Móveis
Seções de estudo
1– Armazenamento Local
2– Armazenamento Remoto
1- Armazenamento Local
Na aula anterior foi construída uma aplicação que através 
de uma biblioteca importada dentro do código JavaScript 
consiga Ler, Incluir e Excluir dados em um ‘banco de 
dados’ de armazenamento local. Quando pensamos em uma 
aplicação robusta, aplicar o CRUD (Create, Read, Update e 
Delete) garante que dados possam ser manipulados em todos 
os seus aspectos.
Mas é importante criar uma abstração entre a lógica 
da aplicação a lógica de armazenamento e manipulação dos 
dados. No exemplo da aula anterior, todas as chamadas ao 
banco de dados foram realizadas diretamente no código 
principal.
Essa metodologia não permite que alterações sejam 
feitas, por exemplo, se fosse preciso trocar o armazenamento 
local para remoto, todas as chamadas ao banco de dados 
deveriam ser atualizadas.
Criar então um módulo que separa a lógica de 
manipulação do banco de dados é uma saída correta para esse 
problema. O arquivo Database.js deve inicialmente importar 
o módulo async-storage.
 import AsyncStorage from ‘@react-
native-community/async-storage’;
Para que execute todas as operações do CRUD serão 
criadas e exportadas 4 funções: saveItem (Create e Update), 
getItem e getItems (Read) e deleteItem (Delete).
A primeira função é a getItem que irá pegar todos os 
itens salvos. Ela recebe 1 parâmetro que é a chave do banco 
de dados.
function getItems(database) {
 return AsyncStorage.
getItem(database)
 .then(response => {
 if (response)
 return Promise.
resolve(JSON.parse(response));
 else
 return Promise.
resolve([]);
 })
}
A segunda função é a getItem que vai retornar somente 
um item do banco de dados. Ela recebe 2 parâmetros, o 
primeiro é o banco de dados e o segundo é o id do item a ser 
retornado.
async function getItem(database, id)
{
 const savedItems = await 
getItems(database);
 return savedItems.fi nd(item => 
item.id === id);
}
A segunda função é a saveItem que irá salvar um novo 
item e atualizar um item já existente. Ela receberá 3 parâmetros, 
o primeiro é a chave do banco de dados, o segundo é o item 
a ser inserido, e o terceiro é o id que será setado quando uma 
atualização deve ser feita.
async function saveItem(database, 
item, id) {
 item.id = id ? id : new Date().
getTime()
 const savedItems = await 
getItems(database);
 if (id) {
 const index = await savedItems.
fi ndIndex(item => item.id === id);
 savedItems[index] = item;
 }
 else
 savedItems.push(item);
 return AsyncStorage.
setItem(database, JSON.
stringify(savedItems));
}
A última função é a deleteItem que irá remover um item. 
Ela receberá 2 parâmetros, o primeiro é a chave do banco de 
dados, o segundo é o id do item que será removido.
async function deleteItem(database, 
id){
 let savedItems = await 
getItems(database);
 const index = await savedItems.
fi ndIndex(item => item.id === id);
 savedItems.splice(index, 1);
return AsyncStorage.
setItem(database, JSON.
stringify(savedItems));
}
Por fi m, as 4 funções devem ser exportadas para que 
possam ser acessadas externamente. 
module.exports = {
 saveItem,
 getItems,
 getItem,
 deleteItem
}
O código da Aula anterior para utilizar esse módulo 
deve ser refatorado, substituindo as chamadas às funções do 
módulo async-storage pelas funções do módulo Database.js. 
No arquivo AppList.js primeiro deve-se importar o módulo.
41
 import Database from ‘../modules/
Database’;
E dentro da chamada de useEffect, que realizava a 
leitura diretamente do banco deve-se modifi car para a função 
getItems do Database.
useEffect(() => {
 Database.getItems(‘items’).
then(items => setNomes(items));
 }, [route]);
Já no arquivo AppForm.js a função que manipula 
o onPress do botão deve ser atualizado com a função que 
saveItem.
async function handleButtonPress(){ 
 const listItem = {nome:nome, 
sobrenome:sobrenome};
 await Database.
saveItem(‘items’,listItem);
 navigation.navigate(“AppList”, 
listItem);
 }
E no arquivo AppItem.js a função que ocorre após o 
usuário clicar em sim no Alert deve ser alterada como segue.
text: “Sim”, onPress: async () => {
 await Database.
deleteItem(‘items’,props.id);
 props.navigation.
navigate(“AppList”, {id: 
props.id}); 
}
Quando comparados, os códigos refatorados, deve-se 
perceber uma diminuição na quantidade de linhas repetidas, 
o que por si só já é uma grande vantagem.
2- Armazenamento Remoto
Até o momento só foram desenvolvidas aplicações, 
cujos dados fi cam armazenados no próprio dispositivo 
móvel, mas se for necessária a utilização de um banco de 
dados compartilhado, cujos dados podem ser acessados por 
mais de uma pessoa, a aplicação deve estar preparada para a 
conexão com um banco de dados remotos.
Várias opções podem ser utilizadas para garantir o acesso 
remoto a dados, nessa seção veremos como utilizar o Firebase 
Realtime Database.
O Firebase Realtime Database é disponibilizado pela 
google e permite o armazenamento de dados em um banco 
na nuvem do tipo NoSQL. Os dados são armazenados como 
JSON e disponíveis em tempo real com todos os clientes que 
estejam conectados. Com ele é possível ainda criar aplicações 
e diferentes plataformas.
Por ser NoSQL tem otimizações e funcionalidades 
diferentes dos bancos de dados relacionais tradicionais. 
Garantindo escalabilidade nos projetos que forem necessários 
de utilizá-lo.
Para conseguir acesso a um banco de dados no Firebase 
é preciso acessar o console (https://console.fi rebase.google.
com/) e criar um projeto clicando em adicionar um projeto 
Figura 1.
 
Figura 1 – Console Firebase. Fonte: Firebase, 2020.
Para criar seu projeto você deve seguir o passo a passo. 
Primeiro deve escolher o nome para o projeto (Figura 2), em 
seguida ativar ou não o google Analytics para seu projeto 
(Figura 3). Ao fi nal do processo seu projeto já estará concluído 
(Figura 4).
Figura 2 – Nome do Projeto. Fonte: Firebase,2020.
Figura 3 – Google Analytics. Fonte: Firebase,2020.
Programação para Dispositivos Móveis
Figura 4 – Projeto Criado. Fonte: Firebase,2020.
Com o projeto criado, na lateral, acesse Realtime Database e depois clique em Criar banco de dados (Figura 5). Siga os 
passos para criação do banco de dados primeiro selecionando o local onde ele será alocado (Figura 6) e depois a regra de acesso 
de teste, que libera o acesso ao banco durante 30 dias (Figura 7).
Figura 5 – Criar Banco de Dados. Fonte: Firebase,2020.
Figura 6 – Localização do Banco de Dados. Fonte: Firebase,2020.
Figura 7 – Regras de Segurança. Fonte: Firebase,2020.
Após a criação do banco de dados, no menu lateral, acessando a Visão geral do projeto é preciso criar uma aplicação 
(Figura 8). Selecionando uma app da Web será necessário inserir um nome para esse app (Figura 9). Concluída a criação do app 
copie o conteúdo da variável fi rebaseConfi g que contém as confi gurações para acesso ao Firebase Realtime Database (Figura 
10).
Figura 8 – Criaruma aplicação. Fonte: Firebase,2020.
Programação para Dispositivos Móveis
Figura 9 – Registrar App. Fonte: Firebase, 2020.
Figura 10 – Confi gurações do Firebase. Fonte: Firebase,2020.
45
Será criado então um novo arquivo Database.js que 
manterá as mesmas funções que foram defi nidas para 
o armazenamento local, o que vai garantir que não seja 
necessário alterar nada no código principal já que o Database.
js e DatabaseLocal.js funcionam da mesma maneira.
Antes de iniciar a codifi cação é preciso instalar o módulo 
referente ao fi rebase.
npm install fi rebase --save
Para que ele funcione corretamente esse módulo deve 
ser importado no começo do arquivo. Seguido da variável 
copiada da Figura 10.
import * as fi rebase from ‘fi rebase’;
var fi rebaseConfi g = {
 apiKey: “*********************”,
 authDomain: “*********************”,
 databaseURL: 
“*********************”,
 projectId: “*********************”,
 storageBucket: 
“*********************”,
 messagingSenderId: 
“*********************”,
 appId: “*********************”
};
Sempre que uma incursão for feita no banco de dados 
a função initialize é chamada para verifi car se o app já foi 
inicializado com as confi gurações que foram defi nidas. E caso 
ele ainda não tenha sido ele é então inicializado.
function initialize() {
 if (!fi rebase.apps.length) {
 fi rebase.
initializeApp(fi rebaseConfi g);
 }
}
As funções getItems, saveItem e deleteItem devem ser 
alteradas para utilizar as funções de manipulação do Firebase 
Realtime Database.
function getItems(database) {
 initialize();
 return fi rebase.database().
ref(database + ‘/’).once(‘value’).
then((snapshot) => {
 if (snapshot.val()) {
 return Promise.
resolve(snapshot.val());
 } else {
 return Promise.
resolve([]);
 }
 });
}
async function saveItem(database, 
item, id = null) {
 item.id = id ? id : new Date().
getTime()
 const savedItems = await 
getItems(database);
 if (id) {
 const index = await savedItems.
fi ndIndex(item => item.id === id);
 savedItems[index] = item;
 }
 else
 savedItems.push(item);
 initialize();
 return fi rebase.database().
ref(database + ‘/’).set(savedItems);
}
async function deleteItem(database, 
id) {
 let savedItems = await 
getItems(database);
 const index = await savedItems.
fi ndIndex(item => item.id === id);
 savedItems.splice(index, 1);
 initialize();
 return fi rebase.database().
ref(database + ‘/’).set(savedItems);
}
Tanto a chamada às funções quanto o seu retorno é 
o mesmo que foi projetado para o armazenamento local, 
dessa forma não é preciso alterar mais nada para que as 
informações que forem inseridas na lista pelo aplicativo já 
estejam disponibilizadas no banco de dados.
Para conferir se os dados estão sendo armazenados 
corretamente basta abrir o console do Firebase no Realtime 
Database e verifi car se o que está sendo inserido no aplicativo 
também está sendo salvo no banco de dados (Figura 11).
Figura 11 – Banco de dados com dados. Fonte: Firebase,2020.
46Programação para Dispositivos Móveis
Chegamos ao fi nal da sétima aula. Vamos 
recordar?
Retomando a aula
1– Armazenamento Local
Na primeira seção foi criado um módulo que retira do 
código principal toda a funcionalidade de acesso ao banco de 
dados local.
2– Armazenamento Remoto
Na seção seguinte, o módulo foi refatorado para que o 
armazenamento seja remoto utilizando o Firebase Realtime 
Database.
DUARTE, L. In: Tutorial CRUD em app Android e 
iOS com React Native, 2020. Disponível em: https://www.
luiztools.com.br/post/tutorial-crud-em-app-android-e-ios-
com-react-native/. Acesso em: 24 jun. 2020.
MARCU, F. In: How to Build a React Native App and 
Integrate It with Firebase, 2020. Disponível em: https://
www.freecodecamp.org/news/react-native-firebase-
tutorial/. Acesso em: 25 jun. 2020.
RUPARELIYA, R. In: Firebase Realtime Database 
With React Native, 2018. Disponível em: https://medium.
com/mindorks/firebase-realtime-database-with-react-
native-5f357c6ee13b. Acesso em: 25 jun. 2020.
FIREBASE. In: Firebase Realtime Database, 2020. 
Disponível em: https://console.firebase.google.com/. 
Acesso em: 25 jun. 2020.
Vale a pena acessar
PINHO, D. M.; ESCUDELARIO, B. React Native 
Desenvolvimento de aplicativos mobile com React. Editora Casa do 
Código, São Paulo, 2020.
EISENMAN, B. Learning React Native: Building Native 
Mobile Apps with JavaScript. O’Reilly Media, 2015.
BODUCH, A. React and React Native. Packt Publishing, 
2017.
LEBENSOLD, J. React Native Cookbook: Bringing the 
Web to Native Platforms. O’Reilly Media, 2018.
Vale a pena ler
Vale a pena
Minhas anotações

Continue navegando