Nos últimos dias, exploramos como criar um aplicativo simples para Android e iOS usando NativeScript, Angular e Couchbase. Primeiro, vimos como usar o Couchbase para operações básicas de valor-chave e então vimos como consultar o Couchbase como um banco de dados de documentos. O capítulo final é adicionar suporte de replicação ao nosso aplicativo NativeScript usando o Couchbase Sync Gateway.

Vamos expandir os dois exemplos anteriores para sincronizar dados entre plataformas e dispositivos usando o Couchbase Sync Gateway, NativeScript e Angular. Veja a seguinte imagem animada, por exemplo:

Couchbase Sync with NativeScript and Angular

Quando um novo perfil é adicionado ao dispositivo iOS, ele é sincronizado com o dispositivo Android e, da mesma forma, na direção oposta. Isso é possível com muito pouco código.

Os requisitos

Os requisitos entre este exemplo e os dois anteriores mudaram um pouco. Para ter sucesso, você precisará do seguinte:

O NativeScript, o Angular e o plug-in do Couchbase Lite podem ser obtidos por meio da CLI do NativeScript. Não sincronizaremos nossos dados com o Couchbase Server neste exemplo, mas podemos fazer isso facilmente com poucas alterações.

Continuando de onde paramos

Para ter sucesso com este tutorial, você precisará ter visto Parte 2 que tem sua própria dependência de ter visualizado Parte 1. A maior parte do código desses guias anteriores pode ser copiada e colada em um projeto.

Antes de continuar, você deverá ter um aplicativo NativeScript funcional de duas páginas com uma caixa de diálogo modal. Os dados desse aplicativo são salvos em Couchbase e consultados usando exibições do MapReduce.

Criação de um serviço Angular para o Couchbase

Como a replicação de dados estará envolvida, precisamos nos certificar de que temos apenas uma única instância do Couchbase em execução no nosso aplicativo. No exemplo anterior, criamos uma nova instância por página. Não podemos fazer isso com a replicação porque podemos acabar replicando várias vezes, o que é ineficiente.

Para criar uma instância singleton do Couchbase, devemos criar um serviço Angular. Crie um arquivo em seu projeto em app/couchbase.service.ts e inclua o seguinte código TypeScript:

Esse serviço poderá ser injetado em todas as páginas. Uma única instância do Couchbase será armazenada no diretório banco de dados e as informações sobre os replicadores push e pull serão armazenadas em suas respectivas variáveis.

Dentro do construtor temos o seguinte:

Antes de criar uma nova instância do Couchbase, verificamos se já não temos uma. Caso contrário, abrimos o banco de dados e criamos uma visualização MapReduce, que não é nada que já não tenhamos visto nos exemplos anteriores.

Quando chegar a hora de obter essa instância, podemos retorná-la por meio do getDatabase função. Isso nos leva à replicação de dados.

Para este exemplo, faremos uma sincronização bidirecional com uma instância do Sync Gateway. Temos a opção de sincronizar uma vez ou continuamente enquanto o aplicativo estiver aberto. Quando quisermos interromper a replicação, podemos usar a opção stopSync vista abaixo:

Como esse será um serviço compartilhado, ele precisa ser injetado no @NgModule bloco. Abra a seção app/app.module.ts e inclua o seguinte TypeScript:

O exemplo acima é o que vimos anteriormente, mas desta vez importamos o CouchbaseService e o injetou no provedores matriz do @NgModule bloco.

Agora, cada uma de nossas páginas pode ser atualizada para usar o novo serviço do Angular.

Atualização das páginas do aplicativo NativeScript

Temos duas páginas que precisam ser atualizadas para refletir nosso serviço do Angular. Abra a seção app/components/profile-list/profile-list.ts e remova o código do Couchbase encontrado no arquivo construtor método. Em vez disso, o arquivo deve se parecer com o seguinte:

Observe no exemplo acima que importamos CouchbaseService e o injetou no construtor juntamente com o método NgZone. Em vez de obter o banco de dados e criar uma exibição, precisamos apenas chamar o comando getDatabase função do nosso serviço.

Até agora, nada de ruim, certo?

Agora vamos abrir o arquivo app/components/profile/profile.ts arquivo. Nesse arquivo, inclua o seguinte código:

Com exceção de NgZoneNa página anterior, fizemos a mesma alteração no Couchbase que fizemos na página anterior. Veremos o que NgZone em breve.

Nesse ponto, podemos prosseguir com a configuração do Sync Gateway para preparar a sincronização de dados.

