Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

expo-notifee-plugin

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

expo-notifee-plugin

Plugin to create a Notification Service extension in order to let Notifee mutate remote notifications

  • 1.0.7
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

🖲 expo-notifee-plugin

Expo platforms GitHub npm

⭐️ Features

iOS

Android

🔧 Installation

Yarn:

yarn add expo-notifee-plugin

NPM:

npm install --save expo-notifee-plugin

🎛 Setup

  1. Add it to your plugins in your app.json file:
{
  "expo": {
    "plugins": [
      [
        "expo-notifee-plugin",
        {
          "developmentTeam": "MYDEVTEAMID"
        }
      ]
    ]
  }
}
  1. Run npx expo prebuild -p ios
  2. Run yarn ios

Types

If you use app.config.ts for example:


import { ExpoConfig } from 'expo/config';
import { TExpoNotifeeRemote } from 'expo-notifee-plugin';

const notifeeOptions: TExpoNotifeeRemote = {
  /**
   * Apple App Groups. If none specified, it will create one: `group.${bundleIdentifier}`.
   * @example appGroups: ['com.app.company']
   * @link https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups
   */
  appGroups: string[];
  /**
   * @description
   * Use a custom relative (from project root) path for the NotifeeNotificationService.
   * - You can adapt `expo-notifee-plugin/ios/NotifeeNotificationService.swift`
   * - Warning! It should be named `NotifeeNotificationService`! Doesn't matter if you use
   * Swift or Objective-C!
   *
   * @examples
   * - src/notifications/NotifeeNotificationService.swift
   * - src/notifications/NotifeeNotificationService.m
   */
  customNotificationServicePath?: string;
  developmentTeam: string;
  /**
   * An array containing the sound file names (including file extensions)
   * @example soundFiles: ['dm.aiff']
   * */
  soundFiles?: string[];
  /** Path of the folder that contains the sound. Relative to the app.config.js file.
   * @example soundFilesPath: 'assets/audio'
   */
  soundFilesPath?: string;
};

export const plugins: ExpoConfig['plugins'] = [
  'expo-localization',
  ['expo-screen-orientation', { initialOrientation: 'PORTRAIT_UP' }],
  '@react-native-firebase/app',
  ['expo-notifee-plugin', notifeeOptions],
];

🛸 Usage

Example with Firebase Node SDK:

import type {Notification} from '@notifee/react-native/src/types/Notification';
import {AndroidImportance} from '@notifee/react-native/src/types/NotificationAndroid';
import {MulticastMessage} from 'firebase-admin/lib/messaging/messaging-api';
import admin from '../src/firebase-admin';

/**
 * @link https://notifee.app/react-native/reference/notification
 */
const notifeeOptions: Notification = {
  title: 'Title',
  subtitle: 'Subtitle',
  body: 'Main body content of the notification',
  android: {
    channelId: 'default',
    importance: AndroidImportance.HIGH,
    lightUpScreen: true,
    pressAction: {
      id: 'default',
    },
    sound: 'default',
  },
  ios: {
    sound: 'default',
    // Adding `foregroundPresentationOptions` controls how to
    // behave when app is UP AND RUNNING, not terminated,
    // AND not in background!
    foregroundPresentationOptions: {
      badge: true,
      banner: true,
      list: true,
      sound: true,
    },
  },
};


/** 
 * @description Firebase Message
 * @link https://firebase.google.com/docs/reference/admin/node/firebase-admin.messaging.basemessage.md#basemessage_interface
 */
const message: MulticastMessage = {
  // ✅ We can continue using local/data-only notification for Android
  // 👍 while triggering iOS remote notifications from `apns`
  data: {notifee_options: JSON.stringify(notifeeOptions)},
  tokens: [],
  android: {
    priority: 'high', // Needed to trigger data-only notifications
  },
  apns: {
    payload: {
      notifee_options: notifeeOptions,
      aps: {
        alert: {
          // 🚧 This is needed to trigger an alert/remote notification only for iOS
          // 👍 but Android will continue using data-only notifications
          title: 'ANY_DUMMY_STRING',
        },
        mutableContent: true,
      },
    },
  },
};

try {
  admin.messaging().sendEachForMulticast(message)
  res.status(200).end();
} catch (e) {
  res.status(400).end();
}

🤔 What it does?

This plugin handles moving the necessary NotifeeNSE files into their respective iOS directories.

Steps

  1. Updates entitlements
  2. Sets the app group to group.<identifier> if applicable
  3. Adds the extension plist
  4. Adds the view controller
  5. Adds the NotifeeCore pod in Podfile
  6. Adds the sounds (if any) in the iOS project
  7. Updates the xcode project's build phases

🪲 Debugging

📃 License

📃 This project is released under the MIT License.
💻 By contributing, you agree that your contributions will be licensed under its MIT License.

👏 Credits

Adapted from:

🏆 Sponsors

jetbrains100

Keywords

FAQs

Package last updated on 17 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc