Я вообще хотел слать через сервисворкер пуши в бэкграунде. Оказалось, что в бэкграунде это возможно только через firebase. В примерах все через него и шлют, но опять же там не указано нигде, что если не нужно слать в бэкграунде, то можно и без firebase.
Сам по себе firebase тоже довольно запутанная штука. Везде предлагают ставить либу и использовать её. Какого либо АПИ, чтобы слать напрямую без либы я не нашёл.