Integração com a Ntfy no Delphi
Ntfy é um serviço simples de notificações baseado em HTTP
Nesse post gostaria de compartilhar um projeto que me deparei no final da última primavera (2022) e que me levou a criar uma pequena implementação para o Delphi também.
Ntfy (a pronúncia é notify)
Em Novembro de 2022 vi um post bem interessante onde era compartilhado sobre um serviço de notificações desenvolvido por Philipp C. Heckel. Este serviço é baseado em HTTP e tem arquitetura de eventos, onde um agente fica responsável por publicar mensagens em um canal (Publisher), enquanto outros assinantes (Subscribers) recebem as mensagens instantaneamente. É um serviço totalmente gratuito, sem necessidade de você pagar um centavo para utilizá-lo. Segundo a afirmação de Philipp, ele continuará a ser gratuito. Você consegue enviar mensagens, arquivos, emails simples, ações para o Android, etc. Philipp foi extremamente generoso em prover um serviço com uma utilidade tão grande por custo zero. Ntfy pode ser uma alternativa ao Firebase e a principal vantagem é que você pode hospedar seu próprio servidor.
A arquitetura da ntfy é bem simples: um servidor fica no ar para armazenar endereços de tópicos enquanto outros aparelhos se conectam nestes endereços para fazer a troca de mensagens (notificações).
Pré-requisitos
Para o nosso projeto do Delphi rodar você vai precisar colocar as DLLs da OpenSSL na pasta onde for gerado o executável. Elas estão disponibilizadas no link do repositório mas você também pode baixá-las onde preferir. Por enquanto o projeto funciona apenas no Windows mas uma outra ramificação está em andamento para prover suporte a outras plataformas e eliminar a necessidade destas DLLs.
Instalando
Para utilizar a biblioteca, clone o repositório da hazzelnuts no github e depois adicione a pasta “src” no library path ou search path do seu projeto. Ou se preferir, utilize o gerenciador de dependências boss da hashload:
boss init
boss install github.com/hazzelnuts/ntfy-for-delphi
Utilizando a biblioteca
Você pode utilizar a biblioteca de duas maneiras: Ou para publicar notificações ou para receber as mesmas. Ambas maneiras devem interagir com um canal para a comunicação. Chamamos esse canal de tópico. Ele é um segmento de url que servirá para a ntfy direcionar os eventos http. Como ele se tornará uma url pública, o ideal é que você gere um id bem difícil de se adivinhar. Para nosso exemplo vou utilizar o mesmo que coloquei na demonstração da biblioteca.
https://ntfy.sh/notify-delphi-integration-8jh27d
Publicando notificações
Abra seu navegador em https://ntfy.sh/notify-delphi-integration-8jh27d — faça esse procedimento para testarmos a próxima parte. Depois disso, volte no seu projeto e adicione a unit “Notify” na seção uses. Informe qual o tópico você deseja publicar — em nosso exemplo o tópico é “notify-delphi-integration-8jh27d” — adicione um título e uma mensagem para a sua notificação. Em seguida chame o método para publicar sua notificação. Abaixo está um exemplo de uma aplicação console demonstrando o que foi descrito.
Compile e execute seu projeto. Sua notificação deve aparecer no aplicativo web:
Recebendo notificações
Para receber notificações precisamos “assinar” ou “inscrever-nos” em tópicos. Para fazer isso na biblioteca é bem simples também. Primeiro adicionamos a unit “Notify” na seção “uses” e em seguida chamamos o método “Subscribe” seguido do tópico em que queremos nos inscrever e mais uma função de callback que recebe um parâmetro do tipo “INotifyEvent”. Essa função será disparada toda vez que recebermos uma nova notifcação e poderá ser utilizada para fazer outras operações no programa caso seja de nosso interesse.
Como pode ver é bem simples a utilização.
Considerações
Esse projeto está longe de ser perfeito e ainda tem muito espaço para aperfeiçoamento. Será muito bem vinda a contribuição de outros devs que desejarem ajudar para melhorá-lo. Atualmente estou trabalhando ainda em algumas melhorias que foram sugeridas na Delphicon 2023 e que ainda não fora implementadas. Caso você tenha o interesse de ver mais detalhes, confira o terceiro vídeo da Delphicon 2023 em que eu apresentei a biblioteca na palestra internacional de aniversário de 28 anos do Delphi.
Links
Repositório: https://github.com/hazzelnuts/ntfy-for-delphi
Documentação da Ntfy: https://docs.ntfy.sh/