Urban Airship Logo

Aeronave urbana é um serviço popular de mensagens e notificações.  Na parte 1 desta postagem, veremos como configurar as notificações push do Urban Airship. Na parte 2 da postagem, usaremos essas notificações para acionam replicações em Couchbase Mobile.

O que você precisará

Você pode usar o Urban Airship (UA) gratuitamente. (Consulte o site da UA para obter detalhes sobre os preços atuais.) É necessário registrar uma conta.

  • Relato de um dirigível urbano
  • Uma conta do Firebase (requer uma conta de login do Google)
  • Android Studio (ou Xcode)

Parte 1 - Configurando o Urban Airship

Abra um projeto Android ou iOS existente em seu IDE (ou crie um novo). Aqui, ilustrarei o uso do Android.

Faça login na sua conta da UA. Navegue até a página Novo aplicativo. Preencha o nome do aplicativo. Selecione as plataformas que você deseja usar. (Escolheremos Android e iOS para este exemplo.) Ao clicar em "Save", você será levado ao guia de início rápido. (Se você já tiver passado pelo início rápido e precisar relembrar a configuração, poderá encontrar as etapas para Android aqui e para iOS aqui.)

Urban Airship New Application Dialog

Início rápido da UA

Aqui é oferecida uma guia para cada plataforma selecionada. Conforme mencionado, vamos nos concentrar na criação para Android desta vez.

Siga as etapas de início rápido do Urban Airship. Tenho algumas dicas para os problemas que encontrei.

Etapas 1 e 2 do início rápido do Urban Airship

O guia UA refere-se ao script build.gradle do projeto, mas mostra a modificação do script build.gradle do módulo. Adicionei o repositório do UA ao script gradle do meu projeto e a dependência do UA ao script gradle do módulo. Isso funcionou bem.

Procure o ID do aplicativo no script gradle do módulo.

Etapa 5 do início rápido do Urban Airship

Para criar sua própria classe de aplicativo, clique com o botão direito do mouse na área do aplicativo do painel de navegação do projeto e selecione Novo > Classe Java. Na janela pop-up, defina o nome da classe. Em seguida, para a superclasse, digite android.app.Application.

Creating an Application subclass

Não se esqueça de atualizar seu arquivo de manifesto. Você pode usar o nome totalmente qualificado de sua classe ou a forma abreviada que o UA mostra. O formulário totalmente qualificado tem a seguinte aparência:

Etapa 6 do início rápido do Urban Airship

A UA usa o Firebase Cloud Messaging (FCM). A sexta etapa tem um link para a documentação adicional da UA. Essa nova página tem instruções detalhadas sobre como criar uma chave de API para seu aplicativo.

As instruções nessa página sob o título "Configurar o serviço FCM/GCM com o Urban Airship" estão um pouco desatualizadas. Você encontrará a área para inserir a chave Api e o pacote no final do guia de início rápido agora, em vez de onde os documentos dizem para procurar.

Em um lugar, os documentos do UA se referem ao "Número do projeto da API do Google". Isso é o que o FCM chama de ID do remetente.

Testes

O início rápido termina com uma área de teste, sem muitas instruções. Se você observar o código incluído na subclasse Application, verá que ele está ativando as notificações do usuário. Para testar, crie seu aplicativo e instale-o em um emulador ou dispositivo. (Tentei em ambos e funcionaram bem).

Urban Airship Test Panel

Digite algo no campo de texto e clique em "Send Test" (Enviar teste). Você verá um ícone aparecer na área de notificação do Android. Estranhamente, isso não inclui o texto inserido na área de teste.

Para a solução de problemas, a UA o direciona para um link obscuro "Error Console" no canto inferior direito da página de documentação. Infelizmente, o link só me levou de volta ao guia de início rápido.

Concluindo a parte 1

Como você viu nas etapas anteriores, a configuração do Urban Airship foi bastante rápida. O início rápido mostra como enviar uma notificação de alerta. Para acionar a sincronização de dados em um cliente do Couchbase Lite, é necessário enviar um alerta silencioso; a parte 2 desta publicação abordará esse assunto.

