AirNotifier: um servidor de mensagens push para aplicativos móveis

10 de Jun de 2015

Você sabe o que é o AirNotifier?

No mundo dos desenvolvimento móvel, há dois tipos de notificações possíveis: “in app” e “push”. “In app” nada mais são do que aquelas notificações que são disparadas a partir de rotinas “de dentro” do próprio aplicativo. É ele quem chama a API de notificação do dispositivo para exibir um aviso para o usuário.

Já notificações do tipo “push”, como o próprio nome diz, são “empurradas” para o dispositivo, tendo como origem um servidor externo. Em todas as plataformas, não é o backend do aplicativo que envia a notificação diretamente para o dispositivo do usuário. Ao invés disso ele normalmente envia a notificação de push para um servidor disponibilizado pela plataforma em questão (Android, iOS, Windows Phone, etc.) e este dispara a notificação para o smartphone do usuário, que por sua vez está constantemente em contato com o dispositivo em questão.

A ilustração abaixo exemplifica esse processo para a plataforma Android, mas o processo é análogo para qualquer plataforma:

funcionamento do push

Cada app deve ter um ID associado. Com esse ID, o app solicita um token para o servidor do Google. Esse token é único por dispositivo+aplicação. De posse desse token, o app Android envia esse valor para o servidor do aplicativo. Esse token deve ser armazenado de alguma forma no backend, pois quando ele desejar enviar uma mensagem para esse usuário específico, o fará utilizando o token em uma requisição do tipo POST para o servidor do Google que, por sua vez, se encarregará de despachá-la para o dispositivo Android.

Cada plataforma tem seus detalhes ou especificidades, mas o procedimento é basicamente o mesmo. O problema, neste caso é que cada plataforma móvel tem uma API diferente e protocolos diferentes para o envio das mensagens push, o que dificulta o trabalho quando você possui um mesmo aplicativo em diferentes sistemas operacionais móveis.

É aí que entra o AirNotifier. O AirNotifier é um servidor de mensagens push escrito em Python justamente para resolver esse problema. Com ele, ao invés de enviar a requisição para o servidor da plataforma, o seu backend envia o request para o AirNotifier que, por sua vez, se encarrega de disparar a solicitação para cada uma das plataformas cadastradas.

Desta forma há apenas uma API para o envio deste tipo de notificação, sendo que o AirNotifier faz o trabalho complicado para você. Além disso é possível ainda utilizar uma interface web para efetuar os envios, o que permite que o trabalho seja feito por alguém sem conhecimentos técnicos de programação. Segundo o site do projeto, o AirNotifier suporta hoje iOS (APNs), Android (GCM), Windows Phone (WNS/MPNS).

Instalação

Para testar o programa eu coloquei ele para rodar na nuvem utilizando um Cloud Server Pro com uma imagem do Ubuntu Server, mas você pode utilizar a distribuição que quiser, adaptando os passos para ela.

O primeiro passo é instalar as dependências.

No Ubuntu/Debian, digite: sudo apt-get install python-pip python-dev build-essential mongodb git

Crie os diretórios para armazenar os certificados e chaves privadas:

sudo mkdir -p /var/airnotifier/files

Agora, vamos baixar o aplicativo

cd /opt/
sudo git clone git://github.com/airnotifier/airnotifier.git
cd airnotifier

Instale as dependências com:

sudo pip install -r requirements.txt

Para configurar o AirNotifier, copie o arquivo airnotifier.conf-sample renomeando ele para airnotifier.conf e altere as configurações de acordo com o seu ambiente (mude a porta padrão (8801) para a porta 80 e o host do MongoDB, caso não queira rodar ele em localhost)

Rode o script python abaixo para criar o usuário admin inicial:

python install.py

Para iniciar a aplicação digite:

sudo python airnotifier.py >> /var/log/airnotifier.log 2>> /var/log/airnotifier.err

Para iniciar a aplicação depois de um reboot, eu costumo achar que a abordagem mais simples é criar um cronjob com o comando acima, mas há muitas outras formas de fazer isso. Não se esqueça de acessar o aplicativo pela primeira vez e mudar a senha padrão do admin (admin).

Abaixo, algumas imagens do applicativo rodando:

home do Airnotifier

Home do Airnotifier (apesar da mensagem, ele é compatível com outras plataformas além do iOS)

Janela de inserção de tokens

Uma vez criado um aplicativo, você pode inserir as chaves e tokens de cada plataforma)

Se você já usou o programa, ou testou ele depois de ler esse artigo, não deixe de nos contar as suas impressões. Para saber mais sobre o Airnotifier, consulte a página do projeto.