Notification Scheduler Plugin allows scheduling of local notifications on the Android platform.
For iOS version, visit https://github.com/cengiz-pz/godot-ios-notification-scheduler-plugin .
Follow instructions on the following page to create a custom Android gradle build
Prior to using this plugin, a notification icon should be generated. For instructions please visit the following link:
There are 2 ways to install the Notification Scheduler
plugin into your project:
- Through the Godot Editor's AssetLib
- Manually by downloading archives from Github
Steps:
- search for and select the
Android Notification Scheduler
plugin in Godot Editor - click
Download
button - on the installation dialog...
- keep
Change Install Folder
setting pointing to your project's root directory - keep
Ignore asset root
checkbox checked - click
Install
button
- keep
- enable the plugin via the
Plugins
tab ofProject->Project Settings...
menu, in the Godot Editor
Steps:
- download release archive from Github
- unzip the release archive
- copy to your Godot project's root directory
- enable the plugin via the
Plugins
tab ofProject->Project Settings...
menu, in the Godot Editor
Copy your notification icon to your Godot project's android/build/res
directory.
Alternatively, you could use Android Studio
's Image Asset Studio
to generate your icon set.
Note: the notification icon resource should be of type drawable
Steps:
- Open your Godot project's
android/build
directory in Android Studio - Wait for it to fully load
- Right click on
res
folder and selectNew -> Image Asset
from the context menu - On the
Asset Studio
wizard- Set
Icon type
toNotification Icons
- Enter a the name of your notification icon (ie.
ic_my_notification
) - Configure your icon
- Click
Next
button - Click
Finish
button to confirm
- Set
- The following new directories should have been created under your Godot project's
android/build/res
directory:drawable-anydpi
drawable-xxhdpi
drawable-xhdpi
drawable-hdpi
drawable-mdpi
- Make sure you use the name you specified for your icons when initializing notifications:
my_notification_data.set_small_icon_name("<your_notification_icon_name_here>")
Add a NotificationScheduler
node to your scene and follow the following steps:
- Register listeners for the following signals emitted from the
NotificationScheduler
nodenotification_opened
- when user taps notification itempermission_granted
permission_denied
- At startup, using the
NotificationScheduler
node to check that the application has permissions to post notifications:
$NotificationScheduler.has_post_notifications_permission()
- If the application doesn't have permissions to post notifications, then request permission using the
NotificationScheduler
node:
$NotificationScheduler.request_post_notifications_permission()
permission_granted
signal will be emitted when the application receives the permissions
On Android, apps that target Android 13 or higher can ask for notification permission as many times as they want until the user explicitly denies the permission twice. If the user targets Android 12 or lower, the app can ask for permission as many times as it wants until the user denies the permission once. If the user denies the permission twice, the app can't ask again unless the user reinstalls the app
- After user has denied the request, you can ask to turn on notification permission manually and send them to App_Info screen using the
NotificationScheduler
node:(Best Practice: Don't promt users automatically, insted keep a button in settings to toggle notifications)
$NotificationScheduler.open_app_info_settings()
- Create a notification channel using the
NotificationScheduler
node:
$NotificationScheduler.create_notification_channel(
NotificationChannel.new()
.set_id("my_channel_id")
.set_name("My Channel Name")
.set_description("My channel description")
.set_importance(NotificationChannel.Importance.DEFAULT))
- Build
NotificationData
object:
var my_notification_data = NotificationData.new()
my_notification_data.set_id(__notification_id).\
set_channel_id("my_channel_id").\
set_title("My Notification Title").\
set_content("My notification content").\
set_small_icon_name("ic_name_of_the_icon_that_you_generated").\
set_delay(my_delay_in_seconds)
- Schedule notification using the
NotificationScheduler
node:
$NotificationScheduler.schedule(
my_notification_data
)
NotificationData
'sset_interval(interval_in_seconds)
method can be used for scheduling repeating notifications.NotificationData
'sset_deeplink(data)
method can be used for delivering URI data along with the notification.- The Deeplink Plugin can then be used to process the URI data.
cancel(notification_id)
get_notification_id()
- alternative way to get the ID of the last opened notification.
- Restore the following notification icons after
Android Build Template
is installed for the demo app.demo/android/build/res/drawable-anydpi-v24/ic_demo_notification.xml
demo/android/build/res/drawable-hdpi/ic_demo_notification.png
demo/android/build/res/drawable-mdpi/ic_demo_notification.png
demo/android/build/res/drawable-xhdpi/ic_demo_notification.png
demo/android/build/res/drawable-xxhdpi/ic_demo_notification.png
adb logcat
is one of the best tools for troubleshooting unexpected behavior
- use
$> adb logcat | grep 'godot'
on Linuxadb logcat *:W
to see warnings and errorsadb logcat *:E
to see only errorsadb logcat | grep 'godot|somethingElse'
to filter using more than one string at the same time
- use
#> adb.exe logcat | select-string "godot"
on powershell (Windows)
Also check out: https://docs.godotengine.org/en/stable/tutorials/platform/android/android_plugin.html#troubleshooting
Developed by Cengiz
Original repository: Godot Android Notification Scheduler Plugin