With android oreo, there are restrictions on background services (https://developer.android.com/about/versions/oreo/background). My understanding is that push notifications use a background service. (Yes, android oreo also imposes some extra overhead for notifications with something called channels, I don't believe those details affect push notifications.)
The basic of a push notification is that there is an open tcp connection to a server somewhere. At some point, that server sends a message over this open tcp connection, it is received by some code, and processed accordingly, usually resulting in running code that produces a notification on the device.
When an app goes into the background, it has a window of several minutes in which it is still allowed to create and use services. At the end of that window, the app is considered to be idle. At this time, the system stops the app's background services, just as if the app had called the services' Service.stopSelf() methods.
A simple app can simply create a background service and implement this behavior. At some point later (several minutes apparently), the background services will simply be stopped.
It also says this.
In many cases, your app can replace background services with JobScheduler jobs.
This sounds like polling and not suitable for push notifications.
Do these restrictions eliminate the possibility of push notifications? If not, how would they be implemented? Can they be implemented without using Firebase Cloud Messaging?