Parte 2 - Acionando a sincronização de dados a partir da nuvem

Na parte 1 desta postagem, você configurou o Urban Airship; na parte 2, mostrarei um aplicativo Android de amostra criado com Couchbase Lite que usa uma notificação push do Urban Airship para acionar a sincronização de dados da nuvem para um dispositivo móvel. Aqui, "a nuvem" será um Gateway de sincronização em uma configuração de teste. (O Couchbase Lite e o Sync Gateway fazem parte da pilha do Couchbase Mobile. Você pode ler sobre o Couchbase Mobile aqui.)

Histórico

O Couchbase Mobile sincroniza os dados usando replicações unidirecionais. Você pode definir as replicações para serem executadas e encerradas imediatamente quando os dados locais estiverem atualizados ("one-shot") ou para ouvir indefinidamente novas alterações ("continuous").

Há alguns motivos pelos quais você pode querer usar um serviço como o Urban Airship para acionar a sincronização em vez de configurar uma replicação contínua. Por exemplo, uma replicação contínua "pull" (que recupera dados da nuvem) precisa manter uma conexão de rede aberta. Uma conexão aberta necessariamente causará algum consumo na bateria do dispositivo, mesmo quando estiver inativa. O ideal é que um aplicativo abra uma conexão somente quando houver alterações a serem transferidas.

Além disso, os serviços de notificação por push, como o Urban Airship, costumam ter vários recursos avançados para lidar com grupos de dispositivos. A UA pode lhe proporcionar grande flexibilidade no gerenciamento de quando as operações acontecem. Além disso, se o seu aplicativo já usa um serviço push, ele já requer sua própria conexão de rede aberta. Faz sentido usar isso para acionar o Couchbase Lite em vez de duplicar a rede.

Este exemplo mostrará como integrar o Urban Airship. Examinarei todas as peças necessárias para que você possa criar um aplicativo totalmente funcional.

O aplicativo

Aqui está uma olhada no aplicativo em ação. A parte superior da imagem mostra o aplicativo em execução. A parte inferior mostra uma notificação push enviada pela linha de comando. Quando o aplicativo recebe a notificação por push, ele exibe um botão giratório de progresso, dispara uma replicação pull de uma só vez e exibe as alterações do documento recebidas em uma exibição de texto.

Para entender esse exemplo, daremos uma olhada em quatro classes, um pouco da "cola" que as une e mostraremos como testar os resultados.

Classes exigidas pela Urban Airship

Para usar o Urban Airship (UA), precisamos implementar duas classes, uma subclasse do Autopilot e uma subclasse do AirshipReceiver.

Piloto automático

UA precisa ser inicializado antes do uso. Você pode fazer isso de duas maneiras: ou chamar decolagem na seção onCreate ou criando uma subclasse do Autopilot. Optei pela segunda opção. Como veremos, o UA tem uma maneira interessante de usar automaticamente nossa subclasse.

A classe é simples. Não quero exibir nada na barra de notificação. Uso essa classe para desativar as notificações do usuário, e isso é tudo.

Aqui está a listagem completa do CBAutoPilot.java.

Para usar essa classe, o UA emprega uma técnica exclusiva do Android. Você indica qual classe usar com uma entrada em seu arquivo de manifesto do Android. No meu caso, a entrada tem a seguinte aparência (colocada dentro do arquivo aplicativo seção):

É aqui que acontece um pouco da mágica do Android. O UA inclui uma classe de provedor de conteúdo para automatizar a inicialização. É garantido que os provedores de conteúdo sejam instanciados antes que o aplicativo onCreate é chamado. O UA usa isso para incluir código para ler essa entrada de metadados, instanciar a subclasse e chamar o método onAirshipReady método.

AirshipReceiver

Com o UA inicializado e pronto para funcionar, precisamos fornecer os ganchos para capturar e processar as notificações. Para fazer isso, implemente uma subclasse de AirshipReceiver. Novamente, a classe é simples.

Aqui está a listagem completa do CBAirshipReceiver.java.

