O documento discute várias técnicas para sincronizar dados entre aplicativos móveis e servidores, incluindo uso do SyncAdapter do Android para sincronização assíncrona eficiente de recursos, notificação por mudança de dados usando Google Cloud Messaging e geração inteligente de dados no servidor para evitar tráfego desnecessário.
16. Sincronização: Como resolver?
Conta
• Necessidade de um tipo de conta
• Terceiro
• Própria
• Adicionar uma conta desse tipo
• Autenticação na sincronização
• Configurações
24. Mas e se eu quiser que o
servidor informe quando
um dado foi modificado?
25. Sincronização: Como resolver?
Google Cloud Messaging
• Serviço mantido pelo Google
• Grátis
• Limite do tamanho da requisição
A
• Específico para notificações
26. Sincronização: Como resolver?
Google Cloud Messaging
Registrar o Dispositivo / Aplicativo
em um projeto específico.
Aplicativo
Google Cloud
Messaging
A
Registro ID
Registro ID
Servidor
27. Sincronização: Como resolver?
Google Cloud Messaging
Entrega da mensagem
quando estiver
disponível.
Aplicativo
Google Cloud
Messaging
Requisita que uma
mensagem seja enviada.
A
Servidor
Aocontrário de polling, o SyncAdapternãoé um conceito, mas sim um framework fornecidopelaplataforma Android.Suaprinicipalfunçãoécoordenar as sincronizações de forma eficiente, umavezque tem acessoaosrecursos da plataforma e aoseusestados com maioracurácia.Éimportantedestacarque o SyncAdapteréumaimplementação de polling, mas com melhorescondiçõesparagerenciar as sincronizaçõesumavezqueé um framework da própriaplataforma.Porexemplo, podemosverificarnaimplementação do aplicativo se o dispositivoestáounãoconectado, mas temosdificuldadesem saber a qualidadedessaconexão.Mas eunãopoderiafazerminhaimplementaçãodessesaspectos?Atépoderia, masaideiaévocênãoprecisar se preocupar com essasquestões, umavezque a plataformaconseguedesempenhar com maioreficiência.A partir do momentoque a plataformaconseguedescobririnformaçõesrelativasaodispositivo e aoambiente de execução, o consumo dos recursoséotimizado, o queconsequentementeaumenta a probabilidade de sucesso.Além disso, o fato de sercentralizado entre osaplicativosfornecemaiorsegurança de quenenhumaplicativoiráinterferir no desempenho de outro com relação a essasverificações
O framework exige que cada SyncAdapter tenha um tipo de conta, que pode ser de terceiros como a própria conta do Google ou do próprio aplicativo. E após definir esse tipo, é preciso adicionar uma conta desse tipo através por exemplo do AccountManager.Essa conta pode ser usada durante a sincronização para realizar a autenticação no servidor antes de iniciar a transferência de dados.
Na implementação doSyncAdaptera lógica de transferência de dados é encapsulada em uma classe, que normalmente irá realizar operações como se conectar ao servidor, podendo fazer uso da conta para autenticação, obter ou enviar dados, resolver conflitos nos dados e fazer a limpeza de cache e outros arquivos temporários.Para que o framework consiga executar o código de sincronização de seu aplicativo é necessário criar um serviço, o qual será bindado e retornará uma instância singleton da classe encapsuladora.Durante a transferência de dados, muitas informações podem ser obtidas e usadas para construir uma resposta que será enviada ao framework, o qual usará para verificar o resultado final da sincronização e verificar se ela deve ser reagendada dependendo das falhas encontradas.Além da necessidade da criação de xmls com configurações e atualização do manifesto para que o SyncAdapter entenda através de quais componentes ele poderá se comunicar com seu aplicativo.
É comum que muitos aplicativos que gerem dados usem uma estrutura de armazenamento com o SQLite e a implementação de um ContentProvider para comunicação entre o aplicativo e o banco. Além disso a comunicação entre o SyncAdapter e o ContentProvider pode ser feita através de um Content Resolver, o qual é usado para definir alguns comportamentos de sincronização e também para notificar o SyncAdapter que dados locais foram alterados e precisam ser sincronizados.
Hásituacõesque o SyncAdapter dado umasituação dosrecursosiráreduzir as sincronizaçõesfeitas.No entanto, existemsituaçõesondeos dados sãomaisimportantesqueosrecusos do dispositivo, comoporexemploumaconsulta a dados da bolsa de valores.
É comum que muitos aplicativos que gerem dados usem uma estrutura de armazenamento com o SQLite e a implementação de um ContentProvider para comunicação entre o aplicativo e o banco. Além disso a comunicação entre o SyncAdapter e o ContentProvider pode ser feita através de um Content Resolver, o qual é usado para definir alguns comportamentos de sincronização e também para notificar o SyncAdapter que dados locais foram alterados e precisam ser sincronizados.
Éimportanteconsiderar o servidorpara a realização da sincronização. Porduasequipesdistintasquenão se conversamparadesenvolvimento da sincronização, mesmoutilizandotodososconceitosquevimospodecriarumasincronizaçãonãoefeciente de diversasformas.