capacitor-app-actions
v2.1.1
Published
iOS and Android Capacitor plugin for App Actions
Readme
Maintainers
| Maintainer | GitHub | Social | | -----------| -------| -------| | Nitish Sachar | uioporqwerty | LinkedIn |
Installation
npm install capacitor-app-actions
npx cap syncConfiguration
Android:
No additional configuration required.
iOS:
Capacitor 7+ apps use a SceneDelegate, so quick actions are delivered to the scene — not to AppDelegate. Add the following to ios/App/App/SceneDelegate.swift so the plugin is notified when an app action is selected. It covers both cases:
- Warm launch (app already running/backgrounded) — handled by
windowScene(_:performActionFor:). - Cold launch (app started by the quick action) — the shortcut arrives in
connectionOptions.shortcutItemwhen the scene connects.
The plugin retains the event until your JS listener subscribes, so cold-launch actions are delivered even though the scene connects before the web layer is ready.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
window?.rootViewController = CAPBridgeViewController()
window?.makeKeyAndVisible()
SceneDelegateProxy.shared.scene(scene, willConnectTo: session, options: connectionOptions)
// Cold launch: the app was started by tapping a quick action.
if let shortcutItem = connectionOptions.shortcutItem {
postAppAction(shortcutItem)
}
}
// Warm launch: the app was already running in the background.
func windowScene(_ windowScene: UIWindowScene,
performActionFor shortcutItem: UIApplicationShortcutItem,
completionHandler: @escaping (Bool) -> Void) {
postAppAction(shortcutItem)
completionHandler(true)
}
private func postAppAction(_ shortcutItem: UIApplicationShortcutItem) {
NotificationCenter.default.post(
name: NSNotification.Name("appActionReceived"),
object: nil,
userInfo: ["actionId": shortcutItem.type]
)
}Usage
Typically app actions are added at application startup, but you can add them where appropriate:
import { AppActions } from 'capacitor-app-actions';
await AppActions.set({
actions: [
{ id: 'order', title: 'Order', subtitle: 'Place an Order', icon: 'star.fill' },
{ id: 'locations', title: 'Find location', subtitle: 'Find nearby location', icon: 'star.fill' },
],
});Listen to an event triggered by an existing app action:
AppActions.addListener('order', (info) => {
// Do your in app work. Navigate to the appropriate page or trigger other in app actions.
});Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
