NSProgress é um objeto no Foundation que representa a conclusão de algum trabalho. Esse trabalho pode ser o download de um arquivo, a instalação de um aplicativo ou algo que seu próprio aplicativo esteja fazendo.

O NSProgress existe para permitir que você informe facilmente o progresso do seu aplicativo em vários componentes, tanto para a interface do usuário quanto para o sistema. Com o Couchbase Mobile, os dados são trocados por meio do início de replicações e, com elas, vêm os eventos de alteração que podem informá-lo sobre o progresso.

Neste tutorial, você importará dados da API do Google Places para o Sync Gateway e os replicará em um aplicativo iOS.

> https://developers.google.com/places/

Ao longo do caminho, você aprenderá a:

  • Use a API REST do Sync Gateway Admin para importar dados de uma fonte externa.
  • Configure uma replicação pull com o SDK do iOS.
  • Use as notificações de alteração de replicação para exibir uma barra de progresso na interface do usuário.

Vamos começar!

Primeiros passos

Para usar a API do Google Places neste tutorial, primeiro você criará um novo projeto no Google Developer Console e, em seguida, gerará uma chave de API do servidor.

Abra o Google Developer Console e faça login em sua conta:

https://console.developers.google.com

Crie um novo projeto chamado Explorador de cidades:


Quando o novo projeto aparecer na lista, clique nele e navegue até APIs e autenticação > APIs na gaveta de navegação esquerda. Habilite o Serviço da Web da API do Google Places.

Depois de ativado, vá para a seção Credenciais na gaveta de navegação esquerda, crie uma nova chave (chave do servidor) e copie a chave da API, pois você precisará dela ao longo deste tutorial.

Na próxima seção, você usará algumas bibliotecas e a API REST do administrador para sincronizar os dados do Places com o Sync Gateway.

Gateway de sincronização

Faça o download do Sync Gateway e descompacte o arquivo:

> http://www.couchbase.com/nosql-databases/downloads#Couchbase\_Mobile

Você pode encontrar o binário do Sync Gateway no diretório caixa e exemplos de arquivos de configuração na pasta exemplos pasta. Copie o basic-walrus-bucket.json na raiz do seu projeto:

Inicie o Sync Gateway:

Abra o Admin Dashboard para monitorar os documentos que foram salvos no Sync Gateway.

http://localhost:4985/_admin/

Na próxima seção, você escreverá um pequeno aplicativo NodeJS com os módulos RxJS e Request para importar os dados do Places para o Sync Gateway.

API do Places → Gateway de sincronização

Antes de começar a criar scripts para o servidor de aplicativos, verifique se sua chave de API está funcionando corretamente. Abra o seguinte URL no navegador e você verá a resposta JSON.

> https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants+in+London&key=API_KEY

OBSERVAÇÃO: Não se esqueça de adicionar sua chave de API no URL.

Para criar o servidor de aplicativos que importará os dados da API do Places para o Sync Gateway, você usará RxJS e Solicitação. O código que lida com mais de um evento ou computação assíncrona se complica rapidamente. O RxJS faz esses cálculos cidadãos de primeira classe e fornece um modelo que permite APIs legíveis e compostas para lidar com esses cálculos assíncronos. O módulo Request é a biblioteca de fato para tornar as solicitações http no NodeJS mais simples do que nunca. Vá em frente e instale as dependências:

Cópia requestRx.js do Repositório do GitHub na pasta do seu projeto. Estamos simplesmente envolvendo a API Request em construções RxJS (flatMap, filter, subscribe...). Por exemplo, em vez de usar request.getvocê usará requestRx.get.

Crie um novo arquivo chamado sync.js, exigem que o requestRx e Rx módulos. Defina algumas constantes:

OBSERVAÇÃO: Você usará a sintaxe do JavaScript ES 6 (mais especificamente a interpolação de strings e as funções de seta), o que tornará seu programa mais curto e mais legível.

Em seguida, use o requestRx para seguir a cadeia de solicitações descrita no diagrama.

Se estiver se perguntando como usar extensões reativas, recomendo enfaticamente que siga este tutorial. Levará algumas horas para ser concluído, mas você sairá dele com uma compreensão muito clara das extensões reativas.

Isso pode ser muito difícil de entender, mas a melhor coisa a fazer é experimentar os diferentes operadores (flatMap, zip, subscribe, fromArray):

  1. Obter os Locais que correspondem à consulta restaurantes em Londres. Use o recurso de interpolação de strings do ES 6 na url.
  2. O _bulk_docs é muito conveniente para a importação de grandes conjuntos de dados para uma instância do Sync Gateway. Leia mais sobre ele na seção documentos.
  3. Depois de salvar o documento e salvar a foto como anexo, você deve primeiro obter a imagem da API do Places. Observe a codificação é definida como nulo. Isso é exigido pelo módulo Request para qualquer corpo de resposta que não seja uma string. Leia mais sobre isso na seção Solicitar documentos.
  4. Você deve informar ao Sync Gateway em qual documento (especificando o ID do documento) e a revisão desse documento (especificando o número da revisão) salvar esse anexo.

Para executar seu aplicativo NodeJS escrito com a sintaxe do JavaScript ES 6, você pode usar Babel. Instale-o e execute-o com o comando sync.js file:

Agora que você tem documentos, incluindo imagens, armazenados no bucket na memória do Sync Gateway, você começará a codificar o aplicativo iOS para incluir uma barra de progresso gerenciada pela notificação de alteração de replicação.

Aplicativo iOS

No Xcode, crie um novo arquivo Aplicativo de visualização única chamado CityExplorer:

Feche o projeto e instale o Couchbase Lite iOS SDK via Cocoapods:

Adicione a dependência ao Podfile na raiz do projeto e, em seguida, execute a instalação:

Aberto CityExplorer.workspace dessa vez e criar um cabeçalho de ponte:

Navegue até as configurações de compilação para adicionar o cabeçalho de ponte:

Aberto ViewController.swift e adicionar uma propriedade puxar do tipo CBLReplication?. No viewDidLoad adicione o seguinte:

Algumas coisas estão acontecendo acima:

  1. Você obtém a instância compartilhada do gerenciador.
  2. Com a instância do gerenciador, você exclui o conteúdo do banco de dados. Isso garantirá que a replicação comece do zero sempre que você executar o aplicativo.
  3. Você instancia uma replicação pull e se registra como um oberserver na notificação chamada kCBLReplicationChangeNotification.
  4. Você inicia a replicação.

E adicione o replicationProgress para simplesmente registrar as propriedades changesCount e completedChangesCount:

Na próxima seção, você adicionará uma visualização de progresso no Storyboard e, em seguida, a conectará ao View Controller.

Barra de progresso

No Storyboard, adicione uma visualização de progresso no centro da visualização:

Conecte o identificador da interface do usuário à propriedade do controlador:

No replicationProgress atualize o método progresso propriedade de acordo:

Execute o aplicativo e você verá a barra de progresso sendo atualizada à medida que os documentos são replicados:

Você pode executar o sync.js algumas vezes para ter mais documentos para extrair. A API do Places retorna um máximo de 20 resultados em uma resposta.

Conclusão

Neste tutorial, você aprendeu a configurar um projeto para usar a API do Google Places e um programa NodeJS para importar dados como documentos e anexos no Sync Gateway. Você também usou o NSNotificação no iOS para se registrar no kCBLReplicationChangeNotification e atualizar a exibição de progresso em seu aplicativo iOS.

Autor

Postado por James Nocentini, redator técnico, celular, Couchbase

James Nocentini é o redator técnico responsável pela documentação do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele também gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.

Deixar uma resposta