add local notification api schedule and present

Summary:
Add local notifications to the push library.
```
  var PushNotificationIOS = React.PushNotificationIOS;
  PushNotificationIOS.requestPermissions();

  var notification = {
    "fireDate": Date.now() + 10000,
    "alertBody":"Whats up pumpkin"
  };

  PushNotificationIOS.scheduleLocalNotification(notification);
 //lock screen or move away from app
```

Apple has another api for pushing immediately instead of scheduling, like when your background delegate has been called with some new data (bluetooth, location, etc)
```
  var PushNotificationIOS = React.PushNotificationIOS;
  PushNotificationIOS.requestPermissions();

  var notification = {
    "alertBody":"Whats up pumpkin"
  };

  PushNotificationIOS.presentLocalNotification(notification);
 //lock screen or move away from app
```

Closed https://github.com/facebook/react-native/pull/843 looks related:

See https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/ for much more available in
Closes https://github.com/facebook/react-native/pull/1616
Github Author: Jacob Rosenthal <jakerosenthal@gmail.com>
This commit is contained in:
Jacob Rosenthal 2015-07-14 09:07:24 -07:00
parent 9936a2406d
commit a8cb47e011
2 changed files with 54 additions and 0 deletions

View File

@ -36,6 +36,31 @@ class PushNotificationIOS {
_sound: string; _sound: string;
_badgeCount: number; _badgeCount: number;
/**
* Schedules the localNotification for immediate presentation.
*
* details is an object containing:
*
* - `alertBody` : The message displayed in the notification alert.
*
*/
static presentLocalNotification(details: Object) {
RCTPushNotificationManager.presentLocalNotification(details);
}
/**
* Schedules the localNotification for future presentation.
*
* details is an object containing:
*
* - `fireDate` : The date and time when the system should deliver the notification.
* - `alertBody` : The message displayed in the notification alert.
*
*/
static scheduleLocalNotification(details: Object) {
RCTPushNotificationManager.scheduleLocalNotification(details);
}
/** /**
* Sets the badge number for the app icon on the home screen * Sets the badge number for the app icon on the home screen
*/ */

View File

@ -10,6 +10,7 @@
#import "RCTPushNotificationManager.h" #import "RCTPushNotificationManager.h"
#import "RCTBridge.h" #import "RCTBridge.h"
#import "RCTConvert.h"
#import "RCTEventDispatcher.h" #import "RCTEventDispatcher.h"
#import "RCTUtils.h" #import "RCTUtils.h"
@ -26,6 +27,19 @@
NSString *const RCTRemoteNotificationReceived = @"RemoteNotificationReceived"; NSString *const RCTRemoteNotificationReceived = @"RemoteNotificationReceived";
NSString *const RCTRemoteNotificationsRegistered = @"RemoteNotificationsRegistered"; NSString *const RCTRemoteNotificationsRegistered = @"RemoteNotificationsRegistered";
@implementation RCTConvert (UILocalNotification)
+ (UILocalNotification *)UILocalNotification:(id)json
{
NSDictionary *details = [self NSDictionary:json];
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [RCTConvert NSDate:details[@"fireDate"]] ?: [NSDate date];
notification.alertBody = [RCTConvert NSString:details[@"alertBody"]];
return notification;
}
@end
@implementation RCTPushNotificationManager @implementation RCTPushNotificationManager
{ {
NSDictionary *_initialNotification; NSDictionary *_initialNotification;
@ -139,11 +153,15 @@ RCT_EXPORT_METHOD(requestPermissions:(NSDictionary *)permissions)
} }
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
id notificationSettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; id notificationSettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
[[UIApplication sharedApplication] registerForRemoteNotifications]; [[UIApplication sharedApplication] registerForRemoteNotifications];
#else #else
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:types]; [[UIApplication sharedApplication] registerForRemoteNotificationTypes:types];
#endif #endif
} }
@ -183,4 +201,15 @@ RCT_EXPORT_METHOD(checkPermissions:(RCTResponseSenderBlock)callback)
}; };
} }
RCT_EXPORT_METHOD(presentLocalNotification:(UILocalNotification *)notification)
{
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
RCT_EXPORT_METHOD(scheduleLocalNotification:(UILocalNotification *)notification)
{
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
@end @end