I don't have google services on my phone and having every app permanently connected checking for new messages is detrimental to battery life. UnifiedPush is the open alternative to Google Cloud Messaging: https://unifiedpush.org
Signal has their own implementation of notifications, which uses WebSockets. It works, and it doesn't rely on Google, but it eats up battery like crazy. If every app did this, you would have a battery life of an hour. That's why UnifiedPush is a better solution.
Try Molly, it's a fork of the Signal client for Android, which improves battery life (even with WebSockets) or alternatively allows you to use UnifiedPush. Signal doesn't support UP natively, but Molly has created a bridge called mollysocket, which takes Signal notifications and forwards them to your UnifiedPush server of choice. You can self-host it, or just use a public instance like https://adminforge.de/services/mollysocket/. They also host an instance of ntfy (UnifiedPush server) at ntfy.adminforge.de. If you have questions on how to set this up, feel free to DM me. But it's pretty easy and you don't need to self-host anything. And it's perfectly secure, because although the mollysocket server is added as a linked device in Signal, it doesn't get the encryption keys to your messages. So it can't decrypt your messages or see the content of your notifications.
Yes, there are no limitations. I've been using it since January and it's been fantastic. Just keep in mind that there are multiple versions of Molly, and UnifiedPush support is not included in the main version. You either need to pull the APK from the mollyim-android-unifiedpush repo, or add the Molly F-Droid repo and download the UnifiedPush version from there.
For the UnifiedPush client, you just need to download ntfy from F-Droid, GitHub or Google Play, go to the settings, set the server to https://ntfy.adminforge.de, and set the Connection protocol to WebSockets. In the Molly-UnifiedPush app, go to Settings -> Notifications, set the server to https://molly.adminforge.de and set the Delivery Method to UnifiedPush. I know that my explanation wasn't particularly great, but it should work. Will soon post a better guide to [email protected]