UNPKG

react-native-firebase-compiled

Version:

A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto

172 lines (129 loc) 5.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.statics = exports.default = exports.NAMESPACE = exports.MODULE_NAME = void 0; var _reactNative = require("react-native"); var _events = require("../../utils/events"); var _internals = _interopRequireDefault(require("../../utils/internals")); var _log = require("../../utils/log"); var _ModuleBase = _interopRequireDefault(require("../../utils/ModuleBase")); var _native = require("../../utils/native"); var _utils = require("../../utils"); var _RemoteMessage = _interopRequireDefault(require("./RemoteMessage")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * * Messaging (FCM) representation wrapper */ const NATIVE_EVENTS = ['messaging_message_received', 'messaging_token_refreshed']; const MODULE_NAME = 'RNFirebaseMessaging'; exports.MODULE_NAME = MODULE_NAME; const NAMESPACE = 'messaging'; /** * @class Messaging */ exports.NAMESPACE = NAMESPACE; class Messaging extends _ModuleBase.default { constructor(app) { super(app, { events: NATIVE_EVENTS, moduleName: MODULE_NAME, hasMultiAppSupport: false, hasCustomUrlSupport: false, namespace: NAMESPACE }); _events.SharedEventEmitter.addListener( // sub to internal native event - this fans out to // public event name: onMessage 'messaging_message_received', message => { _events.SharedEventEmitter.emit('onMessage', new _RemoteMessage.default(message)); }); _events.SharedEventEmitter.addListener( // sub to internal native event - this fans out to // public event name: onMessage 'messaging_token_refreshed', token => { _events.SharedEventEmitter.emit('onTokenRefresh', token); }); // Tell the native module that we're ready to receive events if (_reactNative.Platform.OS === 'ios') { (0, _native.getNativeModule)(this).jsInitialised(); } } getToken() { return (0, _native.getNativeModule)(this).getToken(); } deleteToken(authorizedEntity, scope) { return this.app.iid().deleteToken(authorizedEntity, scope); } onMessage(nextOrObserver) { let listener; if ((0, _utils.isFunction)(nextOrObserver)) { // $FlowExpectedError: Not coping with the overloaded method signature listener = nextOrObserver; } else if ((0, _utils.isObject)(nextOrObserver) && (0, _utils.isFunction)(nextOrObserver.next)) { listener = nextOrObserver.next; } else { throw new Error('Messaging.onMessage failed: First argument must be a function or observer object with a `next` function.'); } (0, _log.getLogger)(this).info('Creating onMessage listener'); _events.SharedEventEmitter.addListener('onMessage', listener); return () => { (0, _log.getLogger)(this).info('Removing onMessage listener'); _events.SharedEventEmitter.removeListener('onMessage', listener); }; } onTokenRefresh(nextOrObserver) { let listener; if ((0, _utils.isFunction)(nextOrObserver)) { // $FlowExpectedError: Not coping with the overloaded method signature listener = nextOrObserver; } else if ((0, _utils.isObject)(nextOrObserver) && (0, _utils.isFunction)(nextOrObserver.next)) { listener = nextOrObserver.next; } else { throw new Error('Messaging.OnTokenRefresh failed: First argument must be a function or observer object with a `next` function.'); } (0, _log.getLogger)(this).info('Creating onTokenRefresh listener'); _events.SharedEventEmitter.addListener('onTokenRefresh', listener); return () => { (0, _log.getLogger)(this).info('Removing onTokenRefresh listener'); _events.SharedEventEmitter.removeListener('onTokenRefresh', listener); }; } requestPermission() { return (0, _native.getNativeModule)(this).requestPermission(); } /** * NON WEB-SDK METHODS */ hasPermission() { return (0, _native.getNativeModule)(this).hasPermission(); } sendMessage(remoteMessage) { if (!(remoteMessage instanceof _RemoteMessage.default)) { return Promise.reject(new Error(`Messaging:sendMessage expects a 'RemoteMessage' but got type ${typeof remoteMessage}`)); } try { return (0, _native.getNativeModule)(this).sendMessage(remoteMessage.build()); } catch (error) { return Promise.reject(error); } } subscribeToTopic(topic) { return (0, _native.getNativeModule)(this).subscribeToTopic(topic); } unsubscribeFromTopic(topic) { return (0, _native.getNativeModule)(this).unsubscribeFromTopic(topic); } /** * KNOWN UNSUPPORTED METHODS */ setBackgroundMessageHandler() { throw new Error(_internals.default.STRINGS.ERROR_UNSUPPORTED_MODULE_METHOD('messaging', 'setBackgroundMessageHandler')); } useServiceWorker() { throw new Error(_internals.default.STRINGS.ERROR_UNSUPPORTED_MODULE_METHOD('messaging', 'useServiceWorker')); } } exports.default = Messaging; const statics = { RemoteMessage: _RemoteMessage.default }; exports.statics = statics;