A Kotlin/Compose Multiplatform library for effortless alarm and local notification scheduling on both Android and iOS.
Be sure to show your support by starring ⭐️ this repository, and feel free to contribute if you're interested!
In your build.gradle.kts
file, add Maven Central to your repositories:
repositories {
mavenCentral()
}
Then add Alarmee dependency to your module:
- With version catalog, open
libs.versions.toml
:
[versions]
alarmee = "1.2.0" // Check latest version
[libraries]
alarmee = { group = "io.github.tweener", name = "alarmee", version.ref = "alarmee" }
Then in your module build.gradle.kts
add:
dependencies {
implementation(libs.alarmee)
}
- Without version catalog, in your module
build.gradle.kts
add:
dependencies {
val alarmee_version = "1.2.0" // Check latest version
implementation("io.github.tweener:alarmee:$alarmee_version")
}
In the commonModule
, you need to use an instance of a subclass of AlarmeeScheduler
. Each platform will create the corresponding subclass of the AlarmeeScheduler
. This can be easily done with dependency injection.
🤖 Android
In the androidMain
module, create a AlarmeeAndroidPlatformConfiguration(...)
instance with the following parameters:
val platformConfiguration: AlarmeePlatformConfiguration = AlarmeeAndroidPlatformConfiguration(
notificationIconResId = R.drawable.ic_notification,
notificationChannels = listOf(
AlarmeeNotificationChannel(
id = "dailyNewsChannelId",
name = "Daily news notifications",
importance = NotificationManager.IMPORTANCE_HIGH
),
AlarmeeNotificationChannel(
id = "breakingNewsChannelId",
name = "Breaking news notifications",
importance = NotificationManager.IMPORTANCE_LOW
),
// List all the notification channels you need here
)
)
🍎 iOS
In your iosMain
module, create a AlarmeeIosPlatformConfiguration
:
val platformConfiguration: AlarmeePlatformConfiguration = AlarmeeIosPlatformConfiguration
Before using Alarmee, make sure the Notifications permission is granted on the target platform (Android official documentation, iOS official documentation).
Alternativally, you can use moko-permissions
to easily handle permissions for you.
Depending on your project configuration, you can create an instance of AlarmeeScheduler
in two different ways:
Kotlin Multplatform (without Compose)
- 🤖 Android
Create an instance of
AlarmeeSchedulerAndroid
with the configuration created previously:
val alarmeeScheduler: AlarmeeScheduler = AlarmeeSchedulerAndroid(context = context, platformConfiguration = platformConfiguration)
- 🍎 iOS
Create an instance of
AlarmeeSchedulerIos
with the configuration created previously:
val alarmeeScheduler: AlarmeeScheduler = AlarmeeSchedulerIos(platformConfiguration = platformConfiguration)
Compose Multplatform
Using rememberAlarmeeScheduler(...)
with the configuration created previously:
val alarmeeScheduler: AlarmeeScheduler = rememberAlarmeeScheduler(platformConfiguration = platformConfiguration)
You can schedule an alarm to be triggered at a specific time of the day, using Alarmee#schedule(...)
. When the alarm is triggered, a notification will be displayed.
For instance, to schedule an alarm on January 12th, 2025, at 5 PM:
alarmeeScheduler.schedule(
alarmee = Alarmee(
uuid = "myAlarmId",
notificationTitle = "🎉 Congratulations! You've schedule an Alarmee!",
notificationBody = "This is the notification that will be displayed at the specified date and time.",
scheduledDateTime = LocalDateTime(year = 2025, month = Month.JANUARY, dayOfMonth = 12, hour = 17, minute = 0),
androidNotificationConfiguration = AndroidNotificationConfiguration( // Required confiuration for Android target only (this parameter is ignored on iOS)
priority = AndroidNotificationPriority.HIGH,
channelId = "dailyNewsChannelId",
)
)
)
You can specify a RepeatInterval
parameter, which allows scheduling an alarm to repeat hourly, daily, weekly, monthly, or yearly, based on the specified scheduledDateTime.
For instance, to schedule an alarm to repeat every day at 9:30 AM, you can use RepeatInterval.DAILY
:
alarmeeScheduler.schedule(
alarmee = Alarmee(
uuid = "myAlarmId",
notificationTitle = "🔁 Congratulations! You've schedule a repeating Alarmee!",
notificationBody = "This is the notification that will be displayed every day at 09:30.",
scheduledDateTime = LocalDateTime(year = 2025, month = Month.JANUARY, dayOfMonth = 12, hour = 9, minute = 30), // In this case, year, month and dayOfMonth are ignored
repeatInterval = RepeatInterval.DAILY, // Will schedule an alarm every day
androidNotificationConfiguration = AndroidNotificationConfiguration( // Required confiuration for Android target only (this parameter is ignored on iOS)
priority = AndroidNotificationPriority.DEFAULT,
channelId = "dailyNewsChannelId",
)
)
)
An alarm can be cancelled using its uuid, using Alarmee#cancel(...)
. If an alarm with the specified uuid is found, it will be canceled, preventing any future notifications from being triggered for that alarm.
alarmeeScheduler.cancel(uuid = "myAlarmId")
We love your input and welcome any contributions! Please read our contribution guidelines before submitting a pull request.
- Logo by Freeicons
Alarmee is licensed under the Apache-2.0.