/Phonegap-LocalNotification

An example of how to use the LocalNotification plugin for Phonegap

Primary LanguageJavaScript

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