Criação da configuração de replicação do Sync Gateway

Você já deve ter feito o download de Gateway de sincronização do Couchbase até agora. Com ele instalado, precisamos criar um arquivo de configuração para o nosso projeto. A seguir, um exemplo de uma configuração muito simples:

A configuração acima pode ser salva em um arquivo chamado sync-gateway-config.json ou similar. Essencialmente, ele usa um armazenamento na memória chamado morsa: com um nome de banco de dados de exemplo. Não há permissões de leitura ou gravação em nosso exemplo. Todos os dados serão sincronizados em todas as plataformas e dispositivos.

Conectar o Sync Gateway ao Couchbase Server é tão simples quanto alterar morsa: para o host de sua instância do Couchbase Server.

Para executar o Sync Gateway a partir da linha de comando, você deve executar:

Ele criará um painel que pode ser acessado em http://localhost:4985/_admin/. No nível do aplicativo, ele usará a porta 4984.

Incluindo a lógica de sincronização para Couchbase e NativeScript

Tudo está completo na preparação da replicação de dados em nosso aplicativo. A replicação de dados nos permitirá usar ouvintes de alterações para atualizar nossa interface do usuário conforme necessário.

Abra o arquivo app/components/profile-list/profile-list.ts e inclua o seguinte no ngOnInit método:

Quando o ngOnInit iniciamos a sincronização com nosso Sync Gateway em execução local. Sinta-se à vontade para definir o nome do host para o que for mais adequado para você. Depois de iniciarmos a sincronização, configuramos nosso ouvinte de alterações para enviar as alterações para o nosso perfis array. Como se trata de um ouvinte, precisamos usar NgZone caso contrário, ele não será refletido na interface do usuário.

O exemplo acima é apenas um exemplo simples em que adicionamos todas as alterações. Na realidade, você precisará verificar se os dados foram alterados, criados ou excluídos. Todos os cenários viriam por meio da função addDatabaseChangeListener.

Quando o aplicativo for interrompido, queremos interromper a sincronização de forma graciosa. Na seção ngOnDestroy inclua o seguinte:

A replicação para o Couchbase Sync Gateway será interrompida quando o método Angular acima for chamado.

Conclusão

Neste tutorial, você viu como adicionar suporte de sincronização ao seu aplicativo móvel Angular NativeScript. Essa foi a terceira parte de três da série de tutoriais. Anteriormente, vimos como fazer operações básicas do Couchbase para salvar e carregar dados bem como consulta de documentos. Data no desenvolvimento de aplicativos móveis usando estruturas como NativeScript e o Angular devem ser fáceis. Ser capaz de armazenar objetos JavaScript e dados JSON em um banco de dados NoSQL e sincronizá-los é um grande fardo para o desenvolvedor.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

4 Comentários

  1. Obrigado por essa série de tutoriais, ela é muito boa. Consegui fazer com que ela funcionasse entre um dispositivo Android e iOS e é muito simples. Neste exemplo, eu estava basicamente usando o Sync Gateway no meu Mac como um intermediário com o qual os outros dispositivos da rede estão sincronizando.

    Gostaria de usar esse recurso de sincronização para um aplicativo móvel que terá vários dispositivos na mesma rede e gostaria que ele funcionasse no modo off-line, portanto, será necessário ter uma função separada para várias redes diferentes. Existe uma maneira de configurar um Sync Gateway apenas entre dispositivos móveis em uma rede sem precisar configurá-lo em um computador na rede? Ou precisarei fazer com que cada rede instale e configure seu próprio Sync Gateway com os arquivos de configuração do sync-gateway que eu fornecer?

    1. Há suporte a P2P nas APIs subjacentes do Android e do iOS, mas ele nunca foi adicionado ao plug-in do NativeScript.

      O Couchbase Lite 2.0 será lançado em breve, portanto, as coisas estarão mudando. Se você puder, leia sobre o assunto e aguarde um pouco.

  2. Obrigado pela resposta rápida, Nic. Você sabe se algum desses novos recursos de P2P será incorporado ao plug-in do NativeScript?

  3. Olá Nic, tenho uma pergunta: estou tentando armazenar um documento usando o couchbase lite com nativescript em um projeto que estou criando, mas, de alguma forma, minha lógica não está funcionando. Gostaria de saber se você poderia dar uma olhada no meu código e me informar se estou fazendo algo errado. Este é um link para meu código: https://i.gyazo.com/99914e2c1c54b37ea7486ff050bc6dd0.pngObrigado desde já.

Deixar uma resposta