Quando começarmos a testar o aplicativo, veremos como o UA permite que você defina o texto do alerta. Usei isso aqui para fornecer algumas operações remotas diferentes. Um alerta pode iniciar e interromper replicações. Também incluí a possibilidade de, enviando "reset", excluir o banco de dados. Fiz isso porque, uma vez que você replica os dados, eles são persistentes no dispositivo. O desligamento do aplicativo não redefine o banco de dados local. Em vez de sempre ter de adicionar novos documentos por meio do Sync Gateway para mostrar que a replicação está funcionando, adicionei a capacidade de limpar o banco de dados do dispositivo e começar de novo.

Você notará alguns outros métodos substituídos acima. Esses métodos são todos declarados abstratos na classe AirshipReceiver, portanto, temos de incluir pelo menos uma implementação mínima. Acontece, porém, que precisamos saber a ID do canal do dispositivo para enviar uma mensagem a ele. Essa ID de canal muda com frequência. Em um post futuro, mostrarei como registrar a ID para que um aplicativo do lado do servidor possa enviar para o dispositivo. Por enquanto, é útil registrar a ID para que possamos extraí-la e usá-la nos testes.

As classes de aplicativos

Os ganchos acima colocam o UA em funcionamento, capturam notificações e acionam ações com base em seu conteúdo. Agora vamos dar uma olhada no aplicativo em si.

O aplicativo consiste em uma Activity configurada para que possamos ver o conteúdo dos documentos à medida que eles são extraídos. A outra classe envolve algumas das funcionalidades do Couchbase Lite em um auxiliar.

A atividade principal

Na atividade principal, quero mostrar uma barra de progresso enquanto as replicações acontecem e, em seguida, exibir o conjunto de documentos enviados.

Aqui está a listagem completa do MainActivity.java

O núcleo do código aqui consiste em dois ouvintes de alterações, um para o banco de dados e outro para as replicações. Cada interface de ouvinte define um único método alterado.

O ouvinte de alterações de documento nos permite rastrear as atualizações reais do documento. Uma replicação pode alterar mais de um documento ao mesmo tempo. O evento de alteração retorna uma lista de IDs de documentos. Percorrendo as IDs dos documentos, recuperamos cada documento diretamente, traduzimos o conteúdo do JSON em uma cadeia de caracteres e o anexamos ao texto a ser exibido. Os ouvintes de alteração são chamados em um thread em segundo plano. Para finalizar, precisamos manipular os elementos da interface do usuário no thread principal. Isso é feito facilmente com a função runOnUiThread do Activity.

O outro ouvinte nos permite exibir um spinner de espera ocupada (barra de progresso indefinida), dependendo do estado da replicação. Você pode ler mais sobre o monitoramento do estado da replicação aqui.

A classe auxiliar de banco de dados

Costumo envolver as funções do banco de dados em uma classe auxiliar. Como precisamos apenas de uma instância do auxiliar, uso um padrão singleton. Assim como no UA, quero que o auxiliar esteja disponível antes do início do aplicativo principal. Uso a mesma técnica de colocar o código em um provedor de conteúdo.

Aqui está a listagem completa do CBLHelper.java.

Você pode ver que essa classe forma apenas um invólucro fino. Mantemos uma instância da classe durante onCreate que se torna nosso singleton. Algumas outras configurações básicas acontecem, como ativar o registro e criar um gerenciador de banco de dados. Eu escrevi um inicializar usado para realmente abrir o banco de dados, preparar a replicação pull e anexar os dois ouvintes de alteração. Lembre-se de que ele é chamado a partir da nossa classe Activity. (Observação: você pode ter mais de um ouvinte de alterações para cada tipo. O Couchbase mantém uma lista de todos os ouvintes adicionados, não apenas o mais recente). Os outros métodos do banco de dados fornecem apenas atalhos simples.

Um provedor de conteúdo tem vários métodos obrigatórios a serem implementados. Precisamos fornecer esboços para eles, que você vê nos últimos cinco métodos.

O manifesto do Android

Por fim, apenas para mostrar como tudo isso se encaixa e como as várias partes são expostas, incluí o arquivo de manifesto do Android para o projeto.

Aqui está a listagem completa do AndroidManifest.xml.

