Pesquisa de site

Como criar um servidor para enviar notificações push com GCM para dispositivos Android usando Python


Introdução

As notificações por push permitem que seu aplicativo Android notifique um usuário sobre um evento, mesmo quando o usuário não estiver usando seu aplicativo. O objetivo deste tutorial é enviar uma notificação push simples para seu aplicativo. Usaremos o Ubuntu 14.04 e o Python 2.7 no servidor e o Google Cloud Messaging como o serviço de notificação por push.

Usaremos o termo servidor para nos referirmos à instância desenvolvida com a DigitalOcean. Usaremos GCM para nos referir ao servidor do Google, aquele que fica entre o dispositivo Android e seu servidor.

Pré-requisitos

Você precisará destas coisas antes de iniciar o tutorial:

  • Um aplicativo Android; consulte developer.android.com
  • Um droplet do Ubuntu 14.04
  • Endereço IP do seu Droplet

Sobre Notificações Push

Os servidores de conexão GCM fornecidos pelo Google recebem mensagens de um servidor de aplicativos de terceiros, como seu Droplet, e as enviam para um aplicativo Android habilitado para GCM (o aplicativo cliente) em execução em um dispositivo. Atualmente, o Google fornece servidores de conexão para HTTP e XMPP.

Em outras palavras, você precisa de seu próprio servidor para se comunicar com o servidor do Google para enviar as notificações. Seu servidor envia uma mensagem para um servidor de conexão GCM (Google Cloud Messaging), então o servidor de conexão enfileira e armazena a mensagem e, em seguida, a envia para o dispositivo Android quando o dispositivo está online.

Etapa um — criar um projeto de API do Google

Precisamos criar um projeto de API do Google para habilitar o GCM para nosso aplicativo.

Visite o Console de desenvolvedores do Google.

Se você nunca criou uma conta de desenvolvedor lá, pode ser necessário preencher alguns detalhes.

Clique em Criar projeto.

Insira um nome de projeto e clique em Criar.

Aguarde alguns segundos para que o novo projeto seja criado. Em seguida, visualize o ID do projeto e o número do projeto no canto superior esquerdo da página do projeto.

Anote o número do projeto. Você o usará em seu cliente de aplicativo Android.

Etapa dois - Ative o GCM para o seu projeto

Certifique-se de que seu projeto ainda esteja selecionado no Google Developers Console.

Na barra lateral à esquerda, selecione APIs e autenticação.

Escolha APIs.

Na lista de APIs exibida, ative o Google Cloud Messaging para Android. Aceite os termos de serviço.

O Google Cloud Messaging para Android agora deve estar na lista de APIs ativadas para este projeto.

Na barra lateral à esquerda, selecione APIs e autenticação.

Escolha Credenciais.

Em Acesso público à API, clique em Criar nova chave.

Escolha a chave do servidor.

Digite o endereço IP do seu servidor.

Clique em Criar.

Copie a CHAVE da API. Você precisará inserir isso em seu servidor mais tarde.

Etapa três - vincular o aplicativo Android

Para testar as notificações, precisamos vincular nosso aplicativo Android ao projeto API do Google que fizemos.

Se você é novo no desenvolvimento de aplicativos Android, talvez queira seguir o guia oficial para Implementação do cliente GCM.

Você pode obter o código-fonte oficial na página gcm.

Observe que as fontes não são atualizações, então você terá que modificar o arquivo Gradle:

gcm-client/GcmClient/build.gradle

Linha antiga:

compile "com.google.android.gms:play-services:4.0.+"

Linha atualizada:

compile "com.google.android.gms:play-services:5.0.89+"

Na atividade principal, localize esta linha:

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

Substitua pelo número do projeto do seu projeto de API do Google.

Cada vez que um dispositivo se registra no GCM, ele recebe um ID de registro. Vamos precisar desse ID de registro para testar o servidor. Para obtê-lo facilmente, basta modificar estas linhas no arquivo principal:

            if (regid.isEmpty()) {
                registerInBackground();
            }else{
                Log.e("==========================","=========================");
                Log.e("regid",regid);
                Log.e("==========================","=========================");
            }

