AirNotifier: um servidor de mensagens push para aplicativos móveis
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:
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 (apesar da mensagem, ele é compatível com outras plataformas além do iOS)
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.