Skip to content
This repository

An example of how to use the LocalNotification plugin for Phonegap

branch: master
readme.md

PHONEGAP LOCALNOTIFICATION The Phonegap LocalNotification plugin is great, but the documentation is lacking - also explanation of how to do more than set a 60 second timer.

This example goes through in detail how to set a timer for the future based on hours and minutes, as well as days in the future - also setting up repeat events for daily, weekly, monthly, yearly.

It also explains how to create a callback to your app when it is launched from that notification.

the full write up is here:
http://www.drewdahlman.com/meusLabs/?p=117

NOTES:
A breakdown of options -

  • date ( this expects a date object )
  • message ( the message that is displayed )
  • repeat ( has the options of 'weekly','daily','monthly','yearly')
  • badge ( displays number badge to notification )
  • foreground ( a javascript function to be called if the app is running )
  • background ( a javascript function to be called if the app is in the background )
  • sound ( a sound to be played, the sound must be located in your project's resources and must be a caf file )

ADJUSTING AppDelegate
After you've added LocalNotifications to your plugins you need to make a minor addition to AppDelegate.m

Cordova 1.7+

    // ADD OUR NOTIFICATION CODE
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
    {

        UIApplicationState state = [application applicationState];
        if (state == UIApplicationStateActive) {
            // WAS RUNNING
            NSLog(@"I was currently active");

            NSString *notCB = [notification.userInfo objectForKey:@"foreground"];
            NSString *notID = [notification.userInfo objectForKey:@"notificationId"];

            NSString * jsCallBack = [NSString 
                                     stringWithFormat:@"%@(%@)", notCB,notID];  


            [self.viewController.webView  stringByEvaluatingJavaScriptFromString:jsCallBack];

            application.applicationIconBadgeNumber = 0;
        }
        else {
            // WAS IN BG
            NSLog(@"I was in the background");

            NSString *notCB = [notification.userInfo objectForKey:@"background"];
            NSString *notID = [notification.userInfo objectForKey:@"notificationId"];

            NSString * jsCallBack = [NSString 
                                     stringWithFormat:@"%@(%@)", notCB,notID]; 
            [self.viewController.webView stringByEvaluatingJavaScriptFromString:jsCallBack];         

            application.applicationIconBadgeNumber = 0;
        }                 
    }

Phonegap

    // ADD OUR NOTIFICATION CODE
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
    {

        UIApplicationState state = [application applicationState];
        if (state == UIApplicationStateActive) {
            // WAS RUNNING
            NSLog(@"I was currently active");

            NSString *notCB = [notification.userInfo objectForKey:@"foreground"];
            NSString *notID = [notification.userInfo objectForKey:@"notificationId"];

            NSString * jsCallBack = [NSString 
                                     stringWithFormat:@"%@(%@)", notCB,notID];  


            [self.webView  stringByEvaluatingJavaScriptFromString:jsCallBack];

            application.applicationIconBadgeNumber = 0;
        }
        else {
            // WAS IN BG
            NSLog(@"I was in the background");

            NSString *notCB = [notification.userInfo objectForKey:@"background"];
            NSString *notID = [notification.userInfo objectForKey:@"notificationId"];

            NSString * jsCallBack = [NSString 
                                     stringWithFormat:@"%@(%@)", notCB,notID]; 

            [self.webView stringByEvaluatingJavaScriptFromString:jsCallBack];         

            application.applicationIconBadgeNumber = 0;
        }                 
    }

Add this code to the end of your AppDelegate.m file in order for the callback functions to work properly!

EXAMPLE

var d = new Date();
    d = d.getTime() + 60*1000; //60 seconds from now
    d = new Date(d);

window.plugins.localNotification.add({
    date: d, // your set date object
    message: 'Hello world!',
    repeat: 'weekly', // will fire every week on this day
    badge: 1,
    foreground:'foreground',
    background:'background',
    sound:'sub.caf'
});

function foreground(id){
    console.log("I WAS RUNNING ID="+id);
}
function background(id){
    console.log("I WAS IN THE BACKGROUND ID="+id)
}


UPDATES: 5.16.2012

  • Added Notification ID's to callback.
  • Fixed spelling error for 'foreground'
  • Notice that you no longer have to call your background or foreground functions with the (). This is now added by the plugin on the objective-c side of things. 5.23.2013
  • Merged Code from Olivier Lesnicki. for 2.3+ support
  • Updated Readme
Something went wrong with that request. Please try again.