Integração com a Ntfy no Delphi

Samuel R. O.
4 min readFeb 18, 2023

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.

--

--