Depois de executar o aplicativo, procure no logcat e copie seu regid para que você o tenha para mais tarde. Isso parecerá assim:

=======================================
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================

Passo Quatro — Implantar um Droplet

Implante um novo servidor Ubuntu 14.04. Precisamos que este seja nosso servidor de aplicativos de terceiros.

Os servidores de conexão GCM do Google recebem mensagens de um servidor de aplicativos de terceiros (nosso Droplet) e as enviam para aplicativos em dispositivos Android. Embora o Google forneça servidores de conexão para HTTP e CCS (XMPP), estamos nos concentrando em HTTP para este tutorial. O servidor HTTP é somente downstream: cloud-to-device. Isso significa que você só pode enviar mensagens do servidor para os dispositivos.

Funções do nosso servidor:

  • Comunica-se com seu cliente
  • Dispara solicitações formatadas corretamente para o servidor GCM
  • Trata das solicitações e as reenvia conforme necessário, usando back-off exponencial
  • Armazena a chave de API e os IDs de registro do cliente. A chave API está incluída no cabeçalho das solicitações POST que enviam mensagens
  • Gera IDs de mensagem para identificar exclusivamente cada mensagem enviada. Os IDs das mensagens devem ser exclusivos por ID do remetente

O cliente se comunicará com seu servidor enviando o ID de registro do dispositivo para você armazená-lo e usá-lo quando enviar a notificação. Não se preocupe agora em gerenciá-lo; é muito simples e o GCM fornece ajuda com mensagens de erro caso um ID de registro seja inválido.

Etapa cinco - configurar o servidor simples Python GCM

Faça login no seu servidor com um usuário sudo.

Atualize suas listas de pacotes:

sudo apt-get update

Instale os pacotes Python:

sudo apt-get install python-pip python-dev build-essential

Instale python-gcm. Saiba mais sobre o python-gcm aqui.

sudo pip install python-gcm

Crie um novo arquivo Python em algum lugar do servidor. Digamos:

sudo nano ~/test_push.py

Adicione as seguintes informações ao arquivo. Substitua as variáveis marcadas em vermelho. A explicação está abaixo.

from gcm import *

gcm = GCM("AIzaSyDejSxmynqJzzBdyrCS-IqMhp0BxiGWL1M")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}

reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'

gcm.plaintext_request(registration_id=reg_id, data=data)

Explicação:

  • from gcm import *: importa o cliente Python para o Google Cloud Messaging para Android
  • gcm: adicione sua API KEY do projeto Google API; verifique se o endereço IP do seu servidor está nos IPs permitidos
  • reg_id: adicione seu regid de seu aplicativo Android

Passo Seis — Envie uma Notificação Push

Execute este comando para enviar uma notificação de teste para seu aplicativo:

sudo python ~/test_push.py

Aguarde cerca de 10 segundos. Você deve receber uma notificação no seu dispositivo Android.

Solução de problemas.

Se a notificação não aparecer no seu dispositivo após cerca de 10 segundos, siga estas etapas:

  • Seu smartphone/tablet está conectado à internet?
  • Você tem a chave do projeto correta?
  • Você tem o regid correto do aplicativo?
  • O endereço IP do seu servidor foi adicionado à chave do servidor da API do Google?
  • O servidor está conectado à Internet?

Se você ainda não está recebendo a notificação, provavelmente é o aplicativo. Verifique o logcat em busca de alguns erros.

Para onde ir a partir daqui

Depois de fazer este teste simples, você provavelmente desejará enviar as notificações para todos os seus usuários. Lembre-se que você deve enviá-los em conjuntos de 1000. Além disso, se o CGM responder com ID inválido, você deve removê-lo de seu banco de dados.

Você pode adaptar os exemplos deste tutorial para trabalhar com seu próprio aplicativo Android.

Artigos relacionados: