greenygh0st / capacitor-plugin-silent-notifications

Capacitor plugin designed to allow silent push notifications on iOS.
2 stars 3 forks source link
capacitorjs ios push-notifications

capacitor-plugin-silent-notifications

Allows a Capacitor application to handle iOS remote/silent push notifications.

Prerequisites

Install

npm link

npm install capacitor-plugin-silent-notifications
npx cap sync

Add to AppDelete.swift

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    // debug
    print("Received by: didReceiveRemoteNotification w/ fetchCompletionHandler")

    // Perform background operation, need to create a plugin
    NotificationCenter.default.post(name: Notification.Name(rawValue: "silentNotificationReceived"), object: nil, userInfo: userInfo)

    // Give the listener a few seconds to complete, system allows for 30 - we give 25. The system will kill this after 30 seconds.
    DispatchQueue.main.asyncAfter(deadline: .now() + 25) {
        // Execute after 25 seconds
        completionHandler(.newData)
    }
}

// we just add this to deal with an iOS simulator bug, this method is deprecated as of iOS 13
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    // debug
    print("Received by: performFetchWithCompletionHandler")

    // Perform background operation, need to create a plugin
    NotificationCenter.default.post(name: Notification.Name(rawValue: "silentNotificationReceived"), object: nil, userInfo: nil)

    // Give the listener a few seconds to complete, system allows for 30 - we give 25. The system will kill this after 30 seconds.
    DispatchQueue.main.asyncAfter(deadline: .now() + 25) {
        // Execute after 25 seconds
        completionHandler(.newData)
    }
}

Add the listener to your Capacitor app

import { CapacitorSilentNotifications } from 'capacitor-plugin-silent-notifications'

CapacitorSilentNotifications.addListener('silentNotificationReceived', async (payload) => {
    // do something with the notification payload here
    console.log('silentNotificationReceived', payload);
});

API

* [`addListener('silentNotificationReceived', ...)`](#addlistenersilentnotificationreceived) * [`removeAllListeners()`](#removealllisteners) * [Interfaces](#interfaces) ### addListener('silentNotificationReceived', ...) ```typescript addListener(eventName: 'silentNotificationReceived', listenerFunc: (payload: any) => void) => Promise & PluginListenerHandle ``` Listens to events associated with Silent Notifications and notifies the listenerFunc if a background notification has been received. | Param | Type | Description | | ------------------ | ----------------------------------------- | ----------------------------------------------- | | **`eventName`** | 'silentNotificationReceived' | Name of the event | | **`listenerFunc`** | (payload: any) => void | Function to execute when listener gets notified | **Returns:** Promise<PluginListenerHandle> & PluginListenerHandle **Since:** 1.0.0 -------------------- ### removeAllListeners() ```typescript removeAllListeners() => Promise ``` Remove all listeners for this plugin. **Since:** 1.0.0 -------------------- ### Interfaces #### PluginListenerHandle | Prop | Type | | ------------ | ----------------------------------------- | | **`remove`** | () => Promise<void> |