lovetodream / capacitor-plugin-siri-shortcuts

Capacitor Plugin for Siri Shortcuts
MIT License
18 stars 6 forks source link

ios xcode npm GitHub npm capacitor

Capacitor Plugin for Siri Shortcuts

šŸ’„ Breaking Changes

Version 6 of this Plugin only works with Capacitor 6.

šŸ”§ Setup

The Plugin requires at least iOS 12 and Xcode 10.

npm i capacitor-plugin-siri-shorts

iOS Project

Add a new Item to NSUserActivityTypes inside your Info.plist with your Bundle Identifier:

$(PRODUCT_BUNDLE_IDENTIFIER).shortcut

Extend the application:continueuserActivity,restorationHandler function inside your AppDelegate.swift with the following line:

NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "appLaunchBySiriShortcuts"), object: userActivity, userInfo: userActivity.userInfo))

Put this line before the return statement!

The function should look similar to that:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "appLaunchBySiriShortcuts"), object: userActivity, userInfo: userActivity.userInfo))
    return CAPBridge.handleContinueActivity(userActivity, restorationHandler)
}

āœØ Example Usage

A full Ionic + Angular example is available here

Basic example of the donate function:

import { SiriShortcuts } from 'capacitor-plugin-siri-shorts';

...

someAction() {
  SiriShortcuts.donate({
    persistentIdentifier: "someIdentifier",
    title: "A descriptive title"
  })
}

It's recommended to add a listener into the initializeApp() function inside app.component.ts.

initializeApp() {
  this.platform.ready().then(() => {

    ...

    SiriShortcuts.addListener('appLaunchBySiriShortcuts', (res) => {
      // do something with the response of the shortcut here
      console.log(res)
    });
  });
}

šŸ—ļø API Reference

* [`donate(...)`](#donate) * [`present(...)`](#present) * [`delete(...)`](#delete) * [`deleteAll()`](#deleteall) * [`addListener('appLaunchBySiriShortcuts', ...)`](#addlistenerapplaunchbysirishortcuts) * [`removeAllListeners()`](#removealllisteners) * [Interfaces](#interfaces) ### donate(...) ```typescript donate(options: Options) => Promise ``` Donates the provided action to Siri/Shortcuts | Param | Type | Description | | ------------- | ------------------------------------------- | ---------------------------------------------------------- | | **`options`** | Options | Options to specify for the donation | **Returns:** Promise<any> **Since:** 1.0.0 -------------------- ### present(...) ```typescript present(options: Options) => Promise ``` Presents a modal to the user to add the shortcut to siri and access it via voice | Param | Type | Description | | ------------- | ------------------------------------------- | ---------------------------------------------------------- | | **`options`** | Options | Options to specify for the donation | **Returns:** Promise<any> **Since:** 2.2.0 -------------------- ### delete(...) ```typescript delete(options: DeleteOptions) => Promise ``` Deletes the previous donations with the provided persistent identifiers | Param | Type | | ------------- | ------------------------------------------------------- | | **`options`** | DeleteOptions | **Since:** 2.1.0 -------------------- ### deleteAll() ```typescript deleteAll() => Promise ``` Delets all the previously donated activities **Since:** 2.1.0 -------------------- ### addListener('appLaunchBySiriShortcuts', ...) ```typescript addListener(eventName: 'appLaunchBySiriShortcuts', listenerFunc: (shortcut: Shortcut) => void) => Promise & PluginListenerHandle ``` Listens to events associated with Siri Shortcuts and notifies the listenerFunc if a Shortcuts has been executed. | Param | Type | Description | | ------------------ | -------------------------------------------------------------------- | ----------------------------------------------- | | **`eventName`** | 'appLaunchBySiriShortcuts' | Name of the event | | **`listenerFunc`** | (shortcut: Shortcut) => void | Function to execute when listener gets notified | **Returns:** Promise<PluginListenerHandle> & PluginListenerHandle **Since:** 2.0.1 -------------------- ### removeAllListeners() ```typescript removeAllListeners() => Promise ``` Remove all listeners for this plugin. **Since:** 2.0.1 -------------------- ### Interfaces #### Options Options to specify for the donation | Prop | Type | Description | | ------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`persistentIdentifier`** | string | Specify an identifier to uniquely identify the shortcut, in order to be able to remove it | | **`title`** | string | Specify a title for the shortcut, which is visible to the user as the name of the shortcut | | **`userInfo`** | UserInfo | Provide a key-value object that contains information about the shortcut, this will be returned in the getActivatedShortcut method. It is not possible to use the persistentIdentifier key, it is used internally | | **`suggestedInvocationPhrase`** | string | Specify the phrase to give the user some inspiration on what the shortcut to call | | **`isEligibleForSearch`** | boolean | This value defaults to true, set this value to make it searchable in Siri | | **`isEligibleForPrediction`** | boolean | This value defaults to true, set this value to set whether the shortcut eligible for prediction | #### UserInfo #### DeleteOptions Options to specify for a deletion | Prop | Type | Description | | ----------------- | --------------------- | ------------------------------------------------------- | | **`identifiers`** | string[] | Array of persistent identifiers which should be deleted | #### PluginListenerHandle | Prop | Type | | ------------ | ----------------------------------------- | | **`remove`** | () => Promise<void> | #### Shortcut Object which will be returned by the listener which contains the persistent identifier and the userinfo of a shortcut | Prop | Type | | -------------------------- | ------------------- | | **`persistentIdentifier`** | string |