2.0.1 • Published 8 months ago

cordova-plugin-ios-app-delegate-events v2.0.1

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
8 months ago

npm version

Cordova App Delegate Events Plugin for iOS

The purpose of this plugin is to broadcast iOS-specific application delegate events, so that 3rd party plugins can listen to them.

The reason is that iOS applications are only allowed to register one instance of each delegate method so if 2 or more plugins declare an instance of the same delegate method, only one of these will be called at run-time, leading to some plugins failing to function correctly.

This plugin solves this problem by implementing its own instances of supported app delegate methods, then rebroadcasts calls to the method as events via the NSNotificationCenter which multiple other plugins can register to listen for and handle simultaneously.

The instances of app delegate methods defined by this plugin use method swizzling in case any other plugins define the same delegate methods in order to avoid overwriting them.

As of right now it's possible to add observers for these events:

Feel free to submit an PR to broadcast additional events.

Usage

To make use of the app delegate events in your plugin, follow these steps:

1. Add and install the plugin as a dependency

Add this plugin as a dependency of your plugin.

<!-- plugin.xml -->

<dependency id="cordova-plugin-ios-app-delegate-events" />

2. Add the protocol to the plugin's interface

Indicate your plugin's interest to receive app events by adding the APPAppEventDelegate protocol.

Objective-C plugin

// MyCordovaPlugin.h

#import "APPAppEventDelegate.h"
#import <Cordova/CDVPlugin.h>

@interface APPLocalNotification : CDVPlugin <APPAppEventDelegate>

@implementation MyCordovaPlugin

...

@end

Swift plugin

// MyCordovaPlugin-Bridging-Header.h

#import "APPAppEventDelegate.h"
#import "AppDelegate+APPAppEvent.h"

...

@end
// MyCordovaPlugin.swift

@objc(MyCordovaPlugin) class MyCordovaPlugin: CDVPlugin, APPAppEventDelegate {
...
}

3. Add observer methods for the delegated events

To add an observer you need to define a method to handle the app delegate event and register it as a listener for that event during plugin initialization.

For example, to receive the continueUserActivity event, you'd register a method to handle UIApplicationContinueUserActivity events:

Objective-C plugin

// MyCordovaPlugin.m

#import "AppDelegate+APPAppEvent.h"

@implementation MyCordovaPlugin

- (void)pluginInitialize {
  [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(myContinueUserActivityHandler:) 
    name:UIApplicationContinueUserActivity object:nil
  ];
}

- (void) myContinueUserActivityHandler:(NSNotification*)notification{
  
     NSUserActivity* userActivity = notification.object;
     
     // Do something with the user activity
}

@end

Swift plugin

// MyCordovaPlugin.swift

@objc(MyCordovaPlugin) class MyCordovaPlugin: CDVPlugin, APPAppEventDelegate {

    override func pluginInitialize() {
        NotificationCenter.default.addObserver(
          self,
          selector: #selector(myContinueUserActivityHandler(_:)),
          name: NSNotification.Name(rawValue: UIApplicationContinueUserActivity),
          object: nil
        )
    }
    
    @objc(myContinueUserActivityHandler:) func myContinueUserActivityHandler(_ notification: NSNotification) {
        let userActivity = notification.object as! NSUserActivity
        
        // Do something with the user activity
    }
}

License

This software is released under the Apache 2.0 License.

© 2024 Working Edge Ltd. All rights reserved © 2013-2017 appPlant GmbH, Inc. All rights reserved