Hey community,
I tried to implement Quick Actions Home Screen for the app (ionic, capacitor, Angular - latest version at the moment). I didn’t find standard plugins for Capacitor to make it possible. I used to try: App, AppLauncher, Platform plugins and called listening events. It didn’t work.
After that I added 1 method to ios/App/App/AppDelegate.swift and saw the first result, but when the app was launched only. If not, could find a solution.
Do you know a solution for quick actions? Looking forward for any help which you could provide.
Many thanks.
- ios/App/App/Info.plist
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeCompose</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Your app, your way</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Customize App Icon</string>
<key>UIApplicationShortcutItemType</key>
<string>my.quick.action1</string>
</dict>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeLove</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Favorite affirmations</string>
<key>UIApplicationShortcutItemTitle</key>
<string>View Favorites</string>
<key>UIApplicationShortcutItemType</key>
<string>my.quick.action2</string>
</dict>
</array>
- ios/App/App/AppDelegate.swift:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
handleQuickAction(shortcutItem)
completionHandler(true)
}
func handleQuickAction(_ shortcutItem: UIApplicationShortcutItem) {
let bridge = (self.window?.rootViewController as! CAPBridgeViewController).bridge
switch shortcutItem.type {
case "my.quick.action1":
bridge?.eval(js: "window.dispatchEvent(new CustomEvent('openCustomizeIcon'));")
case "my.quick.action2":
bridge?.eval(js: "window.dispatchEvent(new CustomEvent('openFavorites'));")
default:
print("Quick Action: Unknown action triggered")
}
}
- src/app/pages/settings-modal/settings-modal.page.ts
ngAfterViewInit() {
// alert('ngAfterViewInit');
window.addEventListener('openCustomizeIcon', () => {
// alert('openCustomizeIcon');
this.openCustomizeIcon();
});
window.addEventListener('openFavorites', () => {
// alert('openFavorites');
this.openFavorites();
});
}