O que é Push Notification?

(Last Updated On: 30 de Março de 2017)

No projeto (de teste) para a casa do código desenvolvido pelo instrutor Matheus Brandino, temos uma App Android que permitirá que os usuários consigam realizar compras via celular. A primeira tela para essa App é justamente exibir todos os livros disponíveis na Casa do Código:

projeto-cdc-tela-principal

Atualmente, para que o cliente consiga verificar se tem algum livro novo disponível para compra, ele precisa ir no menu e escolher a opção “novidades”.

projeto-cdc-menu

Podemos ver claramente o fluxo dessa funcionalidade a partir do diagrama abaixo:

diagrama_de_cliente_servidor

A princípio, não há problema, certo? Entretanto, para o usuário, faz sentido ele ter que ficar verificando todas as vezes se existe um novo livro? E se não tiver um livro novo? Vai ficar perdendo tempo… Além de ser cansativo, temos 2 pontos mais graves nessa funcionalidade:

  • Consumo de dados: Todas as vezes precisará fazer uma nova requisição ao servidor, ou seja, consumirá seus dados a cada requisição
  • Consumo de bateria: Todas as vezes precisará abrir a App e escolher o menu novidades

Considerando apenas esses 2 problemas, qual solução você daria?

Que tal criar um sistema de notificação? Aparentemente, é uma ótima solução, porém, como faríamos isso? Adicionaríamos uma task em background para ficar rodando em intervalos e ficar consultando o servidor?

É uma possível “solução”, porém, ainda não resolve totalmente o nosso problema, pois ainda estaremos consumindo os dados e a bateria do usuário de acordo com o intervalo que configurarmos para realizar as requisições. Podemos até mesmo pensar que, “aumentar o intervalo da task pode diminuir esse problema”.

Pode até diminuir os problemas citados acima, entretanto, se, por exemplo, a casa do código lançar um novo livro com algum tipo de promoção imperdível e temporária, e então, devido ao longo intervalo para realizar as verificações, o nosso sistema de notificação não faz a requisição ao servidor e, durante esse tempo, a promoção se esgota… Será que o nosso usuário ficará contente? Provavelmente não…

Além disso, imagine se existir milhares de usuários com a App instalada, e, por alguma coincidência, o sistema de notificação de cada celular fizer a verificação ao mesmo tempo. Com certeza correremos um grande risco do nosso sistema receber diversas requisições e entrar num estado de pico ou até mesmo cair.

Em outras palavras, com essa “solução”, sem querer, podemos realizar algo bem similar a um DDoS no nosso sistema, ou seja, derrubar o nosso servidor devido a uma quantidade de carga maior do que ele suporta.

Então como poderíamos resolver esse problema? Que tal, ao invés da própria App requisitar o servidor, fazer com que ela seja o receptor, e então, o servidor mandar as requisições para a App? Por exemplo:

diagrama_server_cliente

Observe que no diagrama acima, o servidor que está enviando uma mensagem para o cliente, ou seja, ele que está mandando requisições para o cliente. Será que isso é possível? Sim, é possível! 😀

Essa abordagem de fazer com que a App seja receptora, isto é, fique esperando requisições, chamamos de Push Notification. Atualmente, existem algumas plataformas que nos oferecem esses serviços mensageiros como o GCM (Google Cloud Messaging), porém, esse mesmo serviço ~~está sofrendo~~ sofreu um upgrade para o Firebase.

E aí, o que achou do push notification? Está ansioso para implementá-lo na sua App? Então dê uma olhada no post tutorial onde mostro, passo-a-passo, como podemos configurar o Firebase e integrar um Push Notification em uma App Android.

Que tal aprender a desenvolver uma App Android desde o zero hoje mesmo? Na Alura, temos diversos cursos online de Android, onde você será capaz de construir suas próprias Apps do começo ao fim!

FIQUE POR DENTRO

Content Editor at Alura and Software Developer

  • Ricardo Longa

    E se o usuário forçar o encerramento do App de vocês, o Push Notification funcionará mesmo assim?

    • Oi Ricardo, tudo bem?

      A configuração do Push Notification fica vinculado com a App, portanto, se for quebrada ou, como você mesmo citou, for parada por escolha do usuário, por padrão, o push notification também não funcionará caso o usuário esteja online (que é o cenário mais comum), pois na implementação do FCM (Firebase Cloud Messaging) acontece o seguinte:

      Ele vincula o dispositivo com o serviço dele por meio de um token.
      Então ele manda a mensagem para o token do dispositivo vinculado, independemente se a app está ou não funcionando. Se ele vê que a conexão foi feita sem nenhum problema, isto é, se o dispositivo estiver online, ele entende como enviado com sucesso. É justamente por esse motivo que não funciona se a app for encerrada pelo usuário.

      No caso da app ficar offline, o que acontece é o seguinte, o FCM mantém a(s) mensagem(ns) armazenada(s) no servidor dele servidor (não é pra sempre, tem um limite!) e tenta reenviar assim que conseguir uma conexão com o dispositivo, ou seja, assim que conseguir conectar com o token que foi vinculado ao dispositivo. Então, quando consegue a conexão novamente, ele reenvia todas as mensagens que não foram enviadas.

      Tendo ciência todos esses pontos, o cenário mais problemático de fato é quando a app tá online e é quebrada ou forçada ao encerramento e não volta a funcionar. Portanto, uma alternativa para resolver o problema seria:

      Configurar a App para que seja reiniciada automaticamente assim que for quebrada. Dessa forma, mesmo que o usuário quebre ou faça qualquer coisa com a app, ela nunca ficará inativa, ou seja, o seu serviço estará “sempre funcionando”.

      Basicamente é isso Ricardo. Obrigado pelo comentário.

      Abraços.

  • Danilo

    Parabéns pelo texto 🙂

    Quando publicarão o exemplo usando o Firebase notification citado no texto?

    Obrigado

  • Pingback: Blog da Alura – Integrando App Android com o Firebase Cloud Messaging()

  • Ótima explicação!

    Esclareceu de forma sucinta como funcionam push notifications, parabéns pelo artigo.

    • Alex Felipe

      Opa Helder, obrigado pelo feedback!

      Abraços.

  • joao neto

    Excelente post… parabéns!

    • Alex Felipe

      Opa João, obrigado pelo feedback 🙂

Próximo ArtigoFórum funcionando a todo vapor