Note: Tested on Cordova 2.9 and 2.9.1 (Android 4.2)
The essential purpose of local notifications is to enable an application to inform its users that it has something for them — for example, a message or an upcoming appointment — when the application isn’t running in the foreground.
They are scheduled by an application and delivered on the same device.
Users see notifications in the following ways:
- Displaying an alert or banner
- Badging the app’s icon
- Playing a sound
Local notifications are ideally suited for applications with time-based behaviors, such as calendar and to-do list applications. Applications that run in the background for the limited period allowed by iOS might also find local notifications useful.
For example, applications that depend on servers for messages or data can poll their servers for incoming items while running in the background; if a message is ready to view or an update is ready to download, they can then present a local notification immediately to inform their users.
The purpose of the plugin is to create an platform independent javascript interface for Cordova based mobile applications to access the specific API on each platform.
-
iOS
See Local and Push Notification Programming Guide for detailed informations and screenshots. -
Android (SDK >=11)
See Notification Guide for detailed informations and screenshots. -
WP8
See Local notifications for Windows Phone for detailed informations and screenshots.
Windows Phone 8.0 has no notification center. Instead local notifications are realized through live tiles updates.
To use this plugin, you need to perform the following steps:
- Copy
www/local-notification.js
file to yourwww
folder and include it in yourindex.html
- Create a package e.g
com.example.localNotification
in yoursrc
folder - Copy all
src/android/*.java
files into this package - Modify the following in
Receiver.java
:
- Change
YourClass.class
online 152
to your class where the intent will be called.
- Update your
res/xml/config.xml
file, include the following line within theplugins
tag:
<plugin name="LocalNotification" value="com.example.LocalNotification" />
- Add the following fragment in your
AndroidManifest.xml
:
- Add
android:launchMode="singleTop"
attribute to youractivity
tag. - Add the following lines just before the
application
tag closes:
<receiver android:name="com.example.Receiver" >
</receiver>
<receiver android:name="com.example.Restore" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
The first part tells Android to launch the AlarmReceiver class when the alarm is be triggered. This will also work when the application is not running.
The second part restores all added alarms upon device reboot (because Android 'forgets' all alarms after a restart).
The plugin and its methods are not available before the deviceready event has been fired.
document.addEventListener('deviceready', function () {
// window.plugin.notification.local is now available
}, false);
Scheduling a local notification will override the previously one with the same ID. All properties are optional. If no date object is given, the notification pops-up immediately.
Note: On Android the notification id needs to be a string which can be converted to a number. If the ID has an invalid format, it will be ignored, but canceling the notification will fail.
- See the onadd event of how a listener can be registered to be notified when a local notification has been scheduled.
- See the ontrigger event of how a listener can be registered to be notified when a local notification has been triggered.
- See the onclick event of how a listener can be registered to be notified when the user has been clicked on a local notification.
- See the [platform specific properties][platform_specific_properties] of which other properties are available too.
- See getDefaults of which property values are used by default and setDefaults of how to override them.
- See the examples of how to schedule local notifications.
notification.add({
id: String, // A unique id of the notifiction
date: Date, // This expects a date object
message: String, // The message that is displayed
title: String, // The title of the message
repeat: String, // Either 'secondly', 'minutely', 'hourly', 'daily', 'weekly', 'monthly' or 'yearly'
badge: Number, // Displays number badge to notification
sound: String, // A sound to be played
json: String, // Data to be passed through the notification
autoCancel: Boolean, // Setting this flag and the notification is automatically canceled when the user clicks it
ongoing: Boolean, // Prevent clearing of notification (Android only)
});
The following example shows how to schedule a local notification which will be triggered every week on this day, 60 seconds from now.
<script type="text/javascript">
var notification = cordova.require("cordova/plugin/localNotification");
document.addEventListener("deviceready", appReady, false);
function appReady() {
var now = new Date().getTime(),
_60_seconds_from_now = new Date(now + 60*1000);
notification.add({
id: 1,
title: 'Reminder',
message: 'Dont forget to buy some flowers.',
repeat: 'weekly',
date: _60_seconds_from_now
});
}
</script>
Local notifications can be canceled through the notification.cancel
interface.
Note that only local notifications with an ID can be canceled.
- See the oncancel event of how a listener can be registered to be notified when a local notification has been canceled.
- See getScheduledIds of how to retrieve a list of IDs of all scheduled local notifications.
notification.cancel(ID);
All local notifications can be canceled through the notification.cancelAll
interface.
The method cancels all local notifications even if they have no ID.
- See the oncancel event of how a listener can be registered to be notified when a local notification has been canceled.
notification.cancelAll();
To check if a notification with an ID is scheduled, the notification.isScheduled
interface can be used.
The method takes the ID of the local notification as an argument and a callback function to be called with the result.
- See getScheduledIds of how to retrieve a list of IDs of all scheduled local notifications.
notification.isScheduled(id, function (isScheduled) {
// console.log('Notification with ID ' + id + ' is scheduled: ' + isScheduled);
});
To retrieve the IDs from all currently scheduled local notifications, the notification.isScheduled
interface can be used.
The method takes a callback function to be called with the result as an array of IDs.
notification.getScheduledIds( function (scheduledIds) {
// alert('Scheduled IDs: ' + scheduledIds.join(' ,'));
});
The default values of the local notification properties can be retrieved through the notification.getDefaults
interface.
The method returns an object of values for all available local notification properties on the platform.
- See setDefaults of how to override the default values.
notification.getDefaults(); // => Object
The default values of the local notification properties can be set through the notification.setDefaults
interface.
The method takes an object as argument.
- See the add interface and the [platform specific properties][platform_specific_properties] to get an overview about all available local notification properties.
- See the [example][setdefaults_example] of how to override default values.
notification.setDefaults(Object);
The notification.onadd
interface can be used to get notified when a local notification has been scheduled.
The listener has to be a function and takes the following arguments:
- id: The ID of the notification
- state: Either background or foreground
- json: A custom (JSON encoded) string
Note: The event is only being invoked in background if the app is not suspended!
- See the ontrigger event of how a listener can be registered to be notified when a local notification has been triggered.
notification.onadd = function (id, state, json) {};
The notification.ontrigger
interface can be used to get notified when a local notification has been triggered.
The listener has to be a function and takes the following arguments:
- id: The ID of the notification
- state: Either background or foreground
- json: A custom (JSON encoded) string
Note: The event is only being invoked in background if the app is running and is not suspended!
- See the onclick event of how a listener can be registered to be notified when the user has been clicked on a local notification.
notification.ontrigger = function (id, state, json) {};
The notification.onclick
interface can be used to get notified when the user has been clicked on a local notification.
The listener has to be a function and takes the following arguments:
- id: The ID of the notification
- state: Either background or foreground
- json: A custom (JSON encoded) string
Note: The event is only being invoked in background if the app is not suspended!
- The autoCancel property can be used to either automatically cancel the local notification or not after it has been clicked by the user.
window.plugin.notification.local.onclick = function (id, state, json) {};
The notification.oncancel
interface can be used to get notified when a local notification has been canceled.
The listener has to be a function and takes the following arguments:
- id: The ID of the notification
- state: Either background or foreground
- json: A custom (JSON encoded) string
Note: The event is not being invoked if the local notification has been cleared in the notification center.
- The autoCancel property can be used to either automatically cancel the local notification or not after it has been clicked by the user.
- See cancel and cancelAll of how to cancel local notifications manually.
notification.oncancel = function (id, state, json) {};
The example below shows how to schedule a local notification which will be triggered immediatly.
notification.add({ message: 'Great app!' });
By default the system sound for local notifications will be used. To turn off any sound the sound property has to be set to NULL.
notification.add({ sound: null });
If needed local notifications can be scheduled with any user data. That data can be accessed on each event listener. But cannot be modified later.
notification.add({
id: 1,
message: 'I love BlackBerry!',
json: JSON.stringify({ test: 123 })
});
window.plugin.notification.local.onclick = function (id, state, json) {
console.log(id, JSON.parse(json).test);
}
The following example shows how to override the default value of the autoCancel property.
window.plugin.notification.local.setDefaults({ autoCancel: true });
By default all notifications will display the app icon. But an specific icon can be defined through the icon
and smallIcon
properties.
/**
* Displays the <package.name>.R.drawable.ic_launcher icon
*/
window.plugin.notification.local.add({ icon: 'ic_launcher' });
/**
* Displays the android.R.drawable.ic_dialog_email icon
*/
window.plugin.notification.local.add({ smallIcon: 'ic_dialog_email' });
The sound must be a absolute or relative Uri pointing to the sound file. The default sound is RingtoneManager.TYPE_NOTIFICATION
.
Note: Local sound files must be placed into the res-folder and not into the assets-folder.
/**
* Plays the `beep.mp3` which has to be located in the res folder
*/
notification.add({ sound: 'android.resource://' + package_name + '/raw/beep' });
/**
* Plays a remote sound
*/
notification.add({ sound: 'http://remotedomain/beep.mp3' });
/**
* Plays a sound file which has to be located in the android_assets folder
*/
notification.add({ sound: '/www/audio/beep.mp3' });
/**
* Plays the `RingtoneManager.TYPE_ALARM` sound
*/
notification.add({ sound: 'TYPE_ALARM' });
You can package the audio data in an aiff, wav, or caf file. Then, in Xcode, add the sound file to your project as a nonlocalized resource of the application bundle. You may use the afconvert tool to convert sounds.
Note: The right to play notification sounds in the notification center settings has to be granted.
Note: Custom sounds must be under 30 seconds when played. If a custom sound is over that limit, the default system sound is played instead.
/**
* Plays the `beep.mp3` which has to be located in the root folder of the project
*/
notification.add({ sound: 'beep.caf' });
/**
* Plays the `beep.mp3` which has to be located in the www folder
*/
notification.add({ sound: 'www/sounds/beep.caf' });
LiveTile's have the ability to display images for different sizes. These images can be defined through the smallImage
, image
and wideImage
properties.
Note: An image must be defined as a relative or absolute URI. They can be restored to the default ones by canceling the notification.
/**
* Displays the application icon as the livetile's background image
*/
notification.add({ image: 'appdata:ApplicationIcon.png' })
To specify a custom interval, the repeat
property can be assigned with an number in minutes.
/**
* Schedules the notification quarterly every 15 mins
*/
notification.add({ repeat: 15 });
Each application on a device is limited to 64 scheduled local notifications.
The system discards scheduled notifications in excess of this limit, keeping only the 64 notifications that will fire the soonest. Recurring notifications are treated as a single notification.
After deploying/replacing the app on the device via Xcode no callback for previously scheduled local notifications aren't fired.
The right to play notification sounds in the notification center settings has to be granted.
An application can only display one notification at a time. Each time a new notification has to be added, the application live tile's data will be overwritten by the new ones.
Along with Cordova 3.2 and Windows Phone 8 the version.bat
script has to be renamed to version
.
On Mac or Linux
mv platforms/wp8/cordova/version.bat platforms/wp8/cordova/version
On Windows
ren platforms\wp8\cordova\version.bat platforms\wp8\cordova\version
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
This software is released under the Apache 2.0 License.
© 2013-2014 appPlant UG, Inc. All rights reserved