All code is Python, hence the source code is javascript, but is now “converted” and modified to python and anvil.
To get notifications you simply press the subscribe button and you will get prompted with YES/NO to turn on notifications.
If you want to “reset” the prompting for notifications, press the SSL lock, to the left side of the address bar (at least using Brave on desktop).
If you want to send a message to all subscribers you simply press the send message button.
I have tested the notifications on MacOS using the latest version of Safari, Brave and Google Chrome.
On mobile i have only tested on an iphone 8 and IOS 16.4 using safari. In safari it is important that the website is added to Homescreen.
If you don’t get any notifications on your IOS device you might check out this link https://www.xda-developers.com/how-enable-safari-notifications-iphone/. Since Apple recently released this feature on IOS.
PS
I have updated the links to the project and the live app to a more “stable” version
I would very much appreciate feedback using other devices and browsers
Also, there are much more to explore regarding the notification. E.g icon, sound, vibration
This is great - we should think about adding it to anvil-labs service worker implementation.
One anvil.js coding point is that you don’t need to do anvil.js.await_promise in your example.
If you call a javascript function in python that returns a promise in javascript it will be awaited.
You only ever need anvil.js.await_promise with some more obscure javascript libraries/apis.
Specifically places where you access a Promise stored as a property on an object
e.g. this browser api for animation.
Where you access the finished property which is a Promise.
We use await_promise in the anvil_extras animation module to use this api.
Other note - be careful with your uninstall method
It looks like you’re uninstalling all service worker registrations
This includes the default registration from anvil which handles offline capabilities
the following might be better
registrations = self.navigator.serviceWorker.getRegistrations()
for reg in registrations:
if reg.scope.endswith("_/theme/"):
reg.unregister()
self.debug_log(reg)