So - I also had the same issue and implemented 1. and it seems to be working for me.
Here's the gist of it for anyone struggling with this.
1. Use workbox background sync library. Create the plugin / queue as needed.
2. Use a broadcast message API to send a message to the service worker.
3. Inside the message listener at the SW side, call replayRequests() on the queue / plugin._queue object.
I tested this on a webview in android and seems to be working as of now.