We coded two variations of this: (i) uses Google's delivery but we encrypt the msg so that Google doesn't know anything about the package and (ii) an UnifiedPush API where users can put their own Notification servers up.
Google's system definitely uses less battery, but UnifiedPush is more decentralizing since there is no need to provide any central push service/relay.
We also tested leaving one websocket connection active at all times, but that connection alone was consuming ~5% of battery by the end of the day 🫤