A biblioteca UA vem com seu próprio arquivo de manifesto. O sistema de compilação do Android integra todos os diferentes arquivos de manifesto para criar o arquivo final. O arquivo de manifesto da biblioteca UA é onde você encontrará as entradas para o provedor de conteúdo que inicializa a biblioteca.

Gateway de sincronização

Para testar o aplicativo, usei o Sync Gateway com o banco de dados Walrus integrado. O Walrus é um banco de dados banco de dados na memória geralmente usado apenas para testes. Isso evita o trabalho de configurar uma instância back-end do Couchbase Server.

Aqui está a listagem completa do arquivo de configuração do Sync Gateway.

Isso diz ao Sync Gateway para escutar apenas no localhost aceita todas as solicitações de origem cruzada e habilita o GUEST especial com acesso a todos os canais. É uma configuração de propósito geral muito boa para começar, a fim de garantir que tudo esteja funcionando.

Você deve ter notado que usamos 10.0.2.2 como o endereço IP do Sync Gateway no aplicativo Android. O emulador padrão que vem com o Android Studio mapeia isso automaticamente para o endereço IP do computador de hospedagem localhost. Se você usar um emulador diferente (o Genymotion é outro popular), não deixe de pesquisar qual endereço IP usar, pois eles são diferentes.

Se quiser saber mais sobre como configurar o Sync Gateway em sua máquina de desenvolvimento ou como trabalhar com ele a partir da linha de comando, dê uma olhada em série de blogs.

Testes

Para testar tudo e gravar a animação mostrada no início do blog, executo o emulador de Android e o Sync Gateway em uma máquina. Em seguida, publico notificações por push no UA por meio de sua API REST.

Para preparar algo interessante, primeiro adiciono um documento ao Sync Gateway. Aqui está um comando do shell para fazer isso.

(Leia mais sobre isso aqui).

Com um novo documento no banco de dados no Sync Gateway e o aplicativo em funcionamento, tudo o que resta é acionar uma replicação pull para ver a ação.

Aqui está o enrolar para enviar um sinal de "início". Lembre-se de que eu extraio o valor da parte "alert" da notificação para acionar ações.

Você precisará fornecer sua própria chave de aplicativo e o segredo mestre do aplicativo acima. Também é necessário examinar os arquivos de registro para ver o valor do canal a ser inserido para "android_channel". Isso muda com bastante regularidade. Infelizmente, o UA não faz muito para indicar isso. Se você achar que as notificações por push não parecem estar surtindo efeito, verifique o valor do canal.

Depois de postar na UA, você verá uma resposta como esta.

E, finalmente, para redefinir um banco de dados em branco e tentar novamente, você pode postar isso.

Conclusão

Isso é tudo para preparar nosso aplicativo Android para executar replicações com base em notificações push. Não deixe de conferir esta postagem sobre o monitoramento do feed de alterações do Sync Gateway.

Pós-escrito

Download do Couchbase e do Sync Gateway aqui. Veja nosso documentação para saber como adicionar o Couchbase Lite a um projeto.

Confira mais recursos em nosso portal do desenvolvedor e nos siga no Twitter @CouchbaseDev.

Você pode postar perguntas em nosso fóruns. E participamos ativamente de Estouro de pilha.

Entre em contato comigo pelo Twitter com perguntas, comentários, tópicos que você gostaria de ver etc. @HodGreeley.

Autor

Postado por Hod Greeley, Advogado do desenvolvedor, Couchbase

Hod Greeley é um defensor dos desenvolvedores da Couchbase e mora no Vale do Silício. Ele tem mais de duas décadas de experiência como engenheiro de software e gerente de engenharia. Trabalhou em diversas áreas de software, incluindo física e química computacional, segurança de computadores e redes, finanças e dispositivos móveis. Antes de ingressar na Couchbase em 2016, Hod liderou as relações com desenvolvedores para dispositivos móveis na Samsung. Hod é Ph.D. em física química pela Universidade de Columbia.

Um comentário

  1. [...] Observação: você pode ler sobre a configuração do Urban Airship nesta postagem do blog. [...]

Deixar uma resposta