Qual melhor maneira de criar um app que funcione offline e sincronize dados com servidor? [fechada] – android mysql delphi
Pergunta:
Estou me aprofundando no mundo Mobile, onde tive o primeiro desafio, que é criar um App Android de cadastro básico, nome, idade, etc. O complicado (pelo menos pra mim) é que tenho que atualizar esses dados salvos no SQLite do Android para uma BD MySQL no servidor.
Estou utilizando a ferramenta RAD Studio XE8.
Alguém teria uma luz de como faço isso? Tenho que habilitar algum serviço por fora, ou deixar um aplicativo Windows rodando para fazer a integração?
O meu objetivo é realizar de uma maneira simples que, ao clicar em um botão sincronizar, o registro seja guardado no BD do servidor, e outro botão para limpar os dados.
Obrigado.
Autor da pergunta Pedro Santos
O método que eu sugiro é o seguinte. Supondo que você possa utilizar uma linguagem de scripts no seu servidor, primeiro carregue os dados do Banco Local na aplicação Delphi (Android).
Para prosseguir, adicione a biblioteca Indy HTTP e a Classes do sistema:
uses Classes, IdHTTP;
Crie as variáveis necessárias:
var
ParamList : TStringList; // Lista para representar o registro do banco
MyRow : TWhatever; // Esta variável hipotética representa o objeto ou array onde você terá o registro do Banco Local
HTTP : TIdHTTP; // Objeto HTTP do Indy
Coloque os dados que devem ser passados ao servidor (único registro de tabela) em um TStringList no formato padrão de URIs:
ParamList.Add('id=' + MyRow.ID);
ParamList.Add('name=' + MyRow.Nome);
ParamList.Add('phone_number=' + MyRow.PhoneNumber);
// Adicione todos os campos da tabela.
Após, você deve criar o objeto HTTP do Indy e realizar o POST para o Script no servidor:
HTTP := TIdHTTP.Create(nil);
try
HTTP.Post('http://ip-ou-nome-do-servidor/pasta/do/script', ParamList);
finally
HTTP.Free;
ParamList.Free;
end;
O exemplo acima enviaria os dados Nome, Sobrenome e ID a um script no servidor (possivelmente em PHP ou outra linguagem que você prefira, conheça ou queira aprender). Este script por sua vez iria realizar as operações sobre o Banco Remoto (Servidor).
Este é claramente apenas um exemplo genérico e ilustrativo. Contém os conceitos base para o método.
Se não tiver conhecimento sobre algum dos termos acima, sugiro que estude:
- HTTP
- POST e GET
- Scripts CGI
Você poderia usar a tecnologia DataSnap REST com uso de objetos em JSON da própria Embarcadero, que o mesmo faz as sincronizações entre Cliente/Servidor tornando o tempo de resposta muito mais rápido e o componente FireDac para fazer conexão com banco de dados para o Mobile Android e MySQL, a tecnologia já está pronta para funcionar em modo offline assim ela não ficaria o tempo todo online, somente quando for fazer uma sincronização. Se você não tem conhecimento sobre essa nova tecnologia sugiro que você dê uma olhada no tutorial que o Adriano Santos fez.
Na verdade, o que é difícil na sua pergunta é mais em relaçao às tantas formas que o Delphi permite fazer, que escolher a melhor depende realmente de cada particularidade.
Por exemplo, no delphi é muito simples conectar com DataSnap e tem um monte de tutoriais no YOUTUBE ensinando a implementar tanto o lado servidor como o cliente.
De uma estudada em JSON que,na minha opinião, é a melhor saída para a parte de envio de informações para o servidor.
Já para recuperar a informação, confie nos DatasetProvider–>ClientDataset
O Firedac também tem uma série de novidades, como por exemplo os componentes ETL, que permitem sincronizar tabelas de bancos de dados diferentes, e um recurso fatástico que talvez seja suficiente para ti: Trabalhar com o banco offline.
Eu recomendo os cursos do DEVMEDIA, especialmente do professor Guinter Pauling, especialista nestes assuntos.
Se voce tiver um servidor REST para consumir, ai o Delphi tem também excelentes controles de conexao, e eu recomendo começar pelo restDebuger, que vem com o delphi.



