diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
new file mode 100644
index 0000000..756df7a
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
@@ -0,0 +1,304 @@
+/// @file FIRParameterNames.h
+///
+/// Predefined event parameter names.
+///
+/// Params supply information that contextualize Events. You can associate up to 25 unique Params
+/// with each Event type. Some Params are suggested below for certain common Events, but you are
+/// not limited to these. You may supply extra Params for suggested Events or custom Params for
+/// Custom events. Param names can be up to 24 characters long, may only contain alphanumeric
+/// characters and underscores ("_"), and must start with an alphabetic character. Param values can
+/// be up to 36 characters long. The "firebase_" prefix is reserved and should not be used.
+
+/// Game achievement ID (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterAchievementID : @"10_matches_won",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterAchievementID = @"achievement_id";
+
+/// Character used in game (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterCharacter : @"beat_boss",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterCharacter = @"character";
+
+/// Type of content selected (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterContentType : @"news article",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterContentType = @"content_type";
+
+/// Coupon code for a purchasable item (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterCoupon : @"zz123",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterCoupon = @"coupon";
+
+/// Purchase currency in 3-letter
+/// ISO_4217 format (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterCurrency : @"USD",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterCurrency = @"currency";
+
+/// Flight or Travel destination (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterDestination : @"Mountain View, CA",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterDestination = @"destination";
+
+/// The arrival date, check-out date or rental end date for the item. This should be in
+/// YYYY-MM-DD format (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterEndDate : @"2015-09-14",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterEndDate = @"end_date";
+
+/// Flight number for travel events (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterFlightNumber : @"ZZ800",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterFlightNumber = @"flight_number";
+
+/// Group/clan/guild ID (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterGroupID : @"g1",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterGroupID = @"group_id";
+
+/// Item category (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterItemCategory : @"t-shirts",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterItemCategory = @"item_category";
+
+/// Item ID (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterItemID : @"p7654",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterItemID = @"item_id";
+
+/// The Google Place ID (NSString) that
+/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID.
+///
+/// NSDictionary *params = @{
+/// kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterItemLocationID = @"item_location_id";
+
+/// Item name (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterItemName : @"abc",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterItemName = @"item_name";
+
+/// Level in game (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterLevel : @(42),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterLevel = @"level";
+
+/// Location (NSString). The Google Place ID
+/// that corresponds to the associated event. Alternatively, you can supply your own custom
+/// Location ID.
+///
+/// NSDictionary *params = @{
+/// kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterLocation = @"location";
+
+/// Number of nights staying at hotel (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfNights : @(3),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterNumberOfNights = @"number_of_nights";
+
+/// Number of passengers traveling (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfPassengers : @(11),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterNumberOfPassengers = @"number_of_passengers";
+
+/// Number of rooms for travel events (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfRooms : @(2),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterNumberOfRooms = @"number_of_rooms";
+
+/// Flight or Travel origin (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterOrigin : @"Mountain View, CA",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterOrigin = @"origin";
+
+/// Purchase price (double as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterPrice : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterPrice = @"price";
+
+/// Purchase quantity (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterQuantity : @(1),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterQuantity = @"quantity";
+
+/// Score in game (signed 64-bit integer as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterScore : @(4200),
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterScore = @"score";
+
+/// The search string/keywords used (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterSearchTerm : @"periodic table",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterSearchTerm = @"search_term";
+
+/// Shipping cost (double as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterShipping : @(9.50),
+/// kFIRParameterCurrency : @"USD", // e.g. $9.50 USD
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterShipping = @"shipping";
+
+/// Sign up method (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterSignUpMethod : @"google",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterSignUpMethod = @"sign_up_method";
+
+/// The departure date, check-in date or rental start date for the item. This should be in
+/// YYYY-MM-DD format (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterStartDate : @"2015-09-14",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterStartDate = @"start_date";
+
+/// Tax amount (double as NSNumber).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterTax : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterTax = @"tax";
+
+/// A single ID for a ecommerce group transaction (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterTransactionID : @"ab7236dd9823",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterTransactionID = @"transaction_id";
+
+/// Travel class (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterTravelClass : @"business",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterTravelClass = @"travel_class";
+
+/// A context-specific numeric value which is accumulated automatically for each event type. This is
+/// a general purpose parameter that is useful for accumulating a key metric that pertains to an
+/// event. Examples include revenue, distance, time and points. Value should be specified as signed
+/// 64-bit integer or double as NSNumber. Notes: Currency-related values should be supplied using
+/// double as NSNumber and must be accompanied by a {@link kFIRParameterCurrency} parameter. The
+/// valid range of accumulated values is [-9,223,372,036,854.77, 9,223,372,036,854.77].
+///
+/// NSDictionary *params = @{
+/// kFIRParameterValue : @(3.99),
+/// kFIRParameterCurrency : @"USD", // e.g. $3.99 USD
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterValue = @"value";
+
+/// Name of virtual currency type (NSString).
+///
+/// NSDictionary *params = @{
+/// kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+/// // ...
+/// };
+///
+static NSString *const kFIRParameterVirtualCurrencyName = @"virtual_currency_name";
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
new file mode 100644
index 0000000..6f3d683
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
@@ -0,0 +1,13 @@
+/// @file FIRUserPropertyNames.h
+///
+/// Predefined user property names.
+///
+/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can
+/// later analyze different behaviors of various segments of your userbase. You may supply up to 25
+/// unique UserProperties per app, and you can use the name and value of your choosing for each one.
+/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and
+/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to
+/// 36 characters long. The "firebase_" prefix is reserved and should not be used.
+
+/// The method used to sign in. For example, "google", "facebook" or "twitter".
+static NSString *const kFIRUserPropertySignUpMethod = @"sign_up_method";
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
new file mode 100644
index 0000000..a56cf5f
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
@@ -0,0 +1,11 @@
+// Generated umbrella header for FirebaseAnalytics.
+
+#import "FIRAnalytics+AppDelegate.h"
+#import "FIRAnalytics.h"
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIREventNames.h"
+#import "FIROptions.h"
+#import "FIRParameterNames.h"
+#import "FIRUserPropertyNames.h"
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Modules/module.modulemap b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Modules/module.modulemap
new file mode 100644
index 0000000..e1d1c5f
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseAnalytics.framework/Modules/module.modulemap
@@ -0,0 +1,23 @@
+framework module FirebaseAnalytics {
+
+ export *
+
+ umbrella header "FirebaseAnalytics.h"
+
+ header "FIRAnalytics+AppDelegate.h"
+ header "FIRAnalytics.h"
+ header "FIRAnalyticsConfiguration.h"
+ header "FIRApp.h"
+ header "FIRConfiguration.h"
+ header "FIREventNames.h"
+ header "FIROptions.h"
+ header "FIRParameterNames.h"
+ header "FIRUserPropertyNames.h"
+
+ link framework "AddressBook"
+ link framework "StoreKit"
+
+ link "c++"
+ link "sqlite3"
+ link "z"
+}
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/FirebaseCore b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/FirebaseCore
new file mode 100644
index 0000000..5f3dcec
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/FirebaseCore differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
new file mode 100644
index 0000000..b0b59fc
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
@@ -0,0 +1,38 @@
+#import
+
+/**
+ * This class provides configuration fields for Firebase Analytics.
+ */
+@interface FIRAnalyticsConfiguration : NSObject
+
+/**
+ * Returns the shared instance of FIRAnalyticsConfiguration.
+ */
++ (FIRAnalyticsConfiguration *)sharedInstance;
+
+/**
+ * Sets the minimum engagement time in seconds required to start a new session. The default value
+ * is 10 seconds.
+ */
+- (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval;
+
+/**
+ * Sets the interval of inactivity in seconds that terminates the current session. The default
+ * value is 1800 seconds (30 minutes).
+ */
+- (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval;
+
+/**
+ * Sets whether analytics collection is enabled for this app on this device. This setting is
+ * persisted across app sessions. By default it is enabled.
+ */
+- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled;
+
+/**
+ * Deprecated. Sets whether measurement and reporting are enabled for this app on this device. By
+ * default they are enabled.
+ */
+- (void)setIsEnabled:(BOOL)isEnabled
+ DEPRECATED_MSG_ATTRIBUTE("Use setAnalyticsCollectionEnabled: instead.");
+
+@end
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRApp.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRApp.h
new file mode 100644
index 0000000..0c814a6
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRApp.h
@@ -0,0 +1,94 @@
+#import
+#import
+
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^FIRAppVoidBoolCallback)(BOOL success);
+
+/**
+ * The entry point of Firebase SDKs.
+ *
+ * Initialize and configure FIRApp using [FIRApp configure];
+ * Or other customized ways as shown below.
+ *
+ * The logging system has two modes: default mode and debug mode. In default mode, only logs with
+ * log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent
+ * to device. The log levels that Firebase uses are consistent with the ASL log levels.
+ *
+ * Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this
+ * argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled,
+ * further executions of the application will also be in debug mode. In order to return to default
+ * mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled.
+ */
+@interface FIRApp : NSObject
+
+/**
+ * Configures a default Firebase app. Raises an exception if any configuration step fails. The
+ * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched
+ * and before using Firebase services. This method is thread safe.
+ */
++ (void)configure;
+
+/**
+ * Configures the default Firebase app with the provided options. The default app is named
+ * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method is thread
+ * safe.
+ *
+ * @param options The Firebase application options used to configure the service.
+ */
++ (void)configureWithOptions:(FIROptions *)options;
+
+/**
+ * Configures a Firebase app with the given name and options. Raises an exception if any
+ * configuration step fails. This method is thread safe.
+ *
+ * @param name The application's name given by the developer. The name should should only contain
+ Letters, Numbers and Underscore.
+ * @param options The Firebase application options used to configure the services.
+ */
++ (void)configureWithName:(NSString *)name options:(FIROptions *)options;
+
+/**
+ * Returns the default app, or nil if the default app does not exist.
+ */
++ (nullable FIRApp *)defaultApp NS_SWIFT_NAME(defaultApp());
+
+/**
+ * Returns a previously created FIRApp instance with the given name, or nil if no such app exists.
+ * This method is thread safe.
+ */
++ (nullable FIRApp *)appNamed:(NSString *)name;
+
+/**
+ * Returns the set of all extant FIRApp instances, or nil if there is no FIRApp instance. This
+ * method is thread safe.
+ */
++ (nullable NSDictionary *)allApps;
+
+/**
+ * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for
+ * future use. This method is thread safe in class level.
+ */
+- (void)deleteApp:(FIRAppVoidBoolCallback)completion;
+
+/**
+ * FIRFirebaseApp instances should not be initialized directly. Call |FIRApp configure|, or
+ * |FIRApp configureWithOptions:|, or |FIRApp configureWithNames:options| directly.
+ */
+- (nullable instancetype)init NS_UNAVAILABLE;
+
+/**
+ * Gets the name of this app.
+ */
+@property(nonatomic, copy, readonly) NSString *name;
+
+/**
+ * Gets the options for this app.
+ */
+@property(nonatomic, readonly) FIROptions *options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRConfiguration.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRConfiguration.h
new file mode 100644
index 0000000..b176929
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIRConfiguration.h
@@ -0,0 +1,33 @@
+#import
+
+#import "FIRAnalyticsConfiguration.h"
+
+/**
+ * The log levels used by FIRConfiguration.
+ */
+typedef NS_ENUM(NSInteger, FIRLogLevel) {
+ kFIRLogLevelError __deprecated = 0,
+ kFIRLogLevelWarning __deprecated,
+ kFIRLogLevelInfo __deprecated,
+ kFIRLogLevelDebug __deprecated,
+ kFIRLogLevelAssert __deprecated,
+ kFIRLogLevelMax __deprecated = kFIRLogLevelAssert
+} DEPRECATED_MSG_ATTRIBUTE(
+ "Use -FIRDebugEnabled and -FIRDebugDisabled. See FIRApp.h for more details.");
+
+/**
+ * This interface provides global level properties that the developer can tweak, and the singleton
+ * of the Firebase Analytics configuration class.
+ */
+@interface FIRConfiguration : NSObject
+
++ (FIRConfiguration *)sharedInstance;
+
+// The configuration class for Firebase Analytics.
+@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration;
+
+// Global log level. Defaults to kFIRLogLevelError.
+@property(nonatomic, readwrite, assign) FIRLogLevel logLevel DEPRECATED_MSG_ATTRIBUTE(
+ "Use -FIRDebugEnabled and -FIRDebugDisabled. See FIRApp.h for more details.");
+
+@end
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIROptions.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIROptions.h
new file mode 100644
index 0000000..dc7d410
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FIROptions.h
@@ -0,0 +1,87 @@
+#import
+
+/**
+ * This class provides constant fields of Google APIs.
+ */
+@interface FIROptions : NSObject
+
+/**
+ * Returns the default options.
+ */
++ (FIROptions *)defaultOptions;
+
+/**
+ * An iOS API key used for authenticating requests from your app, e.g.
+ * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers.
+ */
+@property(nonatomic, readonly, copy) NSString *APIKey;
+
+/**
+ * The OAuth2 client ID for iOS application used to authenticate Google users, for example
+ * @"12345.apps.googleusercontent.com", used for signing in with Google.
+ */
+@property(nonatomic, readonly, copy) NSString *clientID;
+
+/**
+ * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics.
+ */
+@property(nonatomic, readonly, copy) NSString *trackingID;
+
+/**
+ * The Project Number from the Google Developer's console, for example @"012345678901", used to
+ * configure Google Cloud Messaging.
+ */
+@property(nonatomic, readonly, copy) NSString *GCMSenderID;
+
+/**
+ * The Android client ID used in Google AppInvite when an iOS app has its Android version, for
+ * example @"12345.apps.googleusercontent.com".
+ */
+@property(nonatomic, readonly, copy) NSString *androidClientID;
+
+/**
+ * The Google App ID that is used to uniquely identify an instance of an app.
+ */
+@property(nonatomic, readonly, copy) NSString *googleAppID;
+
+/**
+ * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com".
+ */
+@property(nonatomic, readonly, copy) NSString *databaseURL;
+
+/**
+ * The URL scheme used to set up Durable Deep Link service.
+ */
+@property(nonatomic, readwrite, copy) NSString *deepLinkURLScheme;
+
+/**
+ * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com".
+ */
+@property(nonatomic, readonly, copy) NSString *storageBucket;
+
+/**
+ * Initializes a customized instance of FIROptions with keys. googleAppID, bundleID and GCMSenderID
+ * are required. Other keys may required for configuring specific services.
+ */
+- (instancetype)initWithGoogleAppID:(NSString *)googleAppID
+ bundleID:(NSString *)bundleID
+ GCMSenderID:(NSString *)GCMSenderID
+ APIKey:(NSString *)APIKey
+ clientID:(NSString *)clientID
+ trackingID:(NSString *)trackingID
+ androidClientID:(NSString *)androidClientID
+ databaseURL:(NSString *)databaseURL
+ storageBucket:(NSString *)storageBucket
+ deepLinkURLScheme:(NSString *)deepLinkURLScheme;
+
+/**
+ * Initializes a customized instance of FIROptions from the file at the given plist file path.
+ * For example,
+ * NSString *filePath =
+ * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
+ * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
+ * Returns nil if the plist file does not exist or is invalid.
+ */
+- (instancetype)initWithContentsOfFile:(NSString *)plistPath;
+
+@end
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FirebaseCore.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FirebaseCore.h
new file mode 100644
index 0000000..8d5e33d
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Headers/FirebaseCore.h
@@ -0,0 +1,6 @@
+// Generated umbrella header for FirebaseCore.
+
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIROptions.h"
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Modules/module.modulemap b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Modules/module.modulemap
new file mode 100644
index 0000000..09a6dda
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseCore.framework/Modules/module.modulemap
@@ -0,0 +1,15 @@
+framework module FirebaseCore {
+
+ export *
+
+ umbrella header "FirebaseCore.h"
+
+ header "FIRAnalyticsConfiguration.h"
+ header "FIRApp.h"
+ header "FIRConfiguration.h"
+ header "FIROptions.h"
+
+ link framework "SystemConfiguration"
+
+ link "c++"
+}
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/FirebaseInstanceID b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/FirebaseInstanceID
new file mode 100644
index 0000000..5d67d05
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/FirebaseInstanceID differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
new file mode 100644
index 0000000..f55c4bb
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
@@ -0,0 +1,245 @@
+#import
+
+/**
+ * @memberof FIRInstanceID
+ *
+ * The scope to be used when fetching/deleting a token for Firebase Messaging.
+ */
+FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDScopeFirebaseMessaging;
+
+/**
+ * Called when the system determines that tokens need to be refreshed.
+ * This method is also called if Instance ID has been reset in which
+ * case, tokens and FCM topic subscriptions also need to be refreshed.
+ *
+ * Instance ID service will throttle the refresh event across all devices
+ * to control the rate of token updates on application servers.
+ */
+FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDTokenRefreshNotification;
+
+/**
+ * @related FIRInstanceID
+ *
+ * The completion handler invoked when the InstanceID token returns. If
+ * the call fails we return the appropriate `error code` as described below.
+ *
+ * @param token The valid token as returned by InstanceID backend.
+ *
+ * @param error The error describing why generating a new token
+ * failed. See the error codes below for a more detailed
+ * description.
+ */
+typedef void(^FIRInstanceIDTokenHandler)( NSString * __nullable token, NSError * __nullable error);
+
+
+/**
+ * @related FIRInstanceID
+ *
+ * The completion handler invoked when the InstanceID `deleteToken` returns. If
+ * the call fails we return the appropriate `error code` as described below
+ *
+ * @param error The error describing why deleting the token failed.
+ * See the error codes below for a more detailed description.
+ */
+typedef void(^FIRInstanceIDDeleteTokenHandler)(NSError * __nullable error);
+
+/**
+ * @related FIRInstanceID
+ *
+ * The completion handler invoked when the app identity is created. If the
+ * identity wasn't created for some reason we return the appropriate error code.
+ *
+ * @param identity A valid identity for the app instance, nil if there was an error
+ * while creating an identity.
+ * @param error The error if fetching the identity fails else nil.
+ */
+typedef void(^FIRInstanceIDHandler)(NSString * __nullable identity, NSError * __nullable error);
+
+/**
+ * @related FIRInstanceID
+ *
+ * The completion handler invoked when the app identity and all the tokens associated
+ * with it are deleted. Returns a valid error object in case of failure else nil.
+ *
+ * @param error The error if deleting the identity and all the tokens associated with
+ * it fails else nil.
+ */
+typedef void(^FIRInstanceIDDeleteHandler)(NSError * __nullable error);
+
+/**
+ * @enum FIRInstanceIDError
+ */
+typedef NS_ENUM(NSUInteger, FIRInstanceIDError) {
+ // Http related errors.
+
+ /// Unknown error.
+ FIRInstanceIDErrorUnknown = 0,
+
+ /// Auth Error -- GCM couldn't validate request from this client.
+ FIRInstanceIDErrorAuthentication = 1,
+
+ /// NoAccess -- InstanceID service cannot be accessed.
+ FIRInstanceIDErrorNoAccess = 2,
+
+ /// Timeout -- Request to InstanceID backend timed out.
+ FIRInstanceIDErrorTimeout = 3,
+
+ /// Network -- No network available to reach the servers.
+ FIRInstanceIDErrorNetwork = 4,
+
+ /// OperationInProgress -- Another similar operation in progress,
+ /// bailing this one.
+ FIRInstanceIDErrorOperationInProgress = 5,
+
+ /// InvalidRequest -- Some parameters of the request were invalid.
+ FIRInstanceIDErrorInvalidRequest = 7,
+};
+
+/**
+ * The APNS token type for the app. If the token type is set to `UNKNOWN`
+ * InstanceID will implicitly try to figure out what the actual token type
+ * is from the provisioning profile.
+ */
+typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) {
+ /// Unknown token type.
+ FIRInstanceIDAPNSTokenTypeUnknown,
+ /// Sandbox token type.
+ FIRInstanceIDAPNSTokenTypeSandbox,
+ /// Production token type.
+ FIRInstanceIDAPNSTokenTypeProd,
+};
+
+/**
+ * Instance ID provides a unique identifier for each app instance and a mechanism
+ * to authenticate and authorize actions (for example, sending a GCM message).
+ *
+ * Instance ID is long lived but, may be reset if the device is not used for
+ * a long time or the Instance ID service detects a problem.
+ * If Instance ID is reset, the app will be notified with a `com.firebase.iid.token-refresh`
+ * notification.
+ *
+ * If the Instance ID has become invalid, the app can request a new one and
+ * send it to the app server.
+ * To prove ownership of Instance ID and to allow servers to access data or
+ * services associated with the app, call
+ * `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`.
+ */
+@interface FIRInstanceID : NSObject
+
+/**
+ * FIRInstanceID.
+ *
+ * @return A shared instance of FIRInstanceID.
+ */
++ (nonnull instancetype)instanceID NS_SWIFT_NAME(instanceID());
+
+/**
+ * Unavailable. Use +instanceID instead.
+ */
+- (nonnull instancetype)init __attribute__((unavailable("Use +instanceID instead.")));
+
+/**
+ * Set APNS token for the application. This APNS token will be used to register
+ * with Firebase Messaging using `token` or
+ * `tokenWithAuthorizedEntity:scope:options:handler`. If the token type is set to
+ * `FIRInstanceIDAPNSTokenTypeUnknown` InstanceID will read the provisioning profile
+ * to find out the token type.
+ *
+ * @param token The APNS token for the application.
+ * @param type The APNS token type for the above token.
+ */
+- (void)setAPNSToken:(nonnull NSData *)token
+ type:(FIRInstanceIDAPNSTokenType)type;
+
+#pragma mark - Tokens
+
+/**
+ * Returns a Firebase Messaging scoped token for the firebase app.
+ *
+ * @return Null Returns null if the device has not yet been registerd with
+ * Firebase Message else returns a valid token.
+ */
+- (nullable NSString *)token;
+
+/**
+ * Returns a token that authorizes an Entity (example: cloud service) to perform
+ * an action on behalf of the application identified by Instance ID.
+ *
+ * This is similar to an OAuth2 token except, it applies to the
+ * application instance instead of a user.
+ *
+ * This is an asynchronous call. If the token fetching fails for some reason
+ * we invoke the completion callback with nil `token` and the appropriate
+ * error.
+ *
+ * Note, you can only have one `token` or `deleteToken` call for a given
+ * authorizedEntity and scope at any point of time. Making another such call with the
+ * same authorizedEntity and scope before the last one finishes will result in an
+ * error with code `OperationInProgress`.
+ *
+ * @see FIRInstanceID deleteTokenWithAuthorizedEntity:scope:handler:
+ *
+ * @param authorizedEntity Entity authorized by the token.
+ * @param scope Action authorized for authorizedEntity.
+ * @param options The extra options to be sent with your token request. The
+ * value for the `apns_token` should be the NSData object
+ * passed to UIApplication's
+ * `didRegisterForRemoteNotificationsWithDeviceToken` method.
+ * All other keys and values in the options dict need to be
+ * instances of NSString or else they will be discarded. Bundle
+ * keys starting with 'GCM.' and 'GOOGLE.' are reserved.
+ * @param handler The callback handler which is invoked when the token is
+ * successfully fetched. In case of success a valid `token` and
+ * `nil` error are returned. In case of any error the `token`
+ * is nil and a valid `error` is returned. The valid error
+ * codes have been documented above.
+ */
+- (void)tokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity
+ scope:(nonnull NSString *)scope
+ options:(nullable NSDictionary *)options
+ handler:(nonnull FIRInstanceIDTokenHandler)handler;
+
+/**
+ * Revokes access to a scope (action) for an entity previously
+ * authorized by `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`.
+ *
+ * This is an asynchronous call. Call this on the main thread since InstanceID lib
+ * is not thread safe. In case token deletion fails for some reason we invoke the
+ * `handler` callback passed in with the appropriate error code.
+ *
+ * Note, you can only have one `token` or `deleteToken` call for a given
+ * authorizedEntity and scope at a point of time. Making another such call with the
+ * same authorizedEntity and scope before the last one finishes will result in an error
+ * with code `OperationInProgress`.
+ *
+ * @param authorizedEntity Entity that must no longer have access.
+ * @param scope Action that entity is no longer authorized to perform.
+ * @param handler The handler that is invoked once the unsubscribe call ends.
+ * In case of error an appropriate error object is returned
+ * else error is nil.
+ */
+- (void)deleteTokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity
+ scope:(nonnull NSString *)scope
+ handler:(nonnull FIRInstanceIDDeleteTokenHandler)handler;
+
+#pragma mark - Identity
+
+/**
+ * Asynchronously fetch a stable identifier that uniquely identifies the app
+ * instance. If the identifier has been revoked or has expired, this method will
+ * return a new identifier.
+ *
+ *
+ * @param handler The handler to invoke once the identifier has been fetched.
+ * In case of error an appropriate error object is returned else
+ * a valid identifier is returned and a valid identifier for the
+ * application instance.
+ */
+- (void)getIDWithHandler:(nonnull FIRInstanceIDHandler)handler;
+
+/**
+ * Resets Instance ID and revokes all tokens.
+ */
+- (void)deleteIDWithHandler:(nonnull FIRInstanceIDDeleteHandler)handler;
+
+@end
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
new file mode 100644
index 0000000..32212eb
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
@@ -0,0 +1 @@
+#import "FIRInstanceID.h"
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Modules/module.modulemap b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Modules/module.modulemap
new file mode 100644
index 0000000..3192e9b
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseInstanceID.framework/Modules/module.modulemap
@@ -0,0 +1,8 @@
+framework module FirebaseInstanceID {
+
+ export *
+
+ umbrella header "FirebaseInstanceID.h"
+
+ header "FIRInstanceID.h"
+}
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/FirebaseMessaging b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/FirebaseMessaging
new file mode 100644
index 0000000..de75366
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/FirebaseMessaging differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h
new file mode 100644
index 0000000..b0600cf
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h
@@ -0,0 +1,236 @@
+#import
+
+/**
+ * The completion handler invoked once the data connection with FIRMessaging is
+ * established. The data connection is used to send a continous stream of
+ * data and all the FIRMessaging data notifications arrive through this connection.
+ * Once the connection is established we invoke the callback with `nil` error.
+ * Correspondingly if we get an error while trying to establish a connection
+ * we invoke the handler with an appropriate error object and do an
+ * exponential backoff to try and connect again unless successful.
+ *
+ * @param error The error object if any describing why the data connection
+ * to FIRMessaging failed.
+ */
+typedef void(^FIRMessagingConnectCompletion)(NSError * __nullable error);
+
+/**
+ * Notification sent when the upstream message has been delivered
+ * successfully to the server. The notification object will be the messageID
+ * of the successfully delivered message.
+ */
+FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendSuccessNotification;
+
+/**
+ * Notification sent when the upstream message was failed to be sent to the
+ * server. The notification object will be the messageID of the failed
+ * message. The userInfo dictionary will contain the relevant error
+ * information for the failure.
+ */
+FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendErrorNotification;
+
+/**
+ * Notification sent when the Firebase messaging server deletes pending
+ * messages due to exceeded storage limits. This may occur, for example, when
+ * the device cannot be reached for an extended period of time.
+ *
+ * It is recommended to retrieve any missing messages directly from the
+ * server.
+ */
+FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingMessagesDeletedNotification;
+
+/**
+ * @enum FIRMessagingError
+ */
+typedef NS_ENUM(NSUInteger, FIRMessagingError) {
+ // Unknown error.
+ FIRMessagingErrorUnknown = 0,
+
+ // Auth Error -- FIRMessaging couldn't validate request from this client.
+ FIRMessagingErrorAuthentication = 1,
+
+ // NoAccess -- InstanceID service cannot be accessed.
+ FIRMessagingErrorNoAccess = 2,
+
+ // Timeout -- Request to InstanceID backend timed out.
+ FIRMessagingErrorTimeout = 3,
+
+ // Network -- No network available to reach the servers.
+ FIRMessagingErrorNetwork = 4,
+
+ // OperationInProgress -- Another similar operation in progress,
+ // bailing this one.
+ FIRMessagingErrorOperationInProgress = 5,
+
+ // InvalidRequest -- Some parameters of the request were invalid.
+ FIRMessagingErrorInvalidRequest = 7,
+};
+
+/// Status for the downstream message received by the app.
+typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {
+ FIRMessagingMessageStatusUnknown,
+ /// New downstream message received by the app.
+ FIRMessagingMessageStatusNew,
+};
+
+/// Information about a downstream message received by the app.
+@interface FIRMessagingMessageInfo : NSObject
+
+@property(nonatomic, readonly, assign) FIRMessagingMessageStatus status;
+
+@end
+
+/**
+ * A remote data message received by the app via FCM (not just the APNs interface).
+ *
+ * This is only for devices running iOS 10 or above. To support devices running iOS 9 or below, use
+ * the local and remote notifications handlers defined in UIApplicationDelegate protocol.
+ */
+@interface FIRMessagingRemoteMessage : NSObject
+
+/// The downstream message received by the application.
+@property(nonatomic, readonly, strong, nonnull) NSDictionary *appData;
+
+@end
+
+/**
+ * A protocol to receive data message via FCM for devices running iOS 10 or above.
+ *
+ * To support devices running iOS 9 or below, use the local and remote notifications handlers
+ * defined in UIApplicationDelegate protocol.
+ */
+@protocol FIRMessagingDelegate
+
+/// The callback to handle data message received via FCM for devices running iOS 10 or above.
+- (void)applicationReceivedRemoteMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage;
+
+@end
+
+/**
+ * Firebase Messaging enables apps to communicate with their app servers
+ * using simple messages.
+ *
+ * To send or receive messages, the app must get a
+ * registration token from GGLInstanceID, which authorizes an
+ * app server to send messages to an app instance. Pass your sender ID and
+ * `kGGLInstanceIDScopeFIRMessaging` as parameters to the method.
+ *
+ * A sender ID is a project number created when you configure your API project.
+ * It is labeled "Project Number" in the Google Developers Console.
+ *
+ * In order to receive FIRMessaging messages, declare application:didReceiveRemoteNotification:
+ *
+ * Client apps can send upstream messages back to the app server using the XMPP-based
+ * Cloud Connection Server,
+ *
+ */
+@interface FIRMessaging : NSObject
+
+/**
+ * Delegate to handle remote data messages received via FCM for devices running iOS 10 or above.
+ */
+@property(nonatomic, weak, nullable) id remoteMessageDelegate;
+
+/**
+ * FIRMessaging
+ *
+ * @return An instance of FIRMessaging.
+ */
++ (nonnull instancetype)messaging NS_SWIFT_NAME(messaging());
+
+/**
+ * Unavailable. Use +messaging instead.
+ */
+- (nonnull instancetype)init __attribute__((unavailable("Use +messaging instead.")));
+
+#pragma mark - Connect
+
+/**
+ * Create a FIRMessaging data connection which will be used to send the data notifications
+ * send by your server. It will also be used to send ACKS and other messages based
+ * on the FIRMessaging ACKS and other messages based on the FIRMessaging protocol.
+ *
+ * Use the `disconnect` method to disconnect the connection.
+ *
+ * @see FIRMessagingService disconnect
+ *
+ * @param handler The handler to be invoked once the connection is established.
+ * If the connection fails we invoke the handler with an
+ * appropriate error code letting you know why it failed. At
+ * the same time, FIRMessaging performs exponential backoff to retry
+ * establishing a connection and invoke the handler when successful.
+ */
+- (void)connectWithCompletion:(nonnull FIRMessagingConnectCompletion)handler;
+
+/**
+ * Disconnect the current FIRMessaging data connection. This stops any attempts to
+ * connect to FIRMessaging. Calling this on an already disconnected client is a no-op.
+ *
+ * Call this before `teardown` when your app is going to the background.
+ * Since the FIRMessaging connection won't be allowed to live when in background it is
+ * prudent to close the connection.
+ */
+- (void)disconnect;
+
+#pragma mark - Topics
+
+/**
+ * Asynchronously subscribes to a topic.
+ *
+ * @param topic The name of the topic, for example @"sports".
+ */
+- (void)subscribeToTopic:(nonnull NSString *)topic;
+
+/**
+ * Asynchronously unsubscribe to a topic.
+ *
+ * @param topic The name of the topic, for example @"sports".
+ */
+- (void)unsubscribeFromTopic:(nonnull NSString *)topic;
+
+#pragma mark - Upstream
+
+/**
+ * Sends an upstream ("device to cloud") message.
+ *
+ * The message will be queued if we don't have an active connection.
+ * You can only use the upstream feature if your GCM implementation
+ * uses the XMPP-based Cloud Connection Server.
+ *
+ * @param message Key/Value pairs to be sent. Values must be String, any
+ * other type will be ignored.
+ * @param to A string identifying the receiver of the message. For GCM
+ * project IDs the value is `SENDER_ID@gcm.googleapis.com`.
+ * @param messageID The ID of the message. This is generated by the application. It
+ * must be unique for each message generated by this application.
+ * It allows error callbacks and debugging, to uniquely identify
+ * each message.
+ * @param ttl The time to live for the message. In case we aren't able to
+ * send the message before the TTL expires we will send you a
+ * callback. If 0, we'll attempt to send immediately and return
+ * an error if we're not connected. Otherwise, the message will
+ * be queued. As for server-side messages, we don't return an error
+ * if the message has been dropped because of TTL; this can happen
+ * on the server side, and it would require extra communication.
+ */
+- (void)sendMessage:(nonnull NSDictionary *)message
+ to:(nonnull NSString *)receiver
+ withMessageID:(nonnull NSString *)messageID
+ timeToLive:(int64_t)ttl;
+
+#pragma mark - Analytics
+
+/**
+ * Call this when the app received a downstream message. Used to track message
+ * delivery and analytics for messages. You don't need to call this if you
+ * don't set the `FIRMessagingAutoSetupEnabled` flag in your Info.plist. In the
+ * latter case the library will call this implicitly to track relevant
+ * messages.
+ *
+ * @param message The downstream message received by the application.
+ *
+ * @return Information about the downstream message.
+ */
+- (nonnull FIRMessagingMessageInfo *)appDidReceiveMessage:(nonnull NSDictionary *)message;
+
+@end
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
new file mode 100644
index 0000000..27cbd84
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
@@ -0,0 +1 @@
+#import "FIRMessaging.h"
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Modules/module.modulemap b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Modules/module.modulemap
new file mode 100644
index 0000000..6f49d16
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/src/ios/firebase/FirebaseMessaging.framework/Modules/module.modulemap
@@ -0,0 +1,13 @@
+framework module FirebaseMessaging {
+
+ export *
+
+ umbrella header "FirebaseMessaging.h"
+
+ header "FIRMessaging.h"
+
+ link framework "AddressBook"
+ link framework "SystemConfiguration"
+
+ link "sqlite3"
+}
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities
new file mode 100644
index 0000000..7ab2cf2
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleIPhoneUtilities.framework/GoogleIPhoneUtilities differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities
new file mode 100644
index 0000000..de40424
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleSymbolUtilities.framework/GoogleSymbolUtilities b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleSymbolUtilities.framework/GoogleSymbolUtilities
new file mode 100644
index 0000000..408a002
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleSymbolUtilities.framework/GoogleSymbolUtilities differ
diff --git a/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleUtilities.framework/GoogleUtilities b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleUtilities.framework/GoogleUtilities
new file mode 100644
index 0000000..0fd17b6
Binary files /dev/null and b/plugins/cordova-plugin-fcm/src/ios/firebase/GoogleUtilities.framework/GoogleUtilities differ
diff --git a/plugins/cordova-plugin-fcm/www/FCMPlugin.js b/plugins/cordova-plugin-fcm/www/FCMPlugin.js
new file mode 100644
index 0000000..f24fbe6
--- /dev/null
+++ b/plugins/cordova-plugin-fcm/www/FCMPlugin.js
@@ -0,0 +1,47 @@
+var exec = require('cordova/exec');
+
+function FCMPlugin() {
+ console.log("FCMPlugin.js: is created");
+}
+
+// SUBSCRIBE TO TOPIC //
+FCMPlugin.prototype.subscribeToTopic = function( topic, success, error ){
+ exec(success, error, "FCMPlugin", 'subscribeToTopic', [topic]);
+}
+// UNSUBSCRIBE FROM TOPIC //
+FCMPlugin.prototype.unsubscribeFromTopic = function( topic, success, error ){
+ exec(success, error, "FCMPlugin", 'unsubscribeFromTopic', [topic]);
+}
+// NOTIFICATION CALLBACK //
+FCMPlugin.prototype.onNotification = function( callback, success, error ){
+ FCMPlugin.prototype.onNotificationReceived = callback;
+ exec(success, error, "FCMPlugin", 'registerNotification',[]);
+}
+// TOKEN REFRESH CALLBACK //
+FCMPlugin.prototype.onTokenRefresh = function( callback ){
+ FCMPlugin.prototype.onTokenRefreshReceived = callback;
+}
+// GET TOKEN //
+FCMPlugin.prototype.getToken = function( success, error ){
+ exec(success, error, "FCMPlugin", 'getToken', []);
+}
+
+// DEFAULT NOTIFICATION CALLBACK //
+FCMPlugin.prototype.onNotificationReceived = function(payload){
+ console.log("Received push notification")
+ console.log(payload)
+}
+// DEFAULT TOKEN REFRESH CALLBACK //
+FCMPlugin.prototype.onTokenRefreshReceived = function(token){
+ console.log("Received token refresh")
+ console.log(token)
+}
+// FIRE READY //
+exec(function(result){ console.log("FCMPlugin Ready OK") }, function(result){ console.log("FCMPlugin Ready ERROR") }, "FCMPlugin",'ready',[]);
+
+
+
+
+
+var fcmPlugin = new FCMPlugin();
+module.exports = fcmPlugin;
diff --git a/plugins/fetch.json b/plugins/fetch.json
index 477c787..125840c 100644
--- a/plugins/fetch.json
+++ b/plugins/fetch.json
@@ -1,97 +1,107 @@
{
- "cordova-plugin-console": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-console@1.0.5"
- },
- "is_top_level": true,
- "variables": {}
+ "cordova-plugin-console": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-console@1.0.5"
},
- "cordova-plugin-device": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-device@1.1.4"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "cordova-plugin-device": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-device@1.1.4"
},
- "cordova-plugin-splashscreen": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-splashscreen@~4.0.1"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "cordova-plugin-splashscreen": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-splashscreen@~4.0.1"
},
- "cordova-plugin-statusbar": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-statusbar@2.2.2"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "cordova-plugin-statusbar": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-statusbar@2.2.2"
},
- "cordova-plugin-whitelist": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-whitelist@1.3.1"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "cordova-plugin-whitelist": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-whitelist@1.3.1"
},
- "ionic-plugin-keyboard": {
- "source": {
- "type": "registry",
- "id": "ionic-plugin-keyboard@^2.2.1"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "ionic-plugin-keyboard": {
+ "source": {
+ "type": "registry",
+ "id": "ionic-plugin-keyboard@^2.2.1"
},
- "cordova-background-geolocation": {
- "source": {
- "type": "registry",
- "id": "https://github.com/transistorsoft/cordova-background-geolocation.git"
- },
- "is_top_level": true,
- "variables": {
- "LICENSE": "4bbb513c013111eae951647fd4f9e79f127fce6f7a00e9d327db9ea2a053a0df",
- "BACKGROUND_MODE_LOCATION": "location",
- "LOCATION_ALWAYS_AND_WHEN_IN_USE_USAGE_DESCRIPTION": "Always use is required for constant background location-tracking",
- "LOCATION_ALWAYS_USAGE_DESCRIPTION": "Background location-tracking is required",
- "LOCATION_WHEN_IN_USE_USAGE_DESCRIPTION": "Background location-tracking is required",
- "MOTION_USAGE_DESCRIPTION": "Using the accelerometer increases battery-efficiency by intelligently toggling location-tracking only when the device is detected to be moving"
- }
+ "is_top_level": true,
+ "variables": {}
+ },
+ "cordova-background-geolocation": {
+ "source": {
+ "type": "registry",
+ "id": "https://github.com/transistorsoft/cordova-background-geolocation.git"
},
- "cordova-plugin-background-fetch": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-background-fetch@~5.0.0"
- },
- "is_top_level": false,
- "variables": {}
+ "is_top_level": true,
+ "variables": {
+ "LICENSE": "4bbb513c013111eae951647fd4f9e79f127fce6f7a00e9d327db9ea2a053a0df",
+ "BACKGROUND_MODE_LOCATION": "location",
+ "LOCATION_ALWAYS_AND_WHEN_IN_USE_USAGE_DESCRIPTION": "Always use is required for constant background location-tracking",
+ "LOCATION_ALWAYS_USAGE_DESCRIPTION": "Background location-tracking is required",
+ "LOCATION_WHEN_IN_USE_USAGE_DESCRIPTION": "Background location-tracking is required",
+ "MOTION_USAGE_DESCRIPTION": "Using the accelerometer increases battery-efficiency by intelligently toggling location-tracking only when the device is detected to be moving"
+ }
+ },
+ "cordova-plugin-background-fetch": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-background-fetch@~5.0.0"
+ },
+ "is_top_level": false,
+ "variables": {}
+ },
+ "cordova-plugin-cocoalumberjack": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-cocoalumberjack@~0.0.4"
},
- "cordova-plugin-cocoalumberjack": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-cocoalumberjack@~0.0.4"
- },
- "is_top_level": false,
- "variables": {}
+ "is_top_level": false,
+ "variables": {}
+ },
+ "cordova-plugin-inappbrowser": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-inappbrowser@1.7.1"
},
- "cordova-plugin-inappbrowser": {
- "source": {
- "type": "registry",
- "id": "cordova-plugin-inappbrowser@1.7.1"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {}
+ },
+ "phonegap-plugin-push": {
+ "source": {
+ "type": "registry",
+ "id": "phonegap-plugin-push@^2.0.0"
},
- "phonegap-plugin-push": {
- "source": {
- "type": "registry",
- "id": "phonegap-plugin-push@2.0.0"
- },
- "is_top_level": true,
- "variables": {}
+ "is_top_level": true,
+ "variables": {
+ "SENDER_ID": "699558123249"
}
+ },
+ "cordova-plugin-fcm": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-fcm@^2.1.2"
+ },
+ "is_top_level": true,
+ "variables": {}
+ }
}
\ No newline at end of file
diff --git a/resources/android/icon/drawable-hdpi-icon.png b/resources/android/icon/drawable-hdpi-icon.png
index 760ba5f..f69032d 100755
Binary files a/resources/android/icon/drawable-hdpi-icon.png and b/resources/android/icon/drawable-hdpi-icon.png differ
diff --git a/resources/android/icon/drawable-ldpi-icon.png b/resources/android/icon/drawable-ldpi-icon.png
index d730b51..865ae35 100755
Binary files a/resources/android/icon/drawable-ldpi-icon.png and b/resources/android/icon/drawable-ldpi-icon.png differ
diff --git a/resources/android/icon/drawable-mdpi-icon.png b/resources/android/icon/drawable-mdpi-icon.png
index cbada7c..0ca11e5 100755
Binary files a/resources/android/icon/drawable-mdpi-icon.png and b/resources/android/icon/drawable-mdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xhdpi-icon.png b/resources/android/icon/drawable-xhdpi-icon.png
index fb18f31..1a08bd0 100755
Binary files a/resources/android/icon/drawable-xhdpi-icon.png and b/resources/android/icon/drawable-xhdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xxhdpi-icon.png b/resources/android/icon/drawable-xxhdpi-icon.png
index cae542b..de3de7d 100755
Binary files a/resources/android/icon/drawable-xxhdpi-icon.png and b/resources/android/icon/drawable-xxhdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xxxhdpi-icon.png b/resources/android/icon/drawable-xxxhdpi-icon.png
index 45853a8..d99bbd3 100755
Binary files a/resources/android/icon/drawable-xxxhdpi-icon.png and b/resources/android/icon/drawable-xxxhdpi-icon.png differ
diff --git a/resources/android/splash/drawable-land-hdpi-screen.png b/resources/android/splash/drawable-land-hdpi-screen.png
index cf48b6f..9d65854 100644
Binary files a/resources/android/splash/drawable-land-hdpi-screen.png and b/resources/android/splash/drawable-land-hdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-ldpi-screen.png b/resources/android/splash/drawable-land-ldpi-screen.png
index 244cb6f..7a6dfae 100644
Binary files a/resources/android/splash/drawable-land-ldpi-screen.png and b/resources/android/splash/drawable-land-ldpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-mdpi-screen.png b/resources/android/splash/drawable-land-mdpi-screen.png
index 4b2907f..71dee64 100644
Binary files a/resources/android/splash/drawable-land-mdpi-screen.png and b/resources/android/splash/drawable-land-mdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xhdpi-screen.png b/resources/android/splash/drawable-land-xhdpi-screen.png
index d028959..9cca855 100644
Binary files a/resources/android/splash/drawable-land-xhdpi-screen.png and b/resources/android/splash/drawable-land-xhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xxhdpi-screen.png b/resources/android/splash/drawable-land-xxhdpi-screen.png
index b67a5eb..c8f8bd4 100644
Binary files a/resources/android/splash/drawable-land-xxhdpi-screen.png and b/resources/android/splash/drawable-land-xxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xxxhdpi-screen.png b/resources/android/splash/drawable-land-xxxhdpi-screen.png
index d5a4462..a1cf279 100644
Binary files a/resources/android/splash/drawable-land-xxxhdpi-screen.png and b/resources/android/splash/drawable-land-xxxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-hdpi-screen.png b/resources/android/splash/drawable-port-hdpi-screen.png
index 36bc62f..615bd0a 100644
Binary files a/resources/android/splash/drawable-port-hdpi-screen.png and b/resources/android/splash/drawable-port-hdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-ldpi-screen.png b/resources/android/splash/drawable-port-ldpi-screen.png
index 0a1a48d..ee288e2 100644
Binary files a/resources/android/splash/drawable-port-ldpi-screen.png and b/resources/android/splash/drawable-port-ldpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-mdpi-screen.png b/resources/android/splash/drawable-port-mdpi-screen.png
index 249766e..3738cb7 100644
Binary files a/resources/android/splash/drawable-port-mdpi-screen.png and b/resources/android/splash/drawable-port-mdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xhdpi-screen.png b/resources/android/splash/drawable-port-xhdpi-screen.png
index 9e2fbf3..c70938e 100644
Binary files a/resources/android/splash/drawable-port-xhdpi-screen.png and b/resources/android/splash/drawable-port-xhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xxhdpi-screen.png b/resources/android/splash/drawable-port-xxhdpi-screen.png
index 92819d1..bbbbdcc 100644
Binary files a/resources/android/splash/drawable-port-xxhdpi-screen.png and b/resources/android/splash/drawable-port-xxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xxxhdpi-screen.png b/resources/android/splash/drawable-port-xxxhdpi-screen.png
index 4d8278e..ef1d906 100644
Binary files a/resources/android/splash/drawable-port-xxxhdpi-screen.png and b/resources/android/splash/drawable-port-xxxhdpi-screen.png differ
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 56ebbf6..f4fd4a9 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,14 +1,15 @@
import { Component } from '@angular/core';
-import { Platform } from 'ionic-angular';
+import { Platform, AlertController } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import {Storage } from '@ionic/storage';
import { TabsPage } from '../pages/tabs/tabs';
import { WelcomePage } from '../pages/welcome/welcome';
+import {AccountService} from './../services/account';
import {AuthService} from './../services/auth';
-
+import { Push, PushObject, PushOptions } from '@ionic-native/push';
@Component({
templateUrl: 'app.html'
@@ -16,10 +17,13 @@ import {AuthService} from './../services/auth';
export class MyApp {
rootPage:any;
- constructor(platform: Platform,
- statusBar: StatusBar,
- splashScreen: SplashScreen,
+ constructor(platform: Platform,
+ statusBar: StatusBar,
+ splashScreen: SplashScreen,
private authService:AuthService,
+ public push:Push,
+ public accountService: AccountService,
+ public alertCtrl: AlertController,
private storage:Storage) {
platform.ready().then(() => {
@@ -29,24 +33,56 @@ export class MyApp {
splashScreen.hide();
this.authService.loadToken();
+ this.pushsetup();
this.routeToRootPage();
});
}
-
+
routeToRootPage(){
this.storage.get('token').then(t => {
let authenticated = t ? true:false;
if(authenticated){
console.log('authenticated');
this.rootPage = TabsPage;
-
+
}else{
console.log('not authenticated');
this.rootPage = WelcomePage;
-
+
}
});
}
+ pushsetup() {
+ const options: PushOptions = {
+ android: {},
+ ios: {
+ alert: 'true',
+ badge: true,
+ sound: 'false'
+ },
+ windows: {}
+};
+
+const pushObject: PushObject = this.push.init(options);
+
+pushObject.on('notification').subscribe((notification: any) => {
+ if (notification.additionalData.foreground) {
+ let youralert = this.alertCtrl.create({
+ title: 'New Push notification',
+ message: notification.message
+ });
+ youralert.present();
+ }
+});
+
+pushObject.on('registration').subscribe((registration: any) => {
+ // alert(registration.registrationId);
+ this.accountService.registerDevice(registration.registrationId);
+ console.log("Saved Token:", registration.registrationId);
+});
+
+pushObject.on('error').subscribe(error => alert('Error with Push plugin' + error));
}
+}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 12bb44c..d50b8b7 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -8,7 +8,7 @@ import { StatusBar } from '@ionic-native/status-bar';
import { CloudSettings, CloudModule } from '@ionic/cloud-angular';
import { IonicStorageModule } from '@ionic/storage';
import { InAppBrowser } from '@ionic-native/in-app-browser';
-import { Push, PushObject, PushOptions } from '@ionic-native/push';
+import { Push } from '@ionic-native/push';
import { Keyboard } from '@ionic-native/keyboard';
import { ChartsModule } from 'ng2-charts';
@@ -34,7 +34,7 @@ const cloudSettings: CloudSettings = {
'app_id': 'f37ad9eb'
},
'push': {
- 'sender_id': 'SENDER_ID',
+ 'sender_id': '',
'pluginConfig': {
'ios': {
'badge': true,
@@ -84,13 +84,12 @@ const cloudSettings: CloudSettings = {
InAppBrowser,
Push,
Keyboard,
-
- SettingsService,
- AuthService,
- AccountService,
+ SettingsService,
+ AuthService,
+ AccountService,
VenueService,
GeoService,
-
+
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
diff --git a/src/services/settings.ts b/src/services/settings.ts
index fc5460d..de98a87 100644
--- a/src/services/settings.ts
+++ b/src/services/settings.ts
@@ -5,8 +5,9 @@ export class SettingsService{
public static DEBUG:boolean = true;
public static API_VERSION:string = 'v1';
// public static API_ENDPOINT:string = `http://localhost:8100/api/${SettingsService.API_VERSION}`;
- public static API_ENDPOINT:string = `http://ec2-107-23-148-64.compute-1.amazonaws.com/api/${SettingsService.API_VERSION}`;
+ // public static API_ENDPOINT:string = `http://ec2-107-23-148-64.compute-1.amazonaws.com/api/${SettingsService.API_VERSION}`;
+ public static API_ENDPOINT:string = `http://127.0.0.1:8000/api/${SettingsService.API_VERSION}`;
public static APP_VERSION:string = '2.0.0';
constructor(){ }
-}
\ No newline at end of file
+}
diff --git a/www/assets/fonts/roboto-bold.woff b/www/assets/fonts/roboto-bold.woff
deleted file mode 100644
index 3143de2..0000000
Binary files a/www/assets/fonts/roboto-bold.woff and /dev/null differ
diff --git a/www/assets/fonts/roboto-bold.woff2 b/www/assets/fonts/roboto-bold.woff2
deleted file mode 100644
index e9d591e..0000000
Binary files a/www/assets/fonts/roboto-bold.woff2 and /dev/null differ
diff --git a/www/assets/fonts/roboto-light.woff b/www/assets/fonts/roboto-light.woff
deleted file mode 100644
index 1bff3ec..0000000
Binary files a/www/assets/fonts/roboto-light.woff and /dev/null differ
diff --git a/www/assets/fonts/roboto-light.woff2 b/www/assets/fonts/roboto-light.woff2
deleted file mode 100644
index 94a60b9..0000000
Binary files a/www/assets/fonts/roboto-light.woff2 and /dev/null differ
diff --git a/www/assets/fonts/roboto-medium.woff b/www/assets/fonts/roboto-medium.woff
deleted file mode 100644
index d3c82e1..0000000
Binary files a/www/assets/fonts/roboto-medium.woff and /dev/null differ
diff --git a/www/assets/fonts/roboto-medium.woff2 b/www/assets/fonts/roboto-medium.woff2
deleted file mode 100644
index 74aaff4..0000000
Binary files a/www/assets/fonts/roboto-medium.woff2 and /dev/null differ
diff --git a/www/assets/fonts/roboto-regular.woff b/www/assets/fonts/roboto-regular.woff
deleted file mode 100644
index 5e353cf..0000000
Binary files a/www/assets/fonts/roboto-regular.woff and /dev/null differ
diff --git a/www/assets/fonts/roboto-regular.woff2 b/www/assets/fonts/roboto-regular.woff2
deleted file mode 100644
index 96a6015..0000000
Binary files a/www/assets/fonts/roboto-regular.woff2 and /dev/null differ