Bläddra i källkod

Added launchDetails object if app was launched by notification

Sebastián Katzer 8 år sedan
förälder
incheckning
82eb458e0f
3 ändrade filer med 41 tillägg och 11 borttagningar
  1. 2 0
      src/ios/APPLocalNotification.h
  2. 36 10
      src/ios/APPLocalNotification.m
  3. 3 1
      www/local-notification-util.js

+ 2 - 0
src/ios/APPLocalNotification.h

@@ -27,6 +27,8 @@
 
 @interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate>
 
+// Set launchDetails object
+- (void) launchDetails:(CDVInvokedUrlCommand*)command;
 // Execute all queued events
 - (void) deviceready:(CDVInvokedUrlCommand*)command;
 

+ 36 - 10
src/ios/APPLocalNotification.m

@@ -32,6 +32,7 @@
 @property (strong, nonatomic) UIApplication* app;
 @property (strong, nonatomic) UNUserNotificationCenter* center;
 @property (readwrite, assign) BOOL deviceready;
+@property (readonly, nonatomic, retain) NSArray* launchDetails;
 @property (readonly, nonatomic, retain) NSMutableArray* eventQueue;
 
 @end
@@ -43,6 +44,27 @@
 #pragma mark -
 #pragma mark Interface
 
+/**
+ * Set launchDetails object.
+ *
+ * @return [ Void ]
+ */
+- (void) launchDetails:(CDVInvokedUrlCommand*)command
+{
+    if (!_launchDetails)
+        return;
+
+    NSString* js;
+
+    js = [NSString stringWithFormat:
+          @"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}",
+          _launchDetails[0], _launchDetails[1]];
+
+    [self.commandDelegate evalJs:js];
+
+    _launchDetails = NULL;
+}
+
 /**
  * Execute all queued events.
  *
@@ -512,10 +534,10 @@
     [self.commandDelegate runInBackground:^{
         NSDictionary* options = command.arguments[0];
         APPNotificationContent* notification;
-        
+
         notification = [[APPNotificationContent alloc]
                         initWithOptions:options];
-        
+
         [_center addNotificationCategory:notification.category];
         [self execCallback:command];
     }];
@@ -533,7 +555,7 @@
     UNNotificationRequest* request = notification.request;
 
     [_center addNotificationCategory:notification.category];
-    
+
     [_center addNotificationRequest:request withCompletionHandler:^(NSError* e) {
         __strong APPLocalNotification* strongSelf = weakSelf;
         [strongSelf fireEvent:@"add" notification:request];
@@ -582,7 +604,7 @@
     UNNotificationRequest* notification = response.notification.request;
     NSString* action = response.actionIdentifier;
     NSString* event  = action;
-    
+
     completionHandler();
 
     if ([action isEqualToString:UNNotificationDefaultActionIdentifier]) {
@@ -591,11 +613,15 @@
     if ([action isEqualToString:UNNotificationDismissActionIdentifier]) {
         event = @"clear";
     }
-    
+
+    if (!deviceready && [event isEqualToString:@"click"]) {
+        _launchDetails = @[notification.options.id, event];
+    }
+
     if (![event isEqualToString:@"clear"]) {
         [self fireEvent:@"clear" notification:notification];
     }
-    
+
     [self fireEvent:event notification:notification];
 }
 
@@ -667,12 +693,12 @@
 - (void) fireEvent:(NSString*)event
       notification:(UNNotificationRequest*)request
 {
-    NSString* js;
-    NSString* appState = [self applicationState];
-    NSString* params   = [NSString stringWithFormat:@"\"%@\"", appState];
+    NSString *js, *args;
+    NSString *appState = [self applicationState];
+    NSString *params   = [NSString stringWithFormat:@"\"%@\"", appState];
 
     if (request) {
-        NSString* args = [request encodeToJSON];
+        args   = [request encodeToJSON];
         params = [NSString stringWithFormat:@"%@,'%@'", args, appState];
     }
 

+ 3 - 1
www/local-notification-util.js

@@ -302,11 +302,13 @@ exports.exec = function (action, args, callback, scope) {
 channel.deviceready.subscribe(function () {
     // Device is ready now, the listeners are registered
     // and all queued events can be executed.
-    exec(null, null, 'LocalNotification', 'deviceready', []);
+    exports.exec('deviceready');
 });
 
 // Called before 'deviceready' event
 channel.onCordovaReady.subscribe(function () {
+    // Store launchedBy notification
+    exports.exec('launchDetails');
     // Device plugin is ready now
     channel.onCordovaInfoReady.subscribe(function () {
         // Merge platform specifics into defaults