UNPKG

@react-native-firebase/messaging

Version:

React Native Firebase - React Native Firebase provides native integration of Firebase Cloud Messaging (FCM) for both Android & iOS. FCM is a cost free service, allowing for server-device and device-device communication. The React Native Firebase Messaging

388 lines (356 loc) 17.3 kB
"use strict"; /* * Copyright (c) 2016-present Invertase Limited & Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this library except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import { getApp } from '@react-native-firebase/app'; import { withModularFlag } from '@react-native-firebase/app/dist/module/common'; import { MODULAR_DEPRECATION_ARG } from '@react-native-firebase/app/dist/module/common'; /** * Returns a Messaging instance for the given app. * @param app - FirebaseApp. Optional. * @returns Messaging instance */ export function getMessaging(app) { if (app) { return getApp(app.name).messaging(); } return getApp().messaging(); } /** * Removes access to an FCM token previously authorized by its scope. * Messages sent by the server to this token will fail. * @param messaging - Messaging instance. * @param tokenOptions - Options to override senderId (iOS) and projectId (Android). * @returns Promise that resolves when the token is deleted. */ export function deleteToken(messaging, tokenOptions) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.deleteToken.call(messaging, tokenOptions, MODULAR_DEPRECATION_ARG); } /** * Returns an FCM token for this device. Optionally, you can specify custom options for your own use case. * @param messaging - Messaging instance. * @param options - Options to override senderId (iOS) and appName. * @returns Promise that resolves with the FCM token. */ export function getToken(messaging, options) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.getToken.call(messaging, options, MODULAR_DEPRECATION_ARG); } /** * When any FCM payload is received, the listener callback is called with a `RemoteMessage`. * > This subscriber method is only called when the app is active (in the foreground). * @param messaging - Messaging instance. * @param listener - Called with a `RemoteMessage` when a new FCM payload is received from the server. * @returns Function to unsubscribe from the message listener. */ export function onMessage(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onMessage.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * When the user presses a notification displayed via FCM, this listener will be called if the app * has opened from a background state. * @param messaging - Messaging instance. * @param listener - Called with a `RemoteMessage` when a notification press opens the application. * @returns Function to unsubscribe from the notification opened listener. */ export function onNotificationOpenedApp(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onNotificationOpenedApp.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * Called when a new registration token is generated for the device. For example, this event can happen when a * token expires or when the server invalidates the token. * > This subscriber method is only called when the app is active (in the foreground). * @param messaging - Messaging instance. * @param listener - Called with a FCM token when the token is refreshed. * @returns Function to unsubscribe from the token refresh listener. */ export function onTokenRefresh(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onTokenRefresh.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * On iOS, messaging permission must be requested by the current application before messages can * be received or sent. * @param messaging - Messaging instance. * @param iosPermissions - All the available permissions for iOS that can be requested. * @returns Promise that resolves with the authorization status. */ export function requestPermission(messaging, iosPermissions) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.requestPermission.call(messaging, iosPermissions, MODULAR_DEPRECATION_ARG); } /** * Returns whether messaging auto initialization is enabled or disabled for the device. * @param messaging - Messaging instance. * @returns Boolean indicating whether auto initialization is enabled. */ export function isAutoInitEnabled(messaging) { return withModularFlag(() => messaging.isAutoInitEnabled); } /** * Sets whether messaging auto initialization is enabled or disabled for the device. * @param messaging - Messaging instance. * @param enabled - A boolean value to enable or disable auto initialization. * @returns Promise that resolves when the setting is updated. */ export function setAutoInitEnabled(messaging, enabled) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setAutoInitEnabled.call(messaging, enabled, MODULAR_DEPRECATION_ARG); } /** * When a notification from FCM has triggered the application to open from a quit state, * this method will return a `RemoteMessage` containing the notification data, or `null` if * the app was opened via another method. * @param messaging - Messaging instance. * @returns Promise that resolves with the initial notification or null. */ export function getInitialNotification(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.getInitialNotification.call(messaging, MODULAR_DEPRECATION_ARG); } /** * When the app is opened from iOS notifications settings from a quit state, * this method will return `true` or `false` if the app was opened via another method. * @param messaging - Messaging instance. * @returns Promise that resolves with a boolean indicating if the app was opened from settings. */ export function getDidOpenSettingsForNotification(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.getDidOpenSettingsForNotification.call(messaging, MODULAR_DEPRECATION_ARG); } /** * Returns whether the root view is headless or not * i.e true if the app was launched in the background (for example, by data-only cloud message) * @param messaging - Messaging instance. * @returns Promise that resolves with a boolean indicating if the app is headless. */ export function getIsHeadless(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.getIsHeadless.call(messaging, MODULAR_DEPRECATION_ARG); } /** * On iOS, if your app wants to receive remote messages from FCM (via APNs), you must explicitly register * with APNs if auto-registration has been disabled. * @param messaging - Messaging instance. * @returns Promise that resolves when the device is registered. */ export function registerDeviceForRemoteMessages(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.registerDeviceForRemoteMessages.call(messaging, MODULAR_DEPRECATION_ARG); } /** * Returns a boolean value whether the user has registered for remote notifications via * `registerDeviceForRemoteMessages()`. For iOS. Android always returns `true`. * @param messaging - Messaging instance. * @returns Boolean indicating if the device is registered for remote messages. */ export function isDeviceRegisteredForRemoteMessages(messaging) { return withModularFlag(() => messaging.isDeviceRegisteredForRemoteMessages); } /** * Unregisters the app from receiving remote notifications. * @param messaging - Messaging instance. * @returns Promise that resolves when the device is unregistered. */ export function unregisterDeviceForRemoteMessages(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.unregisterDeviceForRemoteMessages.call(messaging, MODULAR_DEPRECATION_ARG); } /** * On iOS, it is possible to get the users APNs token. This may be required if you want to send messages to your * iOS devices without using the FCM service. * @param messaging - Messaging instance. * @returns Promise that resolves with the APNs token or null. */ export function getAPNSToken(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.getAPNSToken.call(messaging, MODULAR_DEPRECATION_ARG); } /** * On iOS, This method is used to set the APNs Token received by the application delegate. * Note that the token is expected to be a hexadecimal string, as it is an NSData type in * the underlying native firebase SDK, and raw data may only be passed as a string if it is * hex encoded. Calling code is responsible for correct encoding, you should verify by comparing * the results of `getAPNSToken()` with your token parameter to make sure they are equivalent. * * Messaging uses method swizzling to ensure that the APNs token is set automatically. * However, if you have disabled swizzling by setting FirebaseAppDelegateProxyEnabled to NO * in your app's Info.plist, you should manually set the APNs token in your application * delegate's application(_:didRegisterForRemoteNotificationsWithDeviceToken:) method. * * If you would like to set the type of the APNs token, rather than relying on automatic * detection, provide a type of either 'prod', 'sandbox'. Omitting the type parameter * or specifying 'unknown' will rely on automatic type detection based on provisioning profile. * * At a native level you may also call objective-c `[FIRMessaging setAPNSToken];` as needed. * * @param messaging - Messaging instance. * @param token - A hexadecimal string representing your APNs token. * @param type - Optional. A string specifying 'prod', 'sandbox' or 'unknown' token type. * @returns Promise that resolves when the APNs token is set. */ export function setAPNSToken(messaging, token, type) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setAPNSToken.call(messaging, token, type, MODULAR_DEPRECATION_ARG); } /** * Returns a `AuthorizationStatus` as to whether the user has messaging permission for this app. * @param messaging - Messaging instance. * @returns Promise that resolves with the authorization status. */ export function hasPermission(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.hasPermission.call(messaging, MODULAR_DEPRECATION_ARG); } /** * Called when the FCM server deletes pending messages. * @param messaging - Messaging instance. * @param listener - Called when the FCM deletes pending messages. * @returns Function to unsubscribe from the deleted messages listener. */ export function onDeletedMessages(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onDeletedMessages.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * When sending a `RemoteMessage`, this listener is called when the message has been sent to FCM. * @param messaging - Messaging instance. * @param listener - Called when the FCM sends the remote message to FCM. * @returns Function to unsubscribe from the message sent listener. */ export function onMessageSent(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onMessageSent.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * When sending a `RemoteMessage`, this listener is called when an error is thrown and the * message could not be sent. * @param messaging - Messaging instance. * @param listener - Called when the FCM sends the remote message to FCM. * @returns Function to unsubscribe from the send error listener. */ export function onSendError(messaging, listener) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.onSendError.call(messaging, listener, MODULAR_DEPRECATION_ARG); } /** * Set a message handler function which is called when the app is in the background * or terminated. In Android, a headless task is created, allowing you to access the React Native environment * to perform tasks such as updating local storage, or sending a network request. * @param messaging - Messaging instance. * @param handler - Called when a message is sent and the application is in a background or terminated state. * @returns void */ export function setBackgroundMessageHandler(messaging, handler) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setBackgroundMessageHandler.call(messaging, handler, MODULAR_DEPRECATION_ARG); } /** * Set a handler function which is called when the `${App Name} notifications settings` * link in iOS settings is clicked. * @param messaging - Messaging instance. * @param handler - Called when link in iOS settings is clicked. * @returns void */ export function setOpenSettingsForNotificationsHandler(messaging, handler) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setOpenSettingsForNotificationsHandler.call(messaging, handler, MODULAR_DEPRECATION_ARG); } /** * Send a new `RemoteMessage` to the FCM server. * @param messaging - Messaging instance. * @param message - A `RemoteMessage` interface. * @returns Promise that resolves when the message is sent. */ export function sendMessage(messaging, message) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.sendMessage.call(messaging, message, MODULAR_DEPRECATION_ARG); } /** * Apps can subscribe to a topic, which allows the FCM server to send targeted messages to only those * devices subscribed to that topic. * @param messaging - Messaging instance. * @param topic - The topic name. * @returns Promise that resolves when the subscription is complete. */ export function subscribeToTopic(messaging, topic) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.subscribeToTopic.call(messaging, topic, MODULAR_DEPRECATION_ARG); } /** * Unsubscribe the device from a topic. * @param messaging - Messaging instance. * @param topic - The topic name. * @returns Promise that resolves when the unsubscription is complete. */ export function unsubscribeFromTopic(messaging, topic) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.unsubscribeFromTopic.call(messaging, topic, MODULAR_DEPRECATION_ARG); } /** * Returns a boolean whether message delivery metrics are exported to BigQuery. * @param messaging - Messaging instance. * @returns Boolean indicating if message delivery metrics are exported to BigQuery. */ export function isDeliveryMetricsExportToBigQueryEnabled(messaging) { return withModularFlag(() => messaging.isDeliveryMetricsExportToBigQueryEnabled); } /** * Returns a boolean whether message delegation is enabled. Android only, * always returns false on iOS * @param messaging - Messaging instance. * @returns Boolean indicating if notification delegation is enabled. */ export function isNotificationDelegationEnabled(messaging) { return withModularFlag(() => messaging.isNotificationDelegationEnabled); } /** * Sets whether message notification delegation is enabled or disabled. * The value is false by default. Set this to true to allow delegation of notification to Google Play Services. * Note if true message handlers will not function on Android, and it has no effect on iOS * @param messaging - Messaging instance. * @param enabled - A boolean value to enable or disable delegation of messages to Google Play Services. * @returns Promise that resolves when the setting is updated. */ export function setNotificationDelegationEnabled(messaging, enabled) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setNotificationDelegationEnabled.call(messaging, enabled, MODULAR_DEPRECATION_ARG); } /** * Checks if all required APIs exist in the browser. * @param messaging - Messaging instance. * @returns Promise that resolves with a boolean indicating if the APIs are supported. */ export function isSupported(messaging) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.isSupported.call(messaging, MODULAR_DEPRECATION_ARG); } /** * Sets whether message delivery metrics are exported to BigQuery is enabled or disabled. * The value is false by default. Set this to true to allow exporting of message delivery metrics to BigQuery. * @param messaging - Messaging instance. * @param enabled - A boolean value to enable or disable exporting of message delivery metrics to BigQuery. * @returns Promise that resolves when the setting is updated. */ export function experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, enabled) { // @ts-ignore - MODULAR_DEPRECATION_ARG is used internally return messaging.setDeliveryMetricsExportToBigQuery.call(messaging, enabled, MODULAR_DEPRECATION_ARG); } export { AuthorizationStatus, NotificationAndroidPriority, NotificationAndroidVisibility } from "./statics.js"; //# sourceMappingURL=modular.js.map