Доступен выпуск проекта
Gotify 2.0, в рамках которого развивается реализация сервера для доставки и приёма push-уведомлений с использованием протокола Websocket. На базе предложенного решения можно организовать самодостаточную систему доставки информационных сообщений или уведомлений о наступлении различных событий, работающую в режиме реального времени и выполняемую на подконтрольном оборудовании, без привязки к сторонним сервисам (например, может использоваться как альтернатива Google/Firebase Cloud Messaging, не привязанная к Google Play Services). Код написан на языке Go и распространяется под лицензией MIT. Для быстрого развёртывания сервера предоставляется образ для системы Docker. В качестве СУБД могут применяться SQLite, MySQL и PostgreSQL.
В дополнение к серверной части проектом подготовлено android-приложение для чтения уведомлений и интерфейс командной строки для автоматизации отправки уведомлений. Для получения сообщений и управления подписками предложен web-интерфейс. Для отправки сообщений применяется REST-API, а приём осуществляется при помощи WebSocket. Доступен API для расширение функциональности через подключение плагинов.
Предоставляются средства для управления пользователями сервера, клиентскими приложениями (подписчики, получающие уведомления) и приложениями для отправки. Привязка приложений, которые могут отправлять уведомления, осуществляется по токену (идентификатору канала), который генерируется через web-интерфейс. В простейшем случае в качестве приложений для отправки может использоваться утилита curl или cli-интерефейс gotify:
curl -u admin:admin -X POST https://yourdomain.com/application -F "name=test" -F "description=tutorial" или gotify push -t "my title" -p 10 "my message"
Клиентские приложения (web-интерфейс и android-приложение) могут только получать и удалять сообщения, но не могут их отправлять. При наличии соответствующих полномочий через web-интерфейс также можно управлять подписчиками, генерировать токены для отправки и создавать новых пользователей. Каждое сообщение включает такие атрибуты, как содержимое, дата, заголовок, приоритет и идентификатор приложения (канала).
Дополнительно можно отметить выпуск Pushpin 1.20, обратного прокси-сервера, позволяющего поддерживать постоянно установленные соединения между бэкендом и клиентами. Прокси может использоваться для обеспечения доставки сообщений через WebSocket, потоковой передачи поверх HTTP и обеспечения работы длительно живущих сервисов, в которых операции инициируются со стороны сервера. В том числе Pushpin может применяться для организации доставки push-уведомлений на базе любых API.
В качестве бэкенда может выступать любое web-приложение, доступное через обычные короткоживущие HTTP-соединения и работающее под управлением любого http-сервера. Обмен данными в рамках постоянно установленного соединения WebSocket транслируется в серию отдельных HTTP-запросов к бэкенду. Для отправки клиенту push-сообщения, независимо от метода подключения клиента, бэкенд осуществляет обращение к предоставляемому прокси Web API через отправку отдельных POST-запросов. Данные запросы подставляются в постоянные соединения, установленные с клиентами. Pushpin написан на языке С++ и распространяется под лицензией AGPLv3.