summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xStoneIsland/config.xml1
-rw-r--r--StoneIsland/package-lock.json10
-rw-r--r--StoneIsland/package.json4
-rwxr-xr-xStoneIsland/platforms/android/AndroidManifest.xml18
-rwxr-xr-xStoneIsland/platforms/android/android.json49
-rwxr-xr-xStoneIsland/platforms/android/assets/www/cordova_plugins.js21
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-firebase/www/firebase.js124
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rw-r--r--StoneIsland/platforms/android/build.gradle7
-rwxr-xr-xStoneIsland/platforms/android/cordova-plugin-firebase/stoneisland-build.gradle15
-rw-r--r--StoneIsland/platforms/android/google-services.json4
-rwxr-xr-xStoneIsland/platforms/android/platform_www/cordova_plugins.js21
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-firebase/www/firebase.js124
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rwxr-xr-xStoneIsland/platforms/android/project.properties7
-rw-r--r--StoneIsland/platforms/android/res/values/colors.xml6
-rwxr-xr-xStoneIsland/platforms/android/res/values/strings.xml2
-rw-r--r--StoneIsland/platforms/android/res/xml/config.xml7
-rw-r--r--StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java469
-rwxr-xr-xStoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePlugin.java601
-rwxr-xr-xStoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginInstanceIDService.java26
-rwxr-xr-xStoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginMessagingService.java127
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/firebase/OnNotificationOpenReceiver.java24
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj120
-rw-r--r--StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstatebin59759 -> 59759 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.h5
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.m132
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Firebase.h52
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/FirebaseAnalyticsbin0 -> 14943968 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h57
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics.h102
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRApp.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRConfiguration.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIREventNames.h336
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIROptions.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h369
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h13
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h9
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Modules/module.modulemap10
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/FirebaseCorebin0 -> 4836560 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h38
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRApp.h98
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRConfiguration.h52
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRLoggerLevel.h12
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIROptions.h93
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FirebaseCore.h5
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Modules/module.modulemap8
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/FirebaseCrashbin0 -> 5551304 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FIRCrashLog.h164
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FirebaseCrash.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Modules/module.modulemap12
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/FirebaseInstanceIDbin0 -> 4472464 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h245
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Modules/module.modulemap7
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/FirebaseMessagingbin0 -> 6370360 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h227
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Modules/module.modulemap11
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.h30
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.m331
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/FirebaseRemoteConfigbin0 -> 3170248 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h224
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h1
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Modules/module.modulemap11
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/GoogleToolboxForMac.framework/GoogleToolboxForMacbin0 -> 626792 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Protobuf.framework/Protobufbin0 -> 7721656 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h192
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h217
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h124
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h102
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h107
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h54
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h133
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h49
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h33
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h57
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h34
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m543
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.abin99320 -> 0 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.abin34421440 -> 0 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Resources/GoogleService-Info.plist6
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/config.xml7
-rw-r--r--StoneIsland/platforms/ios/frameworks.json8
-rw-r--r--StoneIsland/platforms/ios/ios.json53
-rw-r--r--StoneIsland/platforms/ios/platform_www/cordova_plugins.js21
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-firebase/www/firebase.js124
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rw-r--r--StoneIsland/platforms/ios/www/cordova_plugins.js21
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-firebase/www/firebase.js124
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rwxr-xr-xStoneIsland/plugins/android.json4
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/LICENSE21
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/README.md342
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/package.json60
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/plugin.xml108
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/scripts/after_prepare.js134
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePlugin.java601
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginInstanceIDService.java26
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java127
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/android/OnNotificationOpenReceiver.java24
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/build-extras.gradle1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/build.gradle15
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/android/colors.xml6
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/android/google-services.json0
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.h5
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m132
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/FirebaseAnalyticsbin0 -> 14943968 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h57
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h102
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRApp.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRConfiguration.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h336
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIROptions.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h369
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h13
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h9
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap10
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/FirebaseCorebin0 -> 4836560 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h38
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRApp.h98
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRConfiguration.h52
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRLoggerLevel.h12
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIROptions.h93
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FirebaseCore.h5
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Modules/module.modulemap8
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/FirebaseInstanceIDbin0 -> 4472464 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h245
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap7
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMacbin0 -> 626792 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/FirebaseCrashbin0 -> 5551304 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FIRCrashLog.h164
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FirebaseCrash.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Modules/module.modulemap12
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/Protobuf.framework/Protobufbin0 -> 7721656 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/batch-upload416
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/dump_symsbin0 -> 211352 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/extract-keys12
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym273
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym-util.bash382
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym.sh4
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Firebase.h52
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/FirebaseMessagingbin0 -> 6370360 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FIRMessaging.h227
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FirebaseMessaging.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Modules/module.modulemap11
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/Protobuf.framework/Protobufbin0 -> 7721656 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/FirebaseRemoteConfigbin0 -> 3170248 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h224
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h1
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Modules/module.modulemap11
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/Protobuf.framework/Protobufbin0 -> 7721656 bytes
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.h30
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.m331
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/src/ios/GoogleService-Info.plist6
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/www/firebase-browser.js119
-rw-r--r--StoneIsland/plugins/cordova-plugin-firebase/www/firebase.js121
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE20
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/README.md203
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java469
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js253
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h192
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h217
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h124
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h102
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h107
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h54
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h133
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h49
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h33
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h57
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h34
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m543
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.abin99320 -> 0 bytes
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.abin34421440 -> 0 bytes
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js121
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/package.json29
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml99
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts62
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs30
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs578
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs103
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs399
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js127
-rwxr-xr-xStoneIsland/plugins/fetch.json8
-rw-r--r--StoneIsland/plugins/ios.json4
189 files changed, 9648 insertions, 6942 deletions
diff --git a/StoneIsland/config.xml b/StoneIsland/config.xml
index dc44d6e7..da6b1387 100755
--- a/StoneIsland/config.xml
+++ b/StoneIsland/config.xml
@@ -43,4 +43,5 @@
</platform>
<plugin name="cordova-plugin-statusbar" spec="^2.2.3" />
<plugin name="cordova-plugin-whitelist" spec="1" />
+ <plugin name="cordova-plugin-firebase" spec="^0.1.24" />
</widget>
diff --git a/StoneIsland/package-lock.json b/StoneIsland/package-lock.json
index af64909b..bd618007 100644
--- a/StoneIsland/package-lock.json
+++ b/StoneIsland/package-lock.json
@@ -1040,11 +1040,21 @@
}
}
},
+ "cordova-plugin-firebase": {
+ "version": "0.1.24",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-firebase/-/cordova-plugin-firebase-0.1.24.tgz",
+ "integrity": "sha1-qZk6XHZxFQJM2IIJDuiBT6TvuYQ="
+ },
"cordova-plugin-statusbar": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.2.3.tgz",
"integrity": "sha1-UcXgKtQzvr0LDcl3pEbrkd/uFQI="
},
+ "cordova-plugin-whitelist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.2.tgz",
+ "integrity": "sha1-W2M1/rn1MB88ATuQlsuIhb29UHY="
+ },
"cordova-registry-mapper": {
"version": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
"integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw="
diff --git a/StoneIsland/package.json b/StoneIsland/package.json
index db3ef530..455528cc 100644
--- a/StoneIsland/package.json
+++ b/StoneIsland/package.json
@@ -6,6 +6,7 @@
"dependencies": {
"cordova": "^6.4.0",
"cordova-ios": "^4.3.1",
+ "cordova-plugin-firebase": "^0.1.24",
"cordova-plugin-statusbar": "^2.2.3",
"cordova-plugin-whitelist": "1",
"ios-deploy": "^1.9.0"
@@ -20,7 +21,8 @@
"cordova": {
"plugins": {
"cordova-plugin-whitelist": {},
- "cordova-plugin-statusbar": {}
+ "cordova-plugin-statusbar": {},
+ "cordova-plugin-firebase": {}
}
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml
index 25ce62dd..dbd8afc1 100755
--- a/StoneIsland/platforms/android/AndroidManifest.xml
+++ b/StoneIsland/platforms/android/AndroidManifest.xml
@@ -1,7 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="6000" android:versionName="0.8.4" package="us.okfoc.stoneisland" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
- <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
@@ -41,18 +40,18 @@
</intent-filter>
</service>
<service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" />
- <receiver android:enabled="true" android:name="com.google.android.gms.analytics.AnalyticsReceiver">
+ <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementService" />
+ <service android:name="org.apache.cordova.firebase.FirebasePluginMessagingService">
<intent-filter>
- <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
+ <action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
- </receiver>
- <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.AnalyticsService" />
- <receiver android:enabled="true" android:exported="true" android:name="com.google.android.gms.analytics.CampaignTrackingReceiver">
+ </service>
+ <service android:name="org.apache.cordova.firebase.FirebasePluginInstanceIDService">
<intent-filter>
- <action android:name="com.android.vending.INSTALL_REFERRER" />
+ <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
- </receiver>
- <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.CampaignTrackingService" />
+ </service>
+ <receiver android:name="org.apache.cordova.firebase.OnNotificationOpenReceiver" />
</application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
@@ -67,4 +66,5 @@
<uses-permission android:name="${applicationId}.permission.PushHandlerActivity" />
<permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<permission android:name="${applicationId}.permission.PushHandlerActivity" android:protectionLevel="signature" />
+ <uses-permission android:name="android.permission.INTERNET" />
</manifest>
diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json
index df55a288..c87b55d4 100755
--- a/StoneIsland/platforms/android/android.json
+++ b/StoneIsland/platforms/android/android.json
@@ -53,11 +53,11 @@
"count": 1
},
{
- "xml": "<feature name=\"UniversalAnalytics\"><param name=\"android-package\" value=\"com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin\" /></feature>",
+ "xml": "<feature name=\"StatusBar\"><param name=\"android-package\" value=\"org.apache.cordova.statusbar.StatusBar\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
{
- "xml": "<feature name=\"StatusBar\"><param name=\"android-package\" value=\"org.apache.cordova.statusbar.StatusBar\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "xml": "<feature name=\"FirebasePlugin\"><param name=\"android-package\" value=\"org.apache.cordova.firebase.FirebasePlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
}
]
@@ -91,19 +91,19 @@
"count": 1
},
{
- "xml": "<receiver android:enabled=\"true\" android:name=\"com.google.android.gms.analytics.AnalyticsReceiver\"><intent-filter><action android:name=\"com.google.android.gms.analytics.ANALYTICS_DISPATCH\" /></intent-filter></receiver>",
+ "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.measurement.AppMeasurementService\" />",
"count": 1
},
{
- "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.AnalyticsService\" />",
+ "xml": "<service android:name=\"org.apache.cordova.firebase.FirebasePluginMessagingService\"><intent-filter><action android:name=\"com.google.firebase.MESSAGING_EVENT\" /></intent-filter></service>",
"count": 1
},
{
- "xml": "<receiver android:enabled=\"true\" android:exported=\"true\" android:name=\"com.google.android.gms.analytics.CampaignTrackingReceiver\"><intent-filter><action android:name=\"com.android.vending.INSTALL_REFERRER\" /></intent-filter></receiver>",
+ "xml": "<service android:name=\"org.apache.cordova.firebase.FirebasePluginInstanceIDService\"><intent-filter><action android:name=\"com.google.firebase.INSTANCE_ID_EVENT\" /></intent-filter></service>",
"count": 1
},
{
- "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.CampaignTrackingService\" />",
+ "xml": "<receiver android:name=\"org.apache.cordova.firebase.OnNotificationOpenReceiver\" />",
"count": 1
}
],
@@ -170,6 +170,10 @@
{
"xml": "<uses-permission android:name=\"android.permission.INTERNET\" />",
"count": 1
+ },
+ {
+ "xml": "<uses-permission android:name=\"android.permission.WAKE_LOCK\" />",
+ "count": 1
}
],
"/manifest/application/activity": [
@@ -195,6 +199,14 @@
{
"xml": "<string name=\"google_app_id\">XXXXXXX</string>",
"count": 1
+ },
+ {
+ "xml": "<string name=\"google_app_id\">@string/google_app_id</string>",
+ "count": 1
+ },
+ {
+ "xml": "<string name=\"google_api_key\">@string/google_api_key</string>",
+ "count": 1
}
]
}
@@ -246,10 +258,10 @@
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-google-analytics": {
+ "cordova-plugin-statusbar": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-statusbar": {
+ "cordova-plugin-firebase": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
@@ -361,21 +373,20 @@
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
],
"plugin_metadata": {
@@ -392,7 +403,7 @@
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/cordova_plugins.js b/StoneIsland/platforms/android/assets/www/cordova_plugins.js
index be2a17ab..f462f716 100755
--- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js
@@ -106,21 +106,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
];
module.exports.metadata =
@@ -139,8 +138,8 @@ module.exports.metadata =
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-firebase/www/firebase.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-firebase/www/firebase.js
new file mode 100644
index 00000000..e1e423d1
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-firebase/www/firebase.js
@@ -0,0 +1,124 @@
+cordova.define("cordova-plugin-firebase.FirebasePlugin", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+exports.getInstanceId = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getInstanceId", []);
+};
+
+exports.getToken = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getToken", []);
+};
+
+exports.onNotificationOpen = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onNotificationOpen", []);
+};
+
+exports.onTokenRefresh = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onTokenRefresh", []);
+};
+
+exports.grantPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "grantPermission", []);
+};
+
+exports.hasPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "hasPermission", []);
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ exec(success, error, "FirebasePlugin", "setBadgeNumber", [number]);
+};
+
+exports.getBadgeNumber = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getBadgeNumber", []);
+};
+
+exports.subscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "subscribe", [topic]);
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "unsubscribe", [topic]);
+};
+
+exports.unregister = function(success, error) {
+ exec(success, error, "FirebasePlugin", "unregister", []);
+};
+
+exports.logEvent = function(name, params, success, error) {
+ exec(success, error, "FirebasePlugin", "logEvent", [name, params]);
+};
+
+exports.logError = function(message, success, error) {
+ exec(success, error, "FirebasePlugin", "logError", [message]);
+};
+
+exports.setScreenName = function(name, success, error) {
+ exec(success, error, "FirebasePlugin", "setScreenName", [name]);
+};
+
+exports.setUserId = function(id, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserId", [id]);
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserProperty", [name, value]);
+};
+
+exports.activateFetched = function (success, error) {
+ exec(success, error, "FirebasePlugin", "activateFetched", []);
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ var args = [];
+ if (typeof cacheExpirationSeconds === 'number') {
+ args.push(cacheExpirationSeconds);
+ } else {
+ error = success;
+ success = cacheExpirationSeconds;
+ }
+ exec(success, error, "FirebasePlugin", "fetch", args);
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getByteArray", args);
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getValue", args);
+};
+
+exports.getInfo = function (success, error) {
+ exec(success, error, "FirebasePlugin", "getInfo", []);
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ exec(success, error, "FirebasePlugin", "setConfigSettings", [settings]);
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ var args = [defaults];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "setDefaults", args);
+};
+
+});
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js
deleted file mode 100644
index b46b19ea..00000000
--- a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js
+++ /dev/null
@@ -1,130 +0,0 @@
-cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
-function UniversalAnalyticsPlugin() {}
-
-UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
- if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
- dispatchPeriod = 30;
- } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
- // Called without dispatchPeriod but with a callback.
- // Looks like the original API was used so shift parameters over to remain compatible.
- error = success;
- success = dispatchPeriod;
- dispatchPeriod = 30;
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
-};
-
-UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
-};
-
-UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
-};
-
-/* enables verbose logging */
-UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
-};
-
-UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
- if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
- campaignUrl = '';
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
-};
-
-UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
- if (typeof key !== "number") {
- throw Error("key must be a valid integer not '" + typeof key + "'");
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
- if (typeof value === 'undefined' || value === null) {
- value = 0;
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
-};
-
-/**
- * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
- */
-UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
- if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
- intervalInMilliseconds = 0;
- }
- if (typeof name === 'undefined' || name === null) {
- name = '';
- }
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
-};
-
-/* Google Analytics e-Commerce Tracking */
-/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
-UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
-};
-
-UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
-};
-
-/* automatic uncaught exception tracking */
-UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
-};
-
-module.exports = new UniversalAnalyticsPlugin();
-
-});
diff --git a/StoneIsland/platforms/android/build.gradle b/StoneIsland/platforms/android/build.gradle
index a6e144c5..c4752d60 100644
--- a/StoneIsland/platforms/android/build.gradle
+++ b/StoneIsland/platforms/android/build.gradle
@@ -91,6 +91,7 @@ ext {
// PLUGIN GRADLE EXTENSIONS START
apply from: "phonegap-plugin-push/stoneisland-push.gradle"
+apply from: "cordova-plugin-firebase/stoneisland-build.gradle"
// PLUGIN GRADLE EXTENSIONS END
def hasBuildExtras = file('build-extras.gradle').exists()
@@ -255,7 +256,11 @@ dependencies {
compile "com.android.support:support-v13:23+"
compile "com.google.android.gms:play-services-gcm:9.8+"
compile "me.leolin:ShortcutBadger:1.1.11@aar"
- compile "com.google.android.gms:play-services-analytics:+"
+ compile "com.google.gms:google-services:+"
+ compile "com.google.firebase:firebase-core:+"
+ compile "com.google.firebase:firebase-messaging:+"
+ compile "com.google.firebase:firebase-crash:+"
+ compile "com.google.firebase:firebase-config:+"
// SUB-PROJECT DEPENDENCIES END
}
diff --git a/StoneIsland/platforms/android/cordova-plugin-firebase/stoneisland-build.gradle b/StoneIsland/platforms/android/cordova-plugin-firebase/stoneisland-build.gradle
new file mode 100755
index 00000000..d5cb4edd
--- /dev/null
+++ b/StoneIsland/platforms/android/cordova-plugin-firebase/stoneisland-build.gradle
@@ -0,0 +1,15 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.google.gms:google-services:3.0.0'
+ }
+}
+repositories {
+ mavenCentral()
+}
+dependencies {
+ compile 'me.leolin:ShortcutBadger:1.1.4@aar'
+ compile 'com.google.firebase:firebase-crash:+'
+}
diff --git a/StoneIsland/platforms/android/google-services.json b/StoneIsland/platforms/android/google-services.json
index 57497bf5..e69de29b 100644
--- a/StoneIsland/platforms/android/google-services.json
+++ b/StoneIsland/platforms/android/google-services.json
@@ -1,4 +0,0 @@
-{
- "project_info": {},
- "client": []
-}
diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
index be2a17ab..f462f716 100755
--- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
@@ -106,21 +106,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
];
module.exports.metadata =
@@ -139,8 +138,8 @@ module.exports.metadata =
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-firebase/www/firebase.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-firebase/www/firebase.js
new file mode 100644
index 00000000..e1e423d1
--- /dev/null
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-firebase/www/firebase.js
@@ -0,0 +1,124 @@
+cordova.define("cordova-plugin-firebase.FirebasePlugin", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+exports.getInstanceId = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getInstanceId", []);
+};
+
+exports.getToken = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getToken", []);
+};
+
+exports.onNotificationOpen = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onNotificationOpen", []);
+};
+
+exports.onTokenRefresh = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onTokenRefresh", []);
+};
+
+exports.grantPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "grantPermission", []);
+};
+
+exports.hasPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "hasPermission", []);
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ exec(success, error, "FirebasePlugin", "setBadgeNumber", [number]);
+};
+
+exports.getBadgeNumber = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getBadgeNumber", []);
+};
+
+exports.subscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "subscribe", [topic]);
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "unsubscribe", [topic]);
+};
+
+exports.unregister = function(success, error) {
+ exec(success, error, "FirebasePlugin", "unregister", []);
+};
+
+exports.logEvent = function(name, params, success, error) {
+ exec(success, error, "FirebasePlugin", "logEvent", [name, params]);
+};
+
+exports.logError = function(message, success, error) {
+ exec(success, error, "FirebasePlugin", "logError", [message]);
+};
+
+exports.setScreenName = function(name, success, error) {
+ exec(success, error, "FirebasePlugin", "setScreenName", [name]);
+};
+
+exports.setUserId = function(id, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserId", [id]);
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserProperty", [name, value]);
+};
+
+exports.activateFetched = function (success, error) {
+ exec(success, error, "FirebasePlugin", "activateFetched", []);
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ var args = [];
+ if (typeof cacheExpirationSeconds === 'number') {
+ args.push(cacheExpirationSeconds);
+ } else {
+ error = success;
+ success = cacheExpirationSeconds;
+ }
+ exec(success, error, "FirebasePlugin", "fetch", args);
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getByteArray", args);
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getValue", args);
+};
+
+exports.getInfo = function (success, error) {
+ exec(success, error, "FirebasePlugin", "getInfo", []);
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ exec(success, error, "FirebasePlugin", "setConfigSettings", [settings]);
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ var args = [defaults];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "setDefaults", args);
+};
+
+});
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
deleted file mode 100644
index b46b19ea..00000000
--- a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
+++ /dev/null
@@ -1,130 +0,0 @@
-cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
-function UniversalAnalyticsPlugin() {}
-
-UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
- if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
- dispatchPeriod = 30;
- } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
- // Called without dispatchPeriod but with a callback.
- // Looks like the original API was used so shift parameters over to remain compatible.
- error = success;
- success = dispatchPeriod;
- dispatchPeriod = 30;
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
-};
-
-UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
-};
-
-UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
-};
-
-/* enables verbose logging */
-UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
-};
-
-UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
- if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
- campaignUrl = '';
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
-};
-
-UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
- if (typeof key !== "number") {
- throw Error("key must be a valid integer not '" + typeof key + "'");
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
- if (typeof value === 'undefined' || value === null) {
- value = 0;
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
-};
-
-/**
- * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
- */
-UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
- if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
- intervalInMilliseconds = 0;
- }
- if (typeof name === 'undefined' || name === null) {
- name = '';
- }
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
-};
-
-/* Google Analytics e-Commerce Tracking */
-/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
-UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
-};
-
-UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
-};
-
-/* automatic uncaught exception tracking */
-UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
-};
-
-module.exports = new UniversalAnalyticsPlugin();
-
-});
diff --git a/StoneIsland/platforms/android/project.properties b/StoneIsland/platforms/android/project.properties
index edb81941..c708ff82 100755
--- a/StoneIsland/platforms/android/project.properties
+++ b/StoneIsland/platforms/android/project.properties
@@ -16,4 +16,9 @@ cordova.gradle.include.1=phonegap-plugin-push/stoneisland-push.gradle
cordova.system.library.1=com.android.support:support-v13:23+
cordova.system.library.2=com.google.android.gms:play-services-gcm:9.8+
cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar
-cordova.system.library.4=com.google.android.gms:play-services-analytics:+ \ No newline at end of file
+cordova.gradle.include.2=cordova-plugin-firebase/stoneisland-build.gradle
+cordova.system.library.4=com.google.gms:google-services:+
+cordova.system.library.5=com.google.firebase:firebase-core:+
+cordova.system.library.6=com.google.firebase:firebase-messaging:+
+cordova.system.library.7=com.google.firebase:firebase-crash:+
+cordova.system.library.8=com.google.firebase:firebase-config:+ \ No newline at end of file
diff --git a/StoneIsland/platforms/android/res/values/colors.xml b/StoneIsland/platforms/android/res/values/colors.xml
new file mode 100644
index 00000000..6f1665a5
--- /dev/null
+++ b/StoneIsland/platforms/android/res/values/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="primary">#FFFFFF00</color>
+ <color name="primary_dark">#FF220022</color>
+ <color name="accent">#FF00FFFF</color>
+</resources> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/res/values/strings.xml b/StoneIsland/platforms/android/res/values/strings.xml
index 60540e70..84421037 100755
--- a/StoneIsland/platforms/android/res/values/strings.xml
+++ b/StoneIsland/platforms/android/res/values/strings.xml
@@ -4,4 +4,6 @@
<string name="launcher_name">@string/app_name</string>
<string name="activity_name">@string/launcher_name</string>
<string name="google_app_id">XXXXXXX</string>
+ <string name="google_app_id">@string/google_app_id</string>
+ <string name="google_api_key">@string/google_api_key</string>
</resources>
diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml
index 49590cc4..57fa94d1 100644
--- a/StoneIsland/platforms/android/res/xml/config.xml
+++ b/StoneIsland/platforms/android/res/xml/config.xml
@@ -69,11 +69,12 @@
<preference name="AllowInlineMediaPlayback" value="true" />
<preference name="AndroidLaunchMode" value="singleTop" />
<preference name="android-minSdkVersion" value="21" />
- <feature name="UniversalAnalytics">
- <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
- </feature>
<feature name="StatusBar">
<param name="android-package" value="org.apache.cordova.statusbar.StatusBar" />
<param name="onload" value="true" />
</feature>
+ <feature name="FirebasePlugin">
+ <param name="android-package" value="org.apache.cordova.firebase.FirebasePlugin" />
+ <param name="onload" value="true" />
+ </feature>
</widget>
diff --git a/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java b/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java
deleted file mode 100644
index 23c20023..00000000
--- a/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java
+++ /dev/null
@@ -1,469 +0,0 @@
-package com.danielcwilson.plugins.analytics;
-
-import com.google.android.gms.analytics.GoogleAnalytics;
-import com.google.android.gms.analytics.Logger.LogLevel;
-import com.google.android.gms.analytics.HitBuilders;
-import com.google.android.gms.analytics.Tracker;
-
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CallbackContext;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map.Entry;
-
-public class UniversalAnalyticsPlugin extends CordovaPlugin {
- public static final String START_TRACKER = "startTrackerWithId";
- public static final String TRACK_VIEW = "trackView";
- public static final String TRACK_EVENT = "trackEvent";
- public static final String TRACK_EXCEPTION = "trackException";
- public static final String TRACK_TIMING = "trackTiming";
- public static final String TRACK_METRIC = "trackMetric";
- public static final String ADD_DIMENSION = "addCustomDimension";
- public static final String ADD_TRANSACTION = "addTransaction";
- public static final String ADD_TRANSACTION_ITEM = "addTransactionItem";
-
- public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection";
- public static final String SET_USER_ID = "setUserId";
- public static final String SET_ANONYMIZE_IP = "setAnonymizeIp";
- public static final String SET_OPT_OUT = "setOptOut";
- public static final String SET_APP_VERSION = "setAppVersion";
- public static final String GET_VAR = "getVar";
- public static final String SET_VAR = "setVar";
- public static final String DISPATCH = "dispatch";
- public static final String DEBUG_MODE = "debugMode";
- public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting";
-
- public Boolean trackerStarted = false;
- public Boolean debugModeEnabled = false;
- public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>();
-
- public Tracker tracker;
-
- @Override
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (START_TRACKER.equals(action)) {
- String id = args.getString(0);
- int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30;
- this.startTracker(id, dispatchPeriod, callbackContext);
- return true;
- } else if (TRACK_VIEW.equals(action)) {
- int length = args.length();
- String screen = args.getString(0);
- this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext);
- return true;
- } else if (TRACK_EVENT.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackEvent(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getString(2) : "",
- length > 3 ? args.getLong(3) : 0,
- length > 4 ? args.getBoolean(4) : false,
- callbackContext);
- }
- return true;
- } else if (TRACK_EXCEPTION.equals(action)) {
- String description = args.getString(0);
- Boolean fatal = args.getBoolean(1);
- this.trackException(description, fatal, callbackContext);
- return true;
- } else if (TRACK_TIMING.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext);
- }
- return true;
- } else if (TRACK_METRIC.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext);
- }
- return true;
- } else if (ADD_DIMENSION.equals(action)) {
- Integer key = args.getInt(0);
- String value = args.getString(1);
- this.addCustomDimension(key, value, callbackContext);
- return true;
- } else if (ADD_TRANSACTION.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.addTransaction(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getDouble(2) : 0,
- length > 3 ? args.getDouble(3) : 0,
- length > 4 ? args.getDouble(4) : 0,
- length > 5 ? args.getString(5) : null,
- callbackContext);
- }
- return true;
- } else if (ADD_TRANSACTION_ITEM.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.addTransactionItem(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getString(2) : "",
- length > 3 ? args.getString(3) : "",
- length > 4 ? args.getDouble(4) : 0,
- length > 5 ? args.getLong(5) : 0,
- length > 6 ? args.getString(6) : null,
- callbackContext);
- }
- return true;
- } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) {
- this.setAllowIDFACollection(args.getBoolean(0), callbackContext);
- } else if (SET_USER_ID.equals(action)) {
- String userId = args.getString(0);
- this.setUserId(userId, callbackContext);
- } else if (SET_ANONYMIZE_IP.equals(action)) {
- boolean anonymize = args.getBoolean(0);
- this.setAnonymizeIp(anonymize, callbackContext);
- } else if (SET_OPT_OUT.equals(action)) {
- boolean optout = args.getBoolean(0);
- this.setOptOut(optout, callbackContext);
- } else if (SET_APP_VERSION.equals(action)) {
- String version = args.getString(0);
- this.setAppVersion(version, callbackContext);
- } else if (GET_VAR.equals(action)) {
- String variable = args.getString(0);
- this.getVar(variable, callbackContext);
- } else if (SET_VAR.equals(action)) {
- String variable = args.getString(0);
- String value = args.getString(1);
- this.setVar(variable, value, callbackContext);
- return true;
- } else if (DISPATCH.equals(action)) {
- this.dispatch(callbackContext);
- return true;
- } else if (DEBUG_MODE.equals(action)) {
- this.debugMode(callbackContext);
- } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) {
- Boolean enable = args.getBoolean(0);
- this.enableUncaughtExceptionReporting(enable, callbackContext);
- }
- return false;
- }
-
- private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) {
- if (null != id && id.length() > 0) {
- tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id);
- callbackContext.success("tracker started");
- trackerStarted = true;
- GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod);
- } else {
- callbackContext.error("tracker id is not valid");
- }
- }
-
- private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) {
- if (key <= 0) {
- callbackContext.error("Expected positive integer argument for key.");
- return;
- }
-
- if (null == value || value.length() == 0) {
- callbackContext.error("Expected non-empty string argument for value.");
- return;
- }
-
- customDimensions.put(key, value);
- callbackContext.success("custom dimension started");
- }
-
- private <T> void addCustomDimensionsToHitBuilder(T builder) {
- //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use
- //the common setCustomDimension (int index, String dimension) method
- try {
- Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class);
-
- for (Entry<Integer, String> entry : customDimensions.entrySet()) {
- Integer key = entry.getKey();
- String value = entry.getValue();
- try {
- builderMethod.invoke(builder, (key), value);
- } catch (IllegalArgumentException e) {
- } catch (IllegalAccessException e) {
- } catch (InvocationTargetException e) {
- }
- }
- } catch (SecurityException e) {
- } catch (NoSuchMethodException e) {
- }
- }
-
- private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) {
- if (! trackerStarted ) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != screenname && screenname.length() > 0) {
- tracker.setScreenName(screenname);
-
- HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- if(!campaignUrl.equals("")){
- hitBuilder.setCampaignParamsFromUrl(campaignUrl);
- }
-
- if(!newSession) {
- tracker.send(hitBuilder.build());
- } else {
- tracker.send(hitBuilder.setNewSession().build());
- }
-
- callbackContext.success("Track Screen: " + screenname);
- } else {
- callbackContext.error("Expected one non-empty string argument.");
- }
- }
-
- private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != category && category.length() > 0) {
- HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- if(!newSession){
- tracker.send(hitBuilder
- .setCategory(category)
- .setAction(action)
- .setLabel(label)
- .setValue(value)
- .build());
- } else {
- tracker.send(hitBuilder
- .setCategory(category)
- .setAction(action)
- .setLabel(label)
- .setValue(value)
- .setNewSession()
- .build());
- }
-
- callbackContext.success("Track Event: " + category);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void trackMetric(Integer key, String value, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (key >= 0) {
- HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
- tracker.send(hitBuilder
- .setCustomMetric(key, Float.parseFloat(value))
- .build()
- );
- callbackContext.success("Track Metric: " + key + ", value: " + value);
- } else {
- callbackContext.error("Expected integer key: " + key + ", and string value: " + value);
- }
- }
-
- private void trackException(String description, Boolean fatal, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != description && description.length() > 0) {
- HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setDescription(description)
- .setFatal(fatal)
- .build()
- );
- callbackContext.success("Track Exception: " + description);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != category && category.length() > 0) {
- HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setCategory(category)
- .setValue(intervalInMilliseconds)
- .setVariable(name)
- .setLabel(label)
- .build()
- );
- callbackContext.success("Track Timing: " + category);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != id && id.length() > 0) {
- HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setTransactionId(id)
- .setAffiliation(affiliation)
- .setRevenue(revenue).setTax(tax)
- .setShipping(shipping)
- .setCurrencyCode(currencyCode)
- .build()
- ); //Deprecated
- callbackContext.success("Add Transaction: " + id);
- } else {
- callbackContext.error("Expected non-empty ID.");
- }
- }
-
- private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != id && id.length() > 0) {
- HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setTransactionId(id)
- .setName(name)
- .setSku(sku)
- .setCategory(category)
- .setPrice(price)
- .setQuantity(quantity)
- .setCurrencyCode(currencyCode)
- .build()
- ); //Deprecated
- callbackContext.success("Add Transaction Item: " + id);
- } else {
- callbackContext.error("Expected non-empty ID.");
- }
- }
-
- private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.enableAdvertisingIdCollection(enable);
- callbackContext.success("Enable Advertising Id Collection: " + enable);
- }
-
- private void setVar(String variable, String value, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set(variable, value);
- callbackContext.success("Set variable " + variable + "to " + value);
- }
- private void dispatch(CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits();
- callbackContext.success("dispatch sent");
- }
-
- private void getVar(String variable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- String result = tracker.get(variable);
- callbackContext.success(result);
- }
-
- private void debugMode(CallbackContext callbackContext) {
- GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE);
-
- this.debugModeEnabled = true;
- callbackContext.success("debugMode enabled");
- }
-
- private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.setAnonymizeIp(anonymize);
- callbackContext.success("Set AnonymizeIp " + anonymize);
- }
-
- private void setOptOut(boolean optout, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout);
- callbackContext.success("Set Opt-Out " + optout);
- }
-
- private void setUserId(String userId, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set("&uid", userId);
- callbackContext.success("Set user id" + userId);
- }
-
- private void setAppVersion(String version, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set("&av", version);
- callbackContext.success("Set app version: " + version);
- }
-
- private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.enableExceptionReporting(enable);
- callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting");
- }
-}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePlugin.java b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePlugin.java
new file mode 100755
index 00000000..7e4431df
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePlugin.java
@@ -0,0 +1,601 @@
+package org.apache.cordova.firebase;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.util.Base64;
+import android.util.Log;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.analytics.FirebaseAnalytics;
+import com.google.firebase.iid.FirebaseInstanceId;
+import com.google.firebase.messaging.FirebaseMessaging;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigInfo;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
+import com.google.firebase.crash.FirebaseCrash;
+import me.leolin.shortcutbadger.ShortcutBadger;
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class FirebasePlugin extends CordovaPlugin {
+
+ private FirebaseAnalytics mFirebaseAnalytics;
+ private final String TAG = "FirebasePlugin";
+ protected static final String KEY = "badge";
+
+ private static boolean inBackground = true;
+ private static ArrayList<Bundle> notificationStack = null;
+ private static CallbackContext notificationCallbackContext;
+ private static CallbackContext tokenRefreshCallbackContext;
+
+ @Override
+ protected void pluginInitialize() {
+ final Context context = this.cordova.getActivity().getApplicationContext();
+ final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
+ this.cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ Log.d(TAG, "Starting Firebase plugin");
+ mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
+ mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);
+ if (extras != null && extras.size() > 1) {
+ if (FirebasePlugin.notificationStack == null) {
+ FirebasePlugin.notificationStack = new ArrayList<Bundle>();
+ }
+ if (extras.containsKey("google.message_id")) {
+ extras.putBoolean("tap", true);
+ notificationStack.add(extras);
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (action.equals("getInstanceId")) {
+ this.getInstanceId(callbackContext);
+ return true;
+ } else if (action.equals("getToken")) {
+ this.getToken(callbackContext);
+ return true;
+ } else if (action.equals("hasPermission")) {
+ this.hasPermission(callbackContext);
+ return true;
+ } else if (action.equals("setBadgeNumber")) {
+ this.setBadgeNumber(callbackContext, args.getInt(0));
+ return true;
+ } else if (action.equals("getBadgeNumber")) {
+ this.getBadgeNumber(callbackContext);
+ return true;
+ } else if (action.equals("subscribe")) {
+ this.subscribe(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("unsubscribe")) {
+ this.unsubscribe(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("unregister")) {
+ this.unregister(callbackContext);
+ return true;
+ } else if (action.equals("onNotificationOpen")) {
+ this.onNotificationOpen(callbackContext);
+ return true;
+ } else if (action.equals("onTokenRefresh")) {
+ this.onTokenRefresh(callbackContext);
+ return true;
+ } else if (action.equals("logEvent")) {
+ this.logEvent(callbackContext, args.getString(0), args.getJSONObject(1));
+ return true;
+ } else if (action.equals("logError")) {
+ this.logError(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setScreenName")) {
+ this.setScreenName(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setUserId")) {
+ this.setUserId(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setUserProperty")) {
+ this.setUserProperty(callbackContext, args.getString(0), args.getString(1));
+ return true;
+ } else if (action.equals("activateFetched")) {
+ this.activateFetched(callbackContext);
+ return true;
+ } else if (action.equals("fetch")) {
+ if (args.length() > 0) this.fetch(callbackContext, args.getLong(0));
+ else this.fetch(callbackContext);
+ return true;
+ } else if (action.equals("getByteArray")) {
+ if (args.length() > 1) this.getByteArray(callbackContext, args.getString(0), args.getString(1));
+ else this.getByteArray(callbackContext, args.getString(0), null);
+ return true;
+ } else if (action.equals("getValue")) {
+ if (args.length() > 1) this.getValue(callbackContext, args.getString(0), args.getString(1));
+ else this.getValue(callbackContext, args.getString(0), null);
+ return true;
+ } else if (action.equals("getInfo")) {
+ this.getInfo(callbackContext);
+ return true;
+ } else if (action.equals("setConfigSettings")) {
+ this.setConfigSettings(callbackContext, args.getJSONObject(0));
+ return true;
+ } else if (action.equals("setDefaults")) {
+ if (args.length() > 1) this.setDefaults(callbackContext, args.getJSONObject(0), args.getString(1));
+ else this.setDefaults(callbackContext, args.getJSONObject(0), null);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onPause(boolean multitasking) {
+ FirebasePlugin.inBackground = true;
+ }
+
+ @Override
+ public void onResume(boolean multitasking) {
+ FirebasePlugin.inBackground = false;
+ }
+
+ @Override
+ public void onReset() {
+ FirebasePlugin.notificationCallbackContext = null;
+ FirebasePlugin.tokenRefreshCallbackContext = null;
+ }
+
+ private void onNotificationOpen(final CallbackContext callbackContext) {
+ FirebasePlugin.notificationCallbackContext = callbackContext;
+ if (FirebasePlugin.notificationStack != null) {
+ for (Bundle bundle : FirebasePlugin.notificationStack) {
+ FirebasePlugin.sendNotification(bundle);
+ }
+ FirebasePlugin.notificationStack.clear();
+ }
+ }
+
+ private void onTokenRefresh(final CallbackContext callbackContext) {
+ FirebasePlugin.tokenRefreshCallbackContext = callbackContext;
+
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String currentToken = FirebaseInstanceId.getInstance().getToken();
+
+ if (currentToken != null) {
+ FirebasePlugin.sendToken(currentToken);
+ }
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ public static void sendNotification(Bundle bundle) {
+ if (!FirebasePlugin.hasNotificationsCallback()) {
+ if (FirebasePlugin.notificationStack == null) {
+ FirebasePlugin.notificationStack = new ArrayList<Bundle>();
+ }
+ notificationStack.add(bundle);
+ return;
+ }
+ final CallbackContext callbackContext = FirebasePlugin.notificationCallbackContext;
+ if (callbackContext != null && bundle != null) {
+ JSONObject json = new JSONObject();
+ Set<String> keys = bundle.keySet();
+ for (String key : keys) {
+ try {
+ json.put(key, bundle.get(key));
+ } catch (JSONException e) {
+ callbackContext.error(e.getMessage());
+ return;
+ }
+ }
+
+ PluginResult pluginresult = new PluginResult(PluginResult.Status.OK, json);
+ pluginresult.setKeepCallback(true);
+ callbackContext.sendPluginResult(pluginresult);
+ }
+ }
+
+ public static void sendToken(String token) {
+ if (FirebasePlugin.tokenRefreshCallbackContext == null) {
+ return;
+ }
+ final CallbackContext callbackContext = FirebasePlugin.tokenRefreshCallbackContext;
+ if (callbackContext != null && token != null) {
+ PluginResult pluginresult = new PluginResult(PluginResult.Status.OK, token);
+ pluginresult.setKeepCallback(true);
+ callbackContext.sendPluginResult(pluginresult);
+ }
+ }
+
+ public static boolean inBackground() {
+ return FirebasePlugin.inBackground;
+ }
+
+ public static boolean hasNotificationsCallback() {
+ return FirebasePlugin.notificationCallbackContext != null;
+ }
+
+ @Override
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ final Bundle data = intent.getExtras();
+ if (data != null && data.containsKey("google.message_id")) {
+ data.putBoolean("tap", true);
+ FirebasePlugin.sendNotification(data);
+ }
+ }
+
+ // DEPRECTED - alias of getToken
+ private void getInstanceId(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String token = FirebaseInstanceId.getInstance().getToken();
+ callbackContext.success(token);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getToken(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String token = FirebaseInstanceId.getInstance().getToken();
+ callbackContext.success(token);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void hasPermission(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
+ boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();
+ JSONObject object = new JSONObject();
+ object.put("isEnabled", areNotificationsEnabled);
+ callbackContext.success(object);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setBadgeNumber(final CallbackContext callbackContext, final int number) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ SharedPreferences.Editor editor = context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
+ editor.putInt(KEY, number);
+ editor.apply();
+ ShortcutBadger.applyCount(context, number);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getBadgeNumber(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ SharedPreferences settings = context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
+ int number = settings.getInt(KEY, 0);
+ callbackContext.success(number);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void subscribe(final CallbackContext callbackContext, final String topic) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic(topic);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void unsubscribe(final CallbackContext callbackContext, final String topic) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseMessaging.getInstance().unsubscribeFromTopic(topic);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void unregister(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseInstanceId.getInstance().deleteInstanceId();
+ String currentToken = FirebaseInstanceId.getInstance().getToken();
+ if (currentToken != null) {
+ FirebasePlugin.sendToken(currentToken);
+ }
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void logEvent(final CallbackContext callbackContext, final String name, final JSONObject params) throws JSONException {
+ final Bundle bundle = new Bundle();
+ Iterator iter = params.keys();
+ while (iter.hasNext()) {
+ String key = (String) iter.next();
+ Object value = params.get(key);
+
+ if (value instanceof Integer || value instanceof Double) {
+ bundle.putFloat(key, ((Number) value).floatValue());
+ } else {
+ bundle.putString(key, value.toString());
+ }
+ }
+
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.logEvent(name, bundle);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void logError(final CallbackContext callbackContext, final String message) throws JSONException {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseCrash.report(new Exception(message));
+ callbackContext.success(1);
+ } catch (Exception e) {
+ FirebaseCrash.log(e.getMessage());
+ e.printStackTrace();
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setScreenName(final CallbackContext callbackContext, final String name) {
+ // This must be called on the main thread
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setCurrentScreen(cordova.getActivity(), name, null);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setUserId(final CallbackContext callbackContext, final String id) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setUserId(id);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setUserProperty(final CallbackContext callbackContext, final String name, final String value) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setUserProperty(name, value);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void activateFetched(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ final boolean activated = FirebaseRemoteConfig.getInstance().activateFetched();
+ callbackContext.success(String.valueOf(activated));
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void fetch(CallbackContext callbackContext) {
+ fetch(callbackContext, FirebaseRemoteConfig.getInstance().fetch());
+ }
+
+ private void fetch(CallbackContext callbackContext, long cacheExpirationSeconds) {
+ fetch(callbackContext, FirebaseRemoteConfig.getInstance().fetch(cacheExpirationSeconds));
+ }
+
+ private void fetch(final CallbackContext callbackContext, final Task<Void> task) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ task.addOnCompleteListener(new OnCompleteListener<Void>() {
+ @Override
+ public void onComplete(Task<Void> task) {
+ callbackContext.success();
+ }
+ }).addOnFailureListener(new OnFailureListener() {
+ @Override
+ public void onFailure(Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ });
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getByteArray(final CallbackContext callbackContext, final String key, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ byte[] bytes = namespace == null ? FirebaseRemoteConfig.getInstance().getByteArray(key)
+ : FirebaseRemoteConfig.getInstance().getByteArray(key, namespace);
+ JSONObject object = new JSONObject();
+ object.put("base64", Base64.encodeToString(bytes, Base64.DEFAULT));
+ object.put("array", new JSONArray(bytes));
+ callbackContext.success(object);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getValue(final CallbackContext callbackContext, final String key, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseRemoteConfigValue value = namespace == null ? FirebaseRemoteConfig.getInstance().getValue(key)
+ : FirebaseRemoteConfig.getInstance().getValue(key, namespace);
+ callbackContext.success(value.asString());
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getInfo(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseRemoteConfigInfo remoteConfigInfo = FirebaseRemoteConfig.getInstance().getInfo();
+ JSONObject info = new JSONObject();
+
+ JSONObject settings = new JSONObject();
+ settings.put("developerModeEnabled", remoteConfigInfo.getConfigSettings().isDeveloperModeEnabled());
+ info.put("configSettings", settings);
+
+ info.put("fetchTimeMillis", remoteConfigInfo.getFetchTimeMillis());
+ info.put("lastFetchStatus", remoteConfigInfo.getLastFetchStatus());
+
+ callbackContext.success(info);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setConfigSettings(final CallbackContext callbackContext, final JSONObject config) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ boolean devMode = config.getBoolean("developerModeEnabled");
+ FirebaseRemoteConfigSettings.Builder settings = new FirebaseRemoteConfigSettings.Builder()
+ .setDeveloperModeEnabled(devMode);
+ FirebaseRemoteConfig.getInstance().setConfigSettings(settings.build());
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setDefaults(final CallbackContext callbackContext, final JSONObject defaults, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ if (namespace == null)
+ FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults));
+ else
+ FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults), namespace);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private static Map<String, Object> defaultsToMap(JSONObject object) throws JSONException {
+ final Map<String, Object> map = new HashMap<String, Object>();
+
+ for (Iterator<String> keys = object.keys(); keys.hasNext(); ) {
+ String key = keys.next();
+ Object value = object.get(key);
+
+ if (value instanceof Integer) {
+ //setDefaults() should take Longs
+ value = new Long((Integer) value);
+ } else if (value instanceof JSONArray) {
+ JSONArray array = (JSONArray) value;
+ if (array.length() == 1 && array.get(0) instanceof String) {
+ //parse byte[] as Base64 String
+ value = Base64.decode(array.getString(0), Base64.DEFAULT);
+ } else {
+ //parse byte[] as numeric array
+ byte[] bytes = new byte[array.length()];
+ for (int i = 0; i < array.length(); i++)
+ bytes[i] = (byte) array.getInt(i);
+ value = bytes;
+ }
+ }
+
+ map.put(key, value);
+ }
+ return map;
+ }
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginInstanceIDService.java b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginInstanceIDService.java
new file mode 100755
index 00000000..96140f02
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginInstanceIDService.java
@@ -0,0 +1,26 @@
+package org.apache.cordova.firebase;
+
+import android.util.Log;
+
+import com.google.firebase.iid.FirebaseInstanceId;
+import com.google.firebase.iid.FirebaseInstanceIdService;
+
+
+public class FirebasePluginInstanceIDService extends FirebaseInstanceIdService {
+
+ private static final String TAG = "FirebasePlugin";
+
+ /**
+ * Called if InstanceID token is updated. This may occur if the security of
+ * the previous token had been compromised. Note that this is called when the InstanceID token
+ * is initially generated so this is where you would retrieve the token.
+ */
+ @Override
+ public void onTokenRefresh() {
+ // Get updated InstanceID token.
+ String refreshedToken = FirebaseInstanceId.getInstance().getToken();
+ Log.d(TAG, "Refreshed token: " + refreshedToken);
+
+ FirebasePlugin.sendToken(refreshedToken);
+ }
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginMessagingService.java b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginMessagingService.java
new file mode 100755
index 00000000..a42ce60e
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/FirebasePluginMessagingService.java
@@ -0,0 +1,127 @@
+package org.apache.cordova.firebase;
+
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import android.app.Notification;
+import android.text.TextUtils;
+
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+
+import java.util.Map;
+import java.util.Random;
+
+public class FirebasePluginMessagingService extends FirebaseMessagingService {
+
+ private static final String TAG = "FirebasePlugin";
+
+ /**
+ * Called when message is received.
+ *
+ * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
+ */
+ @Override
+ public void onMessageReceived(RemoteMessage remoteMessage) {
+ // [START_EXCLUDE]
+ // There are two types of messages data messages and notification messages. Data messages are handled
+ // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
+ // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
+ // is in the foreground. When the app is in the background an automatically generated notification is displayed.
+ // When the user taps on the notification they are returned to the app. Messages containing both notification
+ // and data payloads are treated as notification messages. The Firebase console always sends notification
+ // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
+ // [END_EXCLUDE]
+
+ // TODO(developer): Handle FCM messages here.
+ // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
+ String title;
+ String text;
+ String id;
+ if (remoteMessage.getNotification() != null) {
+ title = remoteMessage.getNotification().getTitle();
+ text = remoteMessage.getNotification().getBody();
+ id = remoteMessage.getMessageId();
+ } else {
+ title = remoteMessage.getData().get("title");
+ text = remoteMessage.getData().get("text");
+ id = remoteMessage.getData().get("id");
+ }
+
+ if(TextUtils.isEmpty(id)){
+ Random rand = new Random();
+ int n = rand.nextInt(50) + 1;
+ id = Integer.toString(n);
+ }
+
+ Log.d(TAG, "From: " + remoteMessage.getFrom());
+ Log.d(TAG, "Notification Message id: " + id);
+ Log.d(TAG, "Notification Message Title: " + title);
+ Log.d(TAG, "Notification Message Body/Text: " + text);
+
+ // TODO: Add option to developer to configure if show notification when app on foreground
+ if (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title) || (!remoteMessage.getData().isEmpty())) {
+ boolean showNotification = (FirebasePlugin.inBackground() || !FirebasePlugin.hasNotificationsCallback()) && (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title));
+ sendNotification(id, title, text, remoteMessage.getData(), showNotification);
+ }
+ }
+
+ private void sendNotification(String id, String title, String messageBody, Map<String, String> data, boolean showNotification) {
+ Bundle bundle = new Bundle();
+ for (String key : data.keySet()) {
+ bundle.putString(key, data.get(key));
+ }
+ if (showNotification) {
+ Intent intent = new Intent(this, OnNotificationOpenReceiver.class);
+ intent.putExtras(bundle);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id.hashCode(), intent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
+ .setContentTitle(title)
+ .setContentText(messageBody)
+ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+ .setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody))
+ .setAutoCancel(true)
+ .setSound(defaultSoundUri)
+ .setContentIntent(pendingIntent);
+
+ int resID = getResources().getIdentifier("notification_icon", "drawable", getPackageName());
+ if (resID != 0) {
+ notificationBuilder.setSmallIcon(resID);
+ } else {
+ notificationBuilder.setSmallIcon(getApplicationInfo().icon);
+ }
+
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
+ {
+ int accentID = getResources().getIdentifier("accent", "color", getPackageName());
+ notificationBuilder.setColor(getResources().getColor(accentID, null));
+ }
+
+ Notification notification = notificationBuilder.build();
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
+ int iconID = android.R.id.icon;
+ int notiID = getResources().getIdentifier("notification_big", "drawable", getPackageName());
+ if (notification.contentView != null) {
+ notification.contentView.setImageViewResource(iconID, notiID);
+ }
+ }
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ notificationManager.notify(id.hashCode(), notification);
+ } else {
+ bundle.putBoolean("tap", false);
+ bundle.putString("title", title);
+ bundle.putString("body", messageBody);
+ FirebasePlugin.sendNotification(bundle);
+ }
+ }
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/firebase/OnNotificationOpenReceiver.java b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/OnNotificationOpenReceiver.java
new file mode 100644
index 00000000..a7f63757
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/firebase/OnNotificationOpenReceiver.java
@@ -0,0 +1,24 @@
+package org.apache.cordova.firebase;
+
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+public class OnNotificationOpenReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ PackageManager pm = context.getPackageManager();
+ Intent launchIntent = pm.getLaunchIntentForPackage(context.getPackageName());
+
+ launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ Bundle data = intent.getExtras();
+ data.putBoolean("tap", true);
+ FirebasePlugin.sendNotification(data);
+ launchIntent.putExtras(data);
+ context.startActivity(launchIntent);
+ }
+}
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
index 9124f869..69471aa0 100755
--- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
- 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */; };
099C5D0E05AF43F4B95AAA4A /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2F49F2111FC649498658CF3B /* CDVNotification.bundle */; };
0EB9CC91D14946018E9E8959 /* NSString+URLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = B67D2EE318FB494FA66C6A82 /* NSString+URLEncoding.m */; };
1D3623260D0F684500981E51 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* AppDelegate.m */; };
@@ -21,12 +20,9 @@
3F54272035164B97980AEFF8 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C144F975307417B892CAC2C /* Social.framework */; };
4A6286E85D8E48729B679999 /* SocialSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = DDCE40E086B24A98A0490DA7 /* SocialSharing.m */; };
5246BFCFEB754DCC9DD156F5 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = F6093E605D6D49D1918413AA /* CDVDevice.m */; };
- 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */; };
62A7DCEB605B49F4BD73FFF0 /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A7B4D488DBC402C922C7574 /* CDVSplashScreen.m */; };
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; };
- 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5133B28F80C74DA0A4EF900A /* libz.dylib */; };
76C30D264E504728A7F0FD0C /* PushPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = B195BD92B31445039168DCCC /* PushPlugin.m */; };
- 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBF0272D99FA4D308445B382 /* CoreData.framework */; };
84B2CD60DA194555B86E263D /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81D376C7F9874FA1B2318AFA /* AudioToolbox.framework */; };
84D89679250B4DF4ABF3BE7F /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 6921995B5AF0481CA93F7A5D /* CDVNotification.m */; };
8568F48189D243CA91300537 /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 63D8B1ADC251482C8620B623 /* CDVLogger.m */; };
@@ -35,17 +31,25 @@
9E26B81E92624D9896571609 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCCC22BF4385472E88382D56 /* MessageUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
A9267928B9A04BE29B534458 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6940DEA5B3084B54B48BD8F1 /* AddressBook.framework */; };
B88B1D224DEA4E699F7502F8 /* CDVReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = E0008CA3AF7D47F497F52E48 /* CDVReachability.m */; };
- C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 92230324A2954C6AADBA989A /* libAdIdAccess.a */; };
D126BF4289EA4FE087802574 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44965ED7EC514AD283A3DAA2 /* CoreTelephony.framework */; };
- D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */; };
E162E7029FC24C4595D1D82D /* IonicKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 738136BA596342BB82CCDD80 /* IonicKeyboard.m */; };
E5CA6AAEC723E2850C15309E /* libPods-Stone Island.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1827DA33B918A624C9D0E74D /* libPods-Stone Island.a */; };
E761267B18B0459FA2514AE8 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D3B0CF3FF74E3D97E33BF4 /* SystemConfiguration.framework */; };
- EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */; };
EF28FE2B49A344FBA3F7306F /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 729B6141DF9D4C1BB64A7097 /* CDVInAppBrowser.m */; };
F4862C5594894163A3C3AB06 /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7CCBA15DC14F20830BD1B3 /* CDVConnection.m */; };
F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6465D215A1B148A387730F27 /* libz.tbd */; };
9DF0159ECE654EF1921606B9 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CDFA08638E64E9F9CDB1109 /* CDVStatusBar.m */; };
+ BC359FDFB50941649B56E28F /* AppDelegate+FirebasePlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC39C5B4DAE4FAD8CF8695D /* AppDelegate+FirebasePlugin.m */; };
+ C866439BEFD34ABD84D2C187 /* FirebasePlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3DDD8A49E340CF957F7B1F /* FirebasePlugin.m */; };
+ 0FB747315D6F471689E642F5 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C70563D47C64AF3ACAF61E0 /* GoogleService-Info.plist */; };
+ 5E621514A94641479C72A50D /* FirebaseAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F685F82C990346D690E3964A /* FirebaseAnalytics.framework */; };
+ 1D5CAB42B5DE48328017C472 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD9D2163E342476EB5E0C76F /* FirebaseCore.framework */; };
+ F5C11F2CB8FA4EDE90455B16 /* FirebaseInstanceID.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07EDF5A22AD84B9A9589735F /* FirebaseInstanceID.framework */; };
+ 248907F240C5452893560A33 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 618739808BC6467DA23E8206 /* GoogleToolboxForMac.framework */; };
+ AEAE498777844A5280FD25F4 /* Protobuf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 608DE9DAFDE94B8A861130BD /* Protobuf.framework */; };
+ 605B0C4C903B4FD8B1F0F694 /* FirebaseMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC38B894F8C343BCA787D906 /* FirebaseMessaging.framework */; };
+ 7C872490D5A94AEBBBD1349E /* FirebaseCrash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0710864CDF044948B1C18450 /* FirebaseCrash.framework */; };
+ 2082C1FBFC0E43BB8C609980 /* FirebaseRemoteConfig.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4398FE67A32F4A6CA63E3979 /* FirebaseRemoteConfig.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -71,7 +75,6 @@
0207DA571B56EA530066E2B4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Stone Island/Images.xcassets"; sourceTree = SOURCE_ROOT; };
0B1CCEFB092F4CECA26CD473 /* CDVNotification.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVNotification.h; path = "cordova-plugin-dialogs/CDVNotification.h"; sourceTree = "<group>"; };
126A7C33C770436081C4808A /* CDVLocation.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVLocation.h; path = "cordova-plugin-geolocation/CDVLocation.h"; sourceTree = "<group>"; };
- 1380CC4A1CFE434BB20950B7 /* GAIFields.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = "cordova-plugin-google-analytics/GAIFields.h"; sourceTree = "<group>"; };
15B798542A834D5F9C46B593 /* CDVLogger.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVLogger.h; path = "cordova-plugin-console/CDVLogger.h"; sourceTree = "<group>"; };
1827DA33B918A624C9D0E74D /* libPods-Stone Island.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Stone Island.a"; sourceTree = BUILT_PRODUCTS_DIR; };
1A7B4D488DBC402C922C7574 /* CDVSplashScreen.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVSplashScreen.m; path = "cordova-plugin-splashscreen/CDVSplashScreen.m"; sourceTree = "<group>"; };
@@ -80,8 +83,6 @@
1D6058910D05DD3D006BFB54 /* Stone Island.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Stone Island.app"; sourceTree = BUILT_PRODUCTS_DIR; };
202110AF22594D0F9C1A334F /* AppDelegate+notification.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "AppDelegate+notification.m"; path = "phonegap-plugin-push/AppDelegate+notification.m"; sourceTree = "<group>"; };
2371391E63BB4E19BE123F25 /* NSString+URLEncoding.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "NSString+URLEncoding.h"; path = "cordova-plugin-x-socialsharing/NSString+URLEncoding.h"; sourceTree = "<group>"; };
- 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a"; sourceTree = "<group>"; };
- 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIEcommerceFields.h; path = "cordova-plugin-google-analytics/GAIEcommerceFields.h"; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
2AF51DC70C6443E88037BD84 /* CoreLocation.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
2F49F2111FC649498658CF3B /* CDVNotification.bundle */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; path = CDVNotification.bundle; sourceTree = "<group>"; };
@@ -94,14 +95,11 @@
3047A5101AB8059700498E2A /* build-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-release.xcconfig"; path = "cordova/build-release.xcconfig"; sourceTree = SOURCE_ROOT; };
3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
32CA4F630368D1EE00C91783 /* Stone Island-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Stone Island-Prefix.pch"; sourceTree = "<group>"; };
- 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = "cordova-plugin-google-analytics/GAIDictionaryBuilder.h"; sourceTree = "<group>"; };
40CE234F002F419597A039E4 /* AppDelegate+notification.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "AppDelegate+notification.h"; path = "phonegap-plugin-push/AppDelegate+notification.h"; sourceTree = "<group>"; };
4258DE006F82471E996DD840 /* CDVViewController+SplashScreen.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "CDVViewController+SplashScreen.m"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.m"; sourceTree = "<group>"; };
44965ED7EC514AD283A3DAA2 /* CoreTelephony.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
47F2E7D4A25F4BC1BF2C5DA9 /* CDVReachability.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVReachability.h; path = "cordova-plugin-network-information/CDVReachability.h"; sourceTree = "<group>"; };
- 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
4E80481E26EC4E568CC3903D /* CDVViewController+SplashScreen.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "CDVViewController+SplashScreen.h"; path = "cordova-plugin-splashscreen/CDVViewController+SplashScreen.h"; sourceTree = "<group>"; };
- 5133B28F80C74DA0A4EF900A /* libz.dylib */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
627E8711314C4B91BFAABD62 /* IonicKeyboard.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = IonicKeyboard.h; path = "ionic-plugin-keyboard/IonicKeyboard.h"; sourceTree = "<group>"; };
63D8B1ADC251482C8620B623 /* CDVLogger.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVLogger.m; path = "cordova-plugin-console/CDVLogger.m"; sourceTree = "<group>"; };
6465D215A1B148A387730F27 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
@@ -112,39 +110,41 @@
6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = "Stone Island/CDVLaunchScreen.storyboard"; sourceTree = SOURCE_ROOT; };
6C144F975307417B892CAC2C /* Social.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };
6E7CCBA15DC14F20830BD1B3 /* CDVConnection.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVConnection.m; path = "cordova-plugin-network-information/CDVConnection.m"; sourceTree = "<group>"; };
- 71D1AD5902B0425F8154F30F /* GAILogger.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = "cordova-plugin-google-analytics/GAILogger.h"; sourceTree = "<group>"; };
729B6141DF9D4C1BB64A7097 /* CDVInAppBrowser.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVInAppBrowser.m; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.m"; sourceTree = "<group>"; };
738136BA596342BB82CCDD80 /* IonicKeyboard.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = IonicKeyboard.m; path = "ionic-plugin-keyboard/IonicKeyboard.m"; sourceTree = "<group>"; };
- 7EECC2D2BFEA43FE966814C6 /* GAI.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = "cordova-plugin-google-analytics/GAI.h"; sourceTree = "<group>"; };
81D376C7F9874FA1B2318AFA /* AudioToolbox.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
85D3B0CF3FF74E3D97E33BF4 /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
876C6279414F4D5A82514049 /* CDVDevice.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVDevice.h; path = "cordova-plugin-device/CDVDevice.h"; sourceTree = "<group>"; };
- 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIEcommerceProductAction.h; path = "cordova-plugin-google-analytics/GAIEcommerceProductAction.h"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Stone Island-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Stone Island-Info.plist"; path = "Stone Island/Stone Island-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = SOURCE_ROOT; };
- 92230324A2954C6AADBA989A /* libAdIdAccess.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; name = libAdIdAccess.a; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a"; sourceTree = "<group>"; };
- 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = "cordova-plugin-google-analytics/GAITrackedViewController.h"; sourceTree = "<group>"; };
9AA8E7740E114B6E967452F8 /* PushPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = PushPlugin.h; path = "phonegap-plugin-push/PushPlugin.h"; sourceTree = "<group>"; };
9F81F9288C7B4B628408E9AF /* CDVInAppBrowser.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVInAppBrowser.h; path = "cordova-plugin-inappbrowser/CDVInAppBrowser.h"; sourceTree = "<group>"; };
- A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = UniversalAnalyticsPlugin.h; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h"; sourceTree = "<group>"; };
- A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
B195BD92B31445039168DCCC /* PushPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = PushPlugin.m; path = "phonegap-plugin-push/PushPlugin.m"; sourceTree = "<group>"; };
B67D2EE318FB494FA66C6A82 /* NSString+URLEncoding.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "NSString+URLEncoding.m"; path = "cordova-plugin-x-socialsharing/NSString+URLEncoding.m"; sourceTree = "<group>"; };
- BBF0272D99FA4D308445B382 /* CoreData.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
- CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIEcommerceProduct.h; path = "cordova-plugin-google-analytics/GAIEcommerceProduct.h"; sourceTree = "<group>"; };
DDCE40E086B24A98A0490DA7 /* SocialSharing.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = SocialSharing.m; path = "cordova-plugin-x-socialsharing/SocialSharing.m"; sourceTree = "<group>"; };
E0008CA3AF7D47F497F52E48 /* CDVReachability.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVReachability.m; path = "cordova-plugin-network-information/CDVReachability.m"; sourceTree = "<group>"; };
- E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAIEcommercePromotion.h; path = "cordova-plugin-google-analytics/GAIEcommercePromotion.h"; sourceTree = "<group>"; };
EB87FDF31871DA8E0020F90C /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../../www; sourceTree = "<group>"; };
EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = "<group>"; };
ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
EFE07C93437141668090A998 /* SocialSharing.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = SocialSharing.h; path = "cordova-plugin-x-socialsharing/SocialSharing.h"; sourceTree = "<group>"; };
- F52665B1E3624AACB50A72B1 /* GAITracker.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = "cordova-plugin-google-analytics/GAITracker.h"; sourceTree = "<group>"; };
F6093E605D6D49D1918413AA /* CDVDevice.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVDevice.m; path = "cordova-plugin-device/CDVDevice.m"; sourceTree = "<group>"; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = "Stone Island/config.xml"; sourceTree = "<group>"; };
FCCC22BF4385472E88382D56 /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
- FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = UniversalAnalyticsPlugin.m; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m"; sourceTree = "<group>"; };
4CDFA08638E64E9F9CDB1109 /* CDVStatusBar.m */ = {isa = PBXFileReference; name = "CDVStatusBar.m"; path = "cordova-plugin-statusbar/CDVStatusBar.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
80A8B3832B6347E09B3FB7EF /* CDVStatusBar.h */ = {isa = PBXFileReference; name = "CDVStatusBar.h"; path = "cordova-plugin-statusbar/CDVStatusBar.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 5EC39C5B4DAE4FAD8CF8695D /* AppDelegate+FirebasePlugin.m */ = {isa = PBXFileReference; name = "AppDelegate+FirebasePlugin.m"; path = "cordova-plugin-firebase/AppDelegate+FirebasePlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+ 3C3DDD8A49E340CF957F7B1F /* FirebasePlugin.m */ = {isa = PBXFileReference; name = "FirebasePlugin.m"; path = "cordova-plugin-firebase/FirebasePlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+ 8214BDBCCC7A406D97F13D14 /* AppDelegate+FirebasePlugin.h */ = {isa = PBXFileReference; name = "AppDelegate+FirebasePlugin.h"; path = "cordova-plugin-firebase/AppDelegate+FirebasePlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 6733A6B615EC46D9A22EF1BB /* FirebasePlugin.h */ = {isa = PBXFileReference; name = "FirebasePlugin.h"; path = "cordova-plugin-firebase/FirebasePlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ BB95C4F62552438CBF008B58 /* Firebase.h */ = {isa = PBXFileReference; name = "Firebase.h"; path = "cordova-plugin-firebase/Firebase.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 2C70563D47C64AF3ACAF61E0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; name = "GoogleService-Info.plist"; path = "GoogleService-Info.plist"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = text.plist.xml; explicitFileType = undefined; includeInIndex = 0; };
+ F685F82C990346D690E3964A /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; name = "FirebaseAnalytics.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ FD9D2163E342476EB5E0C76F /* FirebaseCore.framework */ = {isa = PBXFileReference; name = "FirebaseCore.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 07EDF5A22AD84B9A9589735F /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; name = "FirebaseInstanceID.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 618739808BC6467DA23E8206 /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; name = "GoogleToolboxForMac.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/GoogleToolboxForMac.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 608DE9DAFDE94B8A861130BD /* Protobuf.framework */ = {isa = PBXFileReference; name = "Protobuf.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/Protobuf.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ DC38B894F8C343BCA787D906 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; name = "FirebaseMessaging.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 0710864CDF044948B1C18450 /* FirebaseCrash.framework */ = {isa = PBXFileReference; name = "FirebaseCrash.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 4398FE67A32F4A6CA63E3979 /* FirebaseRemoteConfig.framework */ = {isa = PBXFileReference; name = "FirebaseRemoteConfig.framework"; path = "Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -163,12 +163,14 @@
A9267928B9A04BE29B534458 /* AddressBook.framework in Frameworks */,
36186AA3639F426384682A75 /* libsqlite3.tbd in Frameworks */,
F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */,
- 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */,
- C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */,
- 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */,
- D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */,
- 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */,
- 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */,
+ 5E621514A94641479C72A50D /* FirebaseAnalytics.framework in Frameworks */,
+ 1D5CAB42B5DE48328017C472 /* FirebaseCore.framework in Frameworks */,
+ F5C11F2CB8FA4EDE90455B16 /* FirebaseInstanceID.framework in Frameworks */,
+ 248907F240C5452893560A33 /* GoogleToolboxForMac.framework in Frameworks */,
+ AEAE498777844A5280FD25F4 /* Protobuf.framework in Frameworks */,
+ 605B0C4C903B4FD8B1F0F694 /* FirebaseMessaging.framework in Frameworks */,
+ 7C872490D5A94AEBBBD1349E /* FirebaseCrash.framework in Frameworks */,
+ 2082C1FBFC0E43BB8C609980 /* FirebaseRemoteConfig.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -233,6 +235,7 @@
8D1107310486CEB800E47090 /* Stone Island-Info.plist */,
6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */,
2F49F2111FC649498658CF3B /* CDVNotification.bundle */,
+ 2C70563D47C64AF3ACAF61E0 /* GoogleService-Info.plist */,
);
name = Resources;
path = "Stone Island/Resources";
@@ -251,12 +254,14 @@
6940DEA5B3084B54B48BD8F1 /* AddressBook.framework */,
014A3BF81C154724B8D195A5 /* libsqlite3.tbd */,
6465D215A1B148A387730F27 /* libz.tbd */,
- 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */,
- 92230324A2954C6AADBA989A /* libAdIdAccess.a */,
- BBF0272D99FA4D308445B382 /* CoreData.framework */,
- A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */,
- 5133B28F80C74DA0A4EF900A /* libz.dylib */,
- 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */,
+ F685F82C990346D690E3964A /* FirebaseAnalytics.framework */,
+ FD9D2163E342476EB5E0C76F /* FirebaseCore.framework */,
+ 07EDF5A22AD84B9A9589735F /* FirebaseInstanceID.framework */,
+ 618739808BC6467DA23E8206 /* GoogleToolboxForMac.framework */,
+ 608DE9DAFDE94B8A861130BD /* Protobuf.framework */,
+ DC38B894F8C343BCA787D906 /* FirebaseMessaging.framework */,
+ 0710864CDF044948B1C18450 /* FirebaseCrash.framework */,
+ 4398FE67A32F4A6CA63E3979 /* FirebaseRemoteConfig.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -310,20 +315,13 @@
B195BD92B31445039168DCCC /* PushPlugin.m */,
40CE234F002F419597A039E4 /* AppDelegate+notification.h */,
9AA8E7740E114B6E967452F8 /* PushPlugin.h */,
- FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */,
- A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */,
- 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */,
- 1380CC4A1CFE434BB20950B7 /* GAIFields.h */,
- 71D1AD5902B0425F8154F30F /* GAILogger.h */,
- 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */,
- 7EECC2D2BFEA43FE966814C6 /* GAI.h */,
- F52665B1E3624AACB50A72B1 /* GAITracker.h */,
- 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */,
- CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */,
- 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */,
- E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */,
4CDFA08638E64E9F9CDB1109 /* CDVStatusBar.m */,
80A8B3832B6347E09B3FB7EF /* CDVStatusBar.h */,
+ 5EC39C5B4DAE4FAD8CF8695D /* AppDelegate+FirebasePlugin.m */,
+ 3C3DDD8A49E340CF957F7B1F /* FirebasePlugin.m */,
+ 8214BDBCCC7A406D97F13D14 /* AppDelegate+FirebasePlugin.h */,
+ 6733A6B615EC46D9A22EF1BB /* FirebasePlugin.h */,
+ BB95C4F62552438CBF008B58 /* Firebase.h */,
);
name = Plugins;
path = "Stone Island/Plugins";
@@ -426,6 +424,7 @@
0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */,
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */,
099C5D0E05AF43F4B95AAA4A /* CDVNotification.bundle in Resources */,
+ 0FB747315D6F471689E642F5 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -516,8 +515,9 @@
E162E7029FC24C4595D1D82D /* IonicKeyboard.m in Sources */,
35DC9CF8FDC24E6DA829674B /* AppDelegate+notification.m in Sources */,
76C30D264E504728A7F0FD0C /* PushPlugin.m in Sources */,
- EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */,
9DF0159ECE654EF1921606B9 /* CDVStatusBar.m in Sources */,
+ BC359FDFB50941649B56E28F /* AppDelegate+FirebasePlugin.m in Sources */,
+ C866439BEFD34ABD84D2C187 /* FirebasePlugin.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -548,6 +548,14 @@
"$(inherited)",
"\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
"\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
);
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
@@ -560,8 +568,6 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
- "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
- "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
);
PRODUCT_BUNDLE_IDENTIFIER = us.okfoc.stoneisland;
PRODUCT_NAME = "Stone Island";
@@ -585,6 +591,14 @@
"$(inherited)",
"\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
"\"Stone Island/Plugins/com.parse.cordova.core.pushplugin\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
+ "\"Stone Island/Plugins/cordova-plugin-firebase\"",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Stone Island/Stone Island-Prefix.pch";
@@ -595,8 +609,6 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
- "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
- "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
);
PRODUCT_BUNDLE_IDENTIFIER = us.okfoc.stoneisland;
PRODUCT_NAME = "Stone Island";
diff --git a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate
index c4d6d031..1a91f77a 100644
--- a/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate
+++ b/StoneIsland/platforms/ios/Stone Island.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.h
new file mode 100755
index 00000000..210cbb65
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.h
@@ -0,0 +1,5 @@
+#import "AppDelegate.h"
+
+@interface AppDelegate (FirebasePlugin)
+@property (nonatomic, strong) NSNumber *applicationInBackground;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.m
new file mode 100755
index 00000000..c4c45778
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/AppDelegate+FirebasePlugin.m
@@ -0,0 +1,132 @@
+#import "AppDelegate+FirebasePlugin.h"
+#import "FirebasePlugin.h"
+#import "Firebase.h"
+#import <objc/runtime.h>
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@import UserNotifications;
+#endif
+
+// Implement UNUserNotificationCenterDelegate to receive display notification via APNS for devices
+// running iOS 10 and above. Implement FIRMessagingDelegate to receive data message via FCM for
+// devices running iOS 10 and above.
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@interface AppDelegate () <UNUserNotificationCenterDelegate, FIRMessagingDelegate>
+@end
+#endif
+
+#define kApplicationInBackgroundKey @"applicationInBackground"
+
+@implementation AppDelegate (FirebasePlugin)
+
++ (void)load {
+ Method original = class_getInstanceMethod(self, @selector(application:didFinishLaunchingWithOptions:));
+ Method swizzled = class_getInstanceMethod(self, @selector(application:swizzledDidFinishLaunchingWithOptions:));
+ method_exchangeImplementations(original, swizzled);
+}
+
+- (void)setApplicationInBackground:(NSNumber *)applicationInBackground {
+ objc_setAssociatedObject(self, kApplicationInBackgroundKey, applicationInBackground, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+- (NSNumber *)applicationInBackground {
+ return objc_getAssociatedObject(self, kApplicationInBackgroundKey);
+}
+
+- (BOOL)application:(UIApplication *)application swizzledDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ [self application:application swizzledDidFinishLaunchingWithOptions:launchOptions];
+
+ if(![FIRApp defaultApp]) {
+ [FIRApp configure];
+ }
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
+ name:kFIRInstanceIDTokenRefreshNotification object:nil];
+
+ self.applicationInBackground = @(YES);
+
+ return YES;
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ [self connectToFcm];
+ self.applicationInBackground = @(NO);
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ [[FIRMessaging messaging] disconnect];
+ self.applicationInBackground = @(YES);
+ NSLog(@"Disconnected from FCM");
+}
+
+- (void)tokenRefreshNotification:(NSNotification *)notification {
+ // Note that this callback will be fired everytime a new token is generated, including the first
+ // time. So if you need to retrieve the token as soon as it is available this is where that
+ // should be done.
+ NSString *refreshedToken = [[FIRInstanceID instanceID] token];
+ NSLog(@"InstanceID token: %@", refreshedToken);
+
+ // Connect to FCM since connection may have failed when attempted before having a token.
+ [self connectToFcm];
+
+ [FirebasePlugin.firebasePlugin sendToken:refreshedToken];
+}
+
+- (void)connectToFcm {
+ [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
+ if (error != nil) {
+ NSLog(@"Unable to connect to FCM. %@", error);
+ } else {
+ NSLog(@"Connected to FCM.");
+ NSString *refreshedToken = [[FIRInstanceID instanceID] token];
+ NSLog(@"InstanceID token: %@", refreshedToken);
+ }
+ }];
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
+ NSDictionary *mutableUserInfo = [userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
+ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+
+ NSDictionary *mutableUserInfo = [userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+- (void)userNotificationCenter:(UNUserNotificationCenter *)center
+ willPresentNotification:(UNNotification *)notification
+ withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
+ NSDictionary *mutableUserInfo = [notification.request.content.userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+// Receive data message on iOS 10 devices.
+- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage {
+ // Print full message
+ NSLog(@"%@", [remoteMessage appData]);
+}
+#endif
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Firebase.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Firebase.h
new file mode 100644
index 00000000..90798a6a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Firebase.h
@@ -0,0 +1,52 @@
+#import <FirebaseAnalytics/FirebaseAnalytics.h>
+#import <FirebaseCore/FirebaseCore.h>
+
+#if !defined(__has_include)
+ #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \
+ import the headers individually."
+#else
+ #if __has_include(<FirebaseAppIndexing/FirebaseAppIndexing.h>)
+ #import <FirebaseAppIndexing/FirebaseAppIndexing.h>
+ #endif
+
+ #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
+ #import <FirebaseAuth/FirebaseAuth.h>
+ #endif
+
+ #if __has_include(<FirebaseCrash/FirebaseCrash.h>)
+ #import <FirebaseCrash/FirebaseCrash.h>
+ #endif
+
+ #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>)
+ #import <FirebaseDatabase/FirebaseDatabase.h>
+ #endif
+
+ #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>)
+ #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h>
+ #endif
+
+ #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>)
+ #import <FirebaseInstanceID/FirebaseInstanceID.h>
+ #endif
+
+ #if __has_include(<FirebaseInvites/FirebaseInvites.h>)
+ #import <FirebaseInvites/FirebaseInvites.h>
+ #endif
+
+ #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>)
+ #import <FirebaseMessaging/FirebaseMessaging.h>
+ #endif
+
+ #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>)
+ #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
+ #endif
+
+ #if __has_include(<FirebaseStorage/FirebaseStorage.h>)
+ #import <FirebaseStorage/FirebaseStorage.h>
+ #endif
+
+ #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>)
+ #import <GoogleMobileAds/GoogleMobileAds.h>
+ #endif
+
+#endif // defined(__has_include)
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/FirebaseAnalytics b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/FirebaseAnalytics
new file mode 100755
index 00000000..61f61cd1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/FirebaseAnalytics
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
new file mode 100755
index 00000000..e3ff4c12
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
@@ -0,0 +1,57 @@
+#import <Foundation/Foundation.h>
+
+#import "FIRAnalytics.h"
+
+/**
+ * Provides App Delegate handlers to be used in your App Delegate.
+ *
+ * To save time integrating Firebase Analytics in an application, Firebase Analytics does not
+ * require delegation implementation from the AppDelegate. Instead this is automatically done by
+ * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App
+ * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting
+ * it to NO, and adding the methods in this category to corresponding delegation handlers.
+ *
+ * To handle Universal Links, you must return YES in
+ * [UIApplicationDelegate application:didFinishLaunchingWithOptions:].
+ */
+@interface FIRAnalytics (AppDelegate)
+
+/**
+ * Handles events related to a URL session that are waiting to be processed.
+ *
+ * For optimal use of Firebase Analytics, call this method from the
+ * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler]
+ * method of the app delegate in your app.
+ *
+ * @param identifier The identifier of the URL session requiring attention.
+ * @param completionHandler The completion handler to call when you finish processing the events.
+ * Calling this completion handler lets the system know that your app's user interface is
+ * updated and a new snapshot can be taken.
+ */
++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier
+ completionHandler:(void (^)(void))completionHandler;
+
+/**
+ * Handles the event when the app is launched by a URL.
+ *
+ * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and
+ * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on iOS 8.x
+ * and below) in your app.
+ *
+ * @param url The URL resource to open. This resource can be a network resource or a file.
+ */
++ (void)handleOpenURL:(NSURL *)url;
+
+/**
+ * Handles the event when the app receives data associated with user activity that includes a
+ * Universal Link (on iOS 9.0 and above).
+ *
+ * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app
+ * delegate (on iOS 9.0 and above).
+ *
+ * @param userActivity The activity object containing the data associated with the task the user
+ * was performing.
+ */
++ (void)handleUserActivity:(id)userActivity;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
new file mode 100755
index 00000000..f5023f57
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
@@ -0,0 +1,102 @@
+#import <Foundation/Foundation.h>
+
+#import "FIREventNames.h"
+#import "FIRParameterNames.h"
+#import "FIRUserPropertyNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The top level Firebase Analytics singleton that provides methods for logging events and setting
+/// user properties. See <a href="http://goo.gl/gz8SLz">the developer guides</a> for general
+/// information on using Firebase Analytics in your apps.
+@interface FIRAnalytics : NSObject
+
+/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have
+/// the same parameters. Up to 500 event names are supported. Using predefined events and/or
+/// parameters is recommended for optimal reporting.
+///
+/// The following event names are reserved and cannot be used:
+/// <ul>
+/// <li>app_clear_data</li>
+/// <li>app_remove</li>
+/// <li>app_update</li>
+/// <li>error</li>
+/// <li>first_open</li>
+/// <li>in_app_purchase</li>
+/// <li>notification_dismiss</li>
+/// <li>notification_foreground</li>
+/// <li>notification_open</li>
+/// <li>notification_receive</li>
+/// <li>os_update</li>
+/// <li>session_start</li>
+/// <li>user_engagement</li>
+/// </ul>
+///
+/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or
+/// underscores. The name must start with an alphabetic character. Some event names are
+/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_" prefix
+/// is reserved and should not be used. Note that event names are case-sensitive and that
+/// logging two events whose names differ only in case will result in two distinct events.
+/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has
+/// no parameters. Parameter names can be up to 40 characters long and must start with an
+/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString
+/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are
+/// supported. NSString parameter values can be up to 100 characters long. The "firebase_"
+/// prefix is reserved and should not be used for parameter names.
++ (void)logEventWithName:(NSString *)name
+ parameters:(nullable NSDictionary<NSString *, NSObject *> *)parameters;
+
+/// Sets a user property to a given value. Up to 25 user property names are supported. Once set,
+/// user property values persist throughout the app lifecycle and across sessions.
+///
+/// The following user property names are reserved and cannot be used:
+/// <ul>
+/// <li>first_open_time</li>
+/// <li>last_deep_link_referrer</li>
+/// <li>user_id</li>
+/// </ul>
+///
+/// @param value The value of the user property. Values can be up to 36 characters long. Setting the
+/// value to nil removes the user property.
+/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters
+/// or underscores and must start with an alphabetic character. The "firebase_" prefix is
+/// reserved and should not be used for user property names.
++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name;
+
+/// Sets the user ID property. This feature must be used in accordance with
+/// <a href="https://www.google.com/policies/privacy">Google's Privacy Policy</a>
+///
+/// @param userID The user ID to ascribe to the user of this app on this device, which must be
+/// non-empty and no more than 36 characters long. Setting userID to nil removes the user ID.
++ (void)setUserID:(nullable NSString *)userID;
+
+/// Sets the current screen name, which specifies the current visual context in your app. This helps
+/// identify the areas in your app where users spend their time and how they interact with your app.
+///
+/// Note that screen reporting is enabled automatically and records the class name of the current
+/// UIViewController for you without requiring you to call this method. If you implement
+/// viewDidAppear in your UIViewController but do not call [super viewDidAppear:], that screen class
+/// will not be automatically tracked. The class name can optionally be overridden by calling this
+/// method in the viewDidAppear callback of your UIViewController and specifying the
+/// screenClassOverride parameter.
+///
+/// If your app does not use a distinct UIViewController for each screen, you should call this
+/// method and specify a distinct screenName each time a new screen is presented to the user.
+///
+/// The screen name and screen class remain in effect until the current UIViewController changes or
+/// a new call to setScreenName:screenClass: is made.
+///
+/// @param screenName The name of the current screen. Should contain 1 to 100 characters. Set to nil
+/// to clear the current screen name.
+/// @param screenClassOverride The name of the screen class. Should contain 1 to 100 characters. By
+/// default this is the class name of the current UIViewController. Set to nil to revert to the
+/// default class name.
++ (void)setScreenName:(nullable NSString *)screenName
+ screenClass:(nullable NSString *)screenClassOverride;
+
+/// The unique ID for this instance of the application.
++ (NSString *)appInstanceID;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h
new file mode 100755
index 00000000..dc227a4c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRAnalyticsConfiguration.h>
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRApp.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRApp.h
new file mode 100755
index 00000000..de24da17
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRApp.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRApp.h>
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRConfiguration.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRConfiguration.h
new file mode 100755
index 00000000..be2ff7bf
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRConfiguration.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRConfiguration.h>
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIREventNames.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIREventNames.h
new file mode 100755
index 00000000..3b40eecf
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIREventNames.h
@@ -0,0 +1,336 @@
+/// @file FIREventNames.h
+///
+/// Predefined event names.
+///
+/// An Event is an important occurrence in your app that you want to measure. You can report up to
+/// 500 different types of Events per app and you can associate up to 25 unique parameters with each
+/// Event type. Some common events are suggested below, but you may also choose to specify custom
+/// Event types that are associated with your specific app. Each event type is identified by a
+/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric
+/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_"
+/// prefix is reserved and should not be used.
+
+/// Add Payment Info event. This event signifies that a user has submitted their payment information
+/// to your app.
+static NSString *const kFIREventAddPaymentInfo = @"add_payment_info";
+
+/// E-Commerce Add To Cart event. This event signifies that an item was added to a cart for
+/// purchase. Add this event to a funnel with kFIREventEcommercePurchase to gauge the effectiveness
+/// of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must
+/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventAddToCart = @"add_to_cart";
+
+/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist.
+/// Use this event to identify popular gift items in your app. Note: If you supply the
+/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency
+/// parameter so that revenue metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventAddToWishlist = @"add_to_wishlist";
+
+/// App Open event. By logging this event when an App is moved to the foreground, developers can
+/// understand how often users leave and return during the course of a Session. Although Sessions
+/// are automatically reported, this event can provide further clarification around the continuous
+/// engagement of app-users.
+static NSString *const kFIREventAppOpen = @"app_open";
+
+/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of
+/// checking out. Add this event to a funnel with your kFIREventEcommercePurchase event to gauge the
+/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue
+/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue
+/// metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventBeginCheckout = @"begin_checkout";
+
+/// Campaign Detail event. Log this event to supply the referral details of a re-engagement
+/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource,
+/// kFIRParameterMedium or kFIRParameterCampaign. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSource (NSString)</li>
+/// <li>@c kFIRParameterMedium (NSString)</li>
+/// <li>@c kFIRParameterCampaign (NSString)</li>
+/// <li>@c kFIRParameterTerm (NSString) (optional)</li>
+/// <li>@c kFIRParameterContent (NSString) (optional)</li>
+/// <li>@c kFIRParameterAdNetworkClickID (NSString) (optional)</li>
+/// <li>@c kFIRParameterCP1 (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventCampaignDetails = @"campaign_details";
+
+/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log
+/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li>
+/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li>
+/// </ul>
+static NSString *const kFIREventEarnVirtualCurrency = @"earn_virtual_currency";
+
+/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note:
+/// This is different from the in-app purchase event, which is reported automatically for App
+/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also
+/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// <li>@c kFIRParameterTax (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterShipping (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCoupon (NSString) (optional)</li>
+/// <li>@c kFIRParameterLocation (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventEcommercePurchase = @"ecommerce_purchase";
+
+/// Generate Lead event. Log this event when a lead has been generated in the app to understand the
+/// efficacy of your install and re-engagement campaigns. Note: If you supply the
+/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency
+/// parameter so that revenue metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventGenerateLead = @"generate_lead";
+
+/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use
+/// this event to analyze how popular certain groups or social features are in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterGroupID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventJoinGroup = @"join_group";
+
+/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can
+/// help you gauge the level distribution of your userbase and help you identify certain levels that
+/// are difficult to pass. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterCharacter (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventLevelUp = @"level_up";
+
+/// Login event. Apps with a login feature can report this event to signify that a user has logged
+/// in.
+static NSString *const kFIREventLogin = @"login";
+
+/// Post Score event. Log this event when the user posts a score in your gaming app. This event can
+/// help you understand how users are actually performing in your game and it can help you correlate
+/// high scores with certain audiences or behaviors. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterScore (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCharacter (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPostScore = @"post_score";
+
+/// Present Offer event. This event signifies that the app has presented a purchase offer to a user.
+/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge
+/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must
+/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPresentOffer = @"present_offer";
+
+/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded.
+/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the
+/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPurchaseRefund = @"purchase_refund";
+
+/// Search event. Apps that support search features can use this event to contextualize search
+/// operations by supplying the appropriate, corresponding parameters. This event can help you
+/// identify the most popular content in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSearchTerm (NSString)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventSearch = @"search";
+
+/// Select Content event. This general purpose event signifies that a user has selected some content
+/// of a certain type in an app. The content can be any object in your app. This event can help you
+/// identify popular content and categories of content in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterContentType (NSString)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventSelectContent = @"select_content";
+
+/// Share event. Apps with social features can log the Share event to identify the most viral
+/// content. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterContentType (NSString)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventShare = @"share";
+
+/// Sign Up event. This event indicates that a user has signed up for an account in your app. The
+/// parameter signifies the method by which the user signed up. Use this event to understand the
+/// different behaviors between logged in and logged out users. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSignUpMethod (NSString)</li>
+/// </ul>
+static NSString *const kFIREventSignUp = @"sign_up";
+
+/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can
+/// help you identify which virtual goods are the most popular objects of purchase. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li>
+/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li>
+/// </ul>
+static NSString *const kFIREventSpendVirtualCurrency = @"spend_virtual_currency";
+
+/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use
+/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this
+/// process and move on to the full app experience.
+static NSString *const kFIREventTutorialBegin = @"tutorial_begin";
+
+/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding
+/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your
+/// on-boarding process.
+static NSString *const kFIREventTutorialComplete = @"tutorial_complete";
+
+/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your
+/// game. Since achievements generally represent the breadth of a gaming experience, this event can
+/// help you understand how many users are experiencing all that your game has to offer. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterAchievementID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventUnlockAchievement = @"unlock_achievement";
+
+/// View Item event. This event signifies that some content was shown to the user. This content may
+/// be a product, a webpage or just a simple image or text. Use the appropriate parameters to
+/// contextualize the event. Use this event to discover the most popular items viewed in your app.
+/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the
+/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterFlightNumber (NSString) (optional) for travel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// travel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterSearchTerm (NSString) (optional) for travel bookings</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventViewItem = @"view_item";
+
+/// View Item List event. Log this event when the user has been presented with a list of items of a
+/// certain category. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// </ul>
+static NSString *const kFIREventViewItemList = @"view_item_list";
+
+/// View Search Results event. Log this event when the user has been presented with the results of a
+/// search. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSearchTerm (NSString)</li>
+/// </ul>
+static NSString *const kFIREventViewSearchResults = @"view_search_results";
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIROptions.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIROptions.h
new file mode 100755
index 00000000..126824b0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIROptions.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIROptions.h>
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
new file mode 100755
index 00000000..a43e3473
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
@@ -0,0 +1,369 @@
+/// @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 40 characters long, may only contain alphanumeric
+/// characters and underscores ("_"), and must start with an alphabetic character. Param values can
+/// be up to 100 characters long. The "firebase_" prefix is reserved and should not be used.
+
+/// Game achievement ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterAchievementID : @"10_matches_won",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterAchievementID = @"achievement_id";
+
+/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterAdNetworkClickID : @"1234567",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterAdNetworkClickID = @"aclid";
+
+/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to
+/// capture campaign information, otherwise can be populated by developer. Highly Recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCampaign : @"winter_promotion",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCampaign = @"campaign";
+
+/// Character used in game (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCharacter : @"beat_boss",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCharacter = @"character";
+
+/// Campaign content (NSString).
+static NSString *const kFIRParameterContent = @"content";
+
+/// Type of content selected (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterContentType : @"news article",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterContentType = @"content_type";
+
+/// Coupon code for a purchasable item (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCoupon : @"zz123",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCoupon = @"coupon";
+
+/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign.
+/// Use varies by network.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCP1 : @"custom_data",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCP1 = @"cp1";
+
+/// Purchase currency in 3-letter <a href="http://en.wikipedia.org/wiki/ISO_4217#Active_codes">
+/// ISO_4217</a> format (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCurrency : @"USD",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCurrency = @"currency";
+
+/// Flight or Travel destination (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterDestination : @"Mountain View, CA",
+/// // ...
+/// };
+/// </pre>
+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).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterEndDate : @"2015-09-14",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterEndDate = @"end_date";
+
+/// Flight number for travel events (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterFlightNumber : @"ZZ800",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterFlightNumber = @"flight_number";
+
+/// Group/clan/guild ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterGroupID : @"g1",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterGroupID = @"group_id";
+
+/// Item category (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemCategory : @"t-shirts",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemCategory = @"item_category";
+
+/// Item ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemID : @"p7654",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemID = @"item_id";
+
+/// The Google <a href="https://developers.google.com/places/place-id">Place ID</a> (NSString) that
+/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemLocationID = @"item_location_id";
+
+/// Item name (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemName : @"abc",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemName = @"item_name";
+
+/// Level in game (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterLevel : @(42),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterLevel = @"level";
+
+/// Location (NSString). The Google <a href="https://developers.google.com/places/place-id">Place ID
+/// </a> that corresponds to the associated event. Alternatively, you can supply your own custom
+/// Location ID.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterLocation = @"location";
+
+/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterMedium : @"email",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterMedium = @"medium";
+
+/// Number of nights staying at hotel (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfNights : @(3),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfNights = @"number_of_nights";
+
+/// Number of passengers traveling (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfPassengers : @(11),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfPassengers = @"number_of_passengers";
+
+/// Number of rooms for travel events (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfRooms : @(2),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfRooms = @"number_of_rooms";
+
+/// Flight or Travel origin (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterOrigin : @"Mountain View, CA",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterOrigin = @"origin";
+
+/// Purchase price (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterPrice : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterPrice = @"price";
+
+/// Purchase quantity (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterQuantity : @(1),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterQuantity = @"quantity";
+
+/// Score in game (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterScore : @(4200),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterScore = @"score";
+
+/// The search string/keywords used (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSearchTerm : @"periodic table",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSearchTerm = @"search_term";
+
+/// Shipping cost (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterShipping : @(9.50),
+/// kFIRParameterCurrency : @"USD", // e.g. $9.50 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterShipping = @"shipping";
+
+/// Sign up method (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSignUpMethod : @"google",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSignUpMethod = @"sign_up_method";
+
+/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban
+/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your
+/// property. Highly recommended (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSource : @"InMobi",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSource = @"source";
+
+/// The departure date, check-in date or rental start date for the item. This should be in
+/// YYYY-MM-DD format (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterStartDate : @"2015-09-14",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterStartDate = @"start_date";
+
+/// Tax amount (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTax : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTax = @"tax";
+
+/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTerm : @"game",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTerm = @"term";
+
+/// A single ID for a ecommerce group transaction (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTransactionID : @"ab7236dd9823",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTransactionID = @"transaction_id";
+
+/// Travel class (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTravelClass : @"business",
+/// // ...
+/// };
+/// </pre>
+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: Values for pre-defined currency-related events
+/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be
+/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is
+/// [-9,223,372,036,854.77, 9,223,372,036,854.77].
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterValue : @(3.99),
+/// kFIRParameterCurrency : @"USD", // e.g. $3.99 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterValue = @"value";
+
+/// Name of virtual currency type (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterVirtualCurrencyName = @"virtual_currency_name";
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
new file mode 100755
index 00000000..54cf1c20
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
new file mode 100755
index 00000000..3142c97b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
@@ -0,0 +1,9 @@
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIROptions.h"
+#import "FIRAnalytics+AppDelegate.h"
+#import "FIRAnalytics.h"
+#import "FIREventNames.h"
+#import "FIRParameterNames.h"
+#import "FIRUserPropertyNames.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Modules/module.modulemap
new file mode 100755
index 00000000..c9bd66bc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseAnalytics.framework/Modules/module.modulemap
@@ -0,0 +1,10 @@
+framework module FirebaseAnalytics {
+ umbrella header "FirebaseAnalytics.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/FirebaseCore b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/FirebaseCore
new file mode 100755
index 00000000..364c6d67
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/FirebaseCore
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
new file mode 100755
index 00000000..667d5a4b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
@@ -0,0 +1,38 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * 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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRApp.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRApp.h
new file mode 100755
index 00000000..263c4bef
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRApp.h
@@ -0,0 +1,98 @@
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** A block that takes a BOOL and has no return value. */
+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.
+ *
+ * It is also possible to change the default logging level in code by calling setLoggerLevel: on
+ * the FIRConfiguration interface.
+ */
+@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 are no FIRApp instances. 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.
+ */
+- (void)deleteApp:(FIRAppVoidBoolCallback)completion;
+
+/**
+ * FIRApp instances should not be initialized directly. Call +[FIRApp configure],
+ * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly.
+ */
+- (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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRConfiguration.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRConfiguration.h
new file mode 100755
index 00000000..a25647b4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRConfiguration.h
@@ -0,0 +1,52 @@
+#import <Foundation/Foundation.h>
+
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRLoggerLevel.h"
+
+/**
+ * The log levels used by FIRConfiguration.
+ */
+typedef NS_ENUM(NSInteger, FIRLogLevel) {
+ /** Error */
+ kFIRLogLevelError __deprecated = 0,
+ /** Warning */
+ kFIRLogLevelWarning __deprecated,
+ /** Info */
+ kFIRLogLevelInfo __deprecated,
+ /** Debug */
+ kFIRLogLevelDebug __deprecated,
+ /** Assert */
+ kFIRLogLevelAssert __deprecated,
+ /** Max */
+ kFIRLogLevelMax __deprecated = kFIRLogLevelAssert
+} DEPRECATED_MSG_ATTRIBUTE(
+ "Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. 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
+
+/** Returns the shared configuration object. */
++ (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 or setLoggerLevel. See FIRApp.h for more details.");
+
+/**
+ * Sets the logging level for internal Firebase logging. Firebase will only log messages
+ * that are logged at or below loggerLevel. The messages are logged both to the Xcode
+ * console and to the device's log. Note that if an app is running from AppStore, it will
+ * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose)
+ * setting.
+ *
+ * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice.
+ */
+- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRLoggerLevel.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRLoggerLevel.h
new file mode 100755
index 00000000..ddf683f7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIRLoggerLevel.h
@@ -0,0 +1,12 @@
+/**
+ * The log levels used by internal logging.
+ */
+typedef NS_ENUM(NSInteger, FIRLoggerLevel) {
+ FIRLoggerLevelError = 3 /*ASL_LEVEL_ERR*/,
+ FIRLoggerLevelWarning = 4 /*ASL_LEVEL_WARNING*/,
+ FIRLoggerLevelNotice = 5 /*ASL_LEVEL_NOTICE*/,
+ FIRLoggerLevelInfo = 6 /*ASL_LEVEL_INFO*/,
+ FIRLoggerLevelDebug = 7 /*ASL_LEVEL_DEBUG*/,
+ FIRLoggerLevelMin = FIRLoggerLevelError,
+ FIRLoggerLevelMax = FIRLoggerLevelDebug
+};
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIROptions.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIROptions.h
new file mode 100755
index 00000000..083082ab
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FIROptions.h
@@ -0,0 +1,93 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * This class provides constant fields of Google APIs.
+ */
+@interface FIROptions : NSObject<NSCopying>
+
+/**
+ * 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 Project ID from the Firebase console, for example @"abc-xyz-123". Currently only populated
+ * when using [FIROptions defaultOptions].
+ */
+@property(nonatomic, readonly, copy) NSString *projectID;
+
+/**
+ * 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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FirebaseCore.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FirebaseCore.h
new file mode 100755
index 00000000..52a222f5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Headers/FirebaseCore.h
@@ -0,0 +1,5 @@
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIRLoggerLevel.h"
+#import "FIROptions.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Modules/module.modulemap
new file mode 100755
index 00000000..f3db90d8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCore.framework/Modules/module.modulemap
@@ -0,0 +1,8 @@
+framework module FirebaseCore {
+ umbrella header "FirebaseCore.h"
+ export *
+ module * { export *}
+ link "z"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/FirebaseCrash b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/FirebaseCrash
new file mode 100755
index 00000000..7cf08c10
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/FirebaseCrash
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FIRCrashLog.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FIRCrashLog.h
new file mode 100755
index 00000000..ac446a62
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FIRCrashLog.h
@@ -0,0 +1,164 @@
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ap A variable argument list.
+ */
+FOUNDATION_EXTERN NS_FORMAT_FUNCTION(1, 0)
+void FIRCrashLogv(NSString *format, va_list ap);
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ... A comma-separated list of arguments to substitute into
+ * format.
+ *
+ * @see FIRCrashLogv(format, ap)
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2)
+void FIRCrashLog(NSString *format, ...) {
+ va_list ap;
+
+ va_start(ap, format);
+ FIRCrashLogv(format, ap);
+ va_end(ap);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system as
+ * well as <code>NSLog()</code>.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ap A variable argument list.
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 0)
+void FIRCrashNSLogv(NSString *format, va_list ap) {
+ va_list ap2;
+
+ va_copy(ap2, ap);
+ NSLogv(format, ap);
+ FIRCrashLogv(format, ap2);
+ va_end(ap2);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system as
+ * well as <code>NSLog()</code>.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ... A comma-separated list of arguments to substitute into
+ * format.
+ *
+ * @see FIRCrashLogv(format, ap)
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2)
+void FIRCrashNSLog(NSString *format, ...) {
+ va_list ap;
+
+ va_start(ap, format);
+ FIRCrashNSLogv(format, ap);
+ va_end(ap);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system in
+ * a way that is easily called from Swift code.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. Similar to FIRCrashLog, but with a call signature
+ * that is more Swift friendly. Unlike FIRCrashLog, callers
+ * use string interpolation instead of formatting arguments.
+ *
+ * @code
+ * public func mySwiftFunction() {
+ * let unexpected_number = 10;
+ * FIRCrashMessage("This number doesn't seem right: \(unexpected_number)");
+ * }
+ * @endcode
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @param Message A log message
+ *
+ * @see FIRCrashLog(format, ...)
+ */
+FOUNDATION_STATIC_INLINE
+void FIRCrashMessage(NSString *message) {
+ FIRCrashLog(@"%@", message);
+}
+
+NS_ASSUME_NONNULL_END
+
+#ifdef FIRCRASH_REPLACE_NSLOG
+#if defined(DEBUG) || defined(FIRCRASH_LOG_TO_CONSOLE)
+#define NSLog(...) FIRCrashNSLog(__VA_ARGS__)
+#define NSLogv(...) FIRCrashNSLogv(__VA_ARGS__)
+#else
+#define NSLog(...) FIRCrashLog(__VA_ARGS__)
+#define NSLogv(...) FIRCrashLogv(__VA_ARGS__)
+#endif
+#endif
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FirebaseCrash.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FirebaseCrash.h
new file mode 100755
index 00000000..18659214
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Headers/FirebaseCrash.h
@@ -0,0 +1 @@
+#import "FIRCrashLog.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Modules/module.modulemap
new file mode 100755
index 00000000..537a790a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseCrash.framework/Modules/module.modulemap
@@ -0,0 +1,12 @@
+framework module FirebaseCrash {
+ umbrella header "FirebaseCrash.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "CoreTelephony"
+ link framework "Foundation"
+ link framework "SystemConfiguration"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/FirebaseInstanceID b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/FirebaseInstanceID
new file mode 100755
index 00000000..2ebc6e68
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/FirebaseInstanceID
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
new file mode 100755
index 00000000..5ff8372e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
@@ -0,0 +1,245 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * @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 via
+ * `kFIRInstanceIDTokenRefreshNotification`.
+ *
+ * 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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
new file mode 100755
index 00000000..053ec2b1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
@@ -0,0 +1 @@
+#import "FIRInstanceID.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Modules/module.modulemap
new file mode 100755
index 00000000..267c0356
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/Modules/module.modulemap
@@ -0,0 +1,7 @@
+framework module FirebaseInstanceID {
+ umbrella header "FirebaseInstanceID.h"
+ export *
+ module * { export *}
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/FirebaseMessaging b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/FirebaseMessaging
new file mode 100755
index 00000000..a0573d06
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/FirebaseMessaging
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h
new file mode 100755
index 00000000..a0ae2e90
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FIRMessaging.h
@@ -0,0 +1,227 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * 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,
+
+ /// FIRMessaging couldn't validate request from this client.
+ FIRMessagingErrorAuthentication = 1,
+
+ /// InstanceID service cannot be accessed.
+ FIRMessagingErrorNoAccess = 2,
+
+ /// Request to InstanceID backend timed out.
+ FIRMessagingErrorTimeout = 3,
+
+ /// No network available to reach the servers.
+ FIRMessagingErrorNetwork = 4,
+
+ /// Another similar operation in progress, bailing this one.
+ FIRMessagingErrorOperationInProgress = 5,
+
+ /// Some parameters of the request were invalid.
+ FIRMessagingErrorInvalidRequest = 7,
+};
+
+/// Status for the downstream message received by the app.
+typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {
+ /// Unknown status.
+ FIRMessagingMessageStatusUnknown,
+ /// New downstream message received by the app.
+ FIRMessagingMessageStatusNew,
+};
+
+/// Information about a downstream message received by the app.
+@interface FIRMessagingMessageInfo : NSObject
+
+/// The status of the downstream message
+@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 <NSObject>
+
+/// The callback to handle data message received via FCM for devices running iOS 10 or above.
+- (void)applicationReceivedRemoteMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage;
+
+@end
+
+/**
+ * Firebase Messaging lets you reliably deliver messages at no cost.
+ *
+ * To send or receive messages, the app must get a
+ * registration token from FIRInstanceID. This token authorizes an
+ * app server to send messages to an app instance.
+ *
+ * In order to receive FIRMessaging messages, declare `application:didReceiveRemoteNotification:`.
+ *
+ *
+ */
+@interface FIRMessaging : NSObject
+
+/**
+ * Delegate to handle remote data messages received via FCM for devices running iOS 10 or above.
+ */
+@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> 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
+ * sent 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.
+ *
+ *
+ * @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 from 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 is queued if we don't have an active connection.
+ * You can only use the upstream feature if your FCM implementation
+ * uses the XMPP server protocol.
+ *
+ * @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 FCM
+ * 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
+
+/**
+ * Use this to track message delivery and analytics for messages, typically
+ * when you receive a notification in `application:didReceiveRemoteNotification:`.
+ * However, you only need to call this if you set the `FirebaseAppDelegateProxyEnabled`
+ * flag to NO in your Info.plist. If `FirebaseAppDelegateProxyEnabled` is either missing
+ * or set to YES in your Info.plist, the library will call this automatically.
+ *
+ * @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/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
new file mode 100755
index 00000000..ef49e7ff
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
@@ -0,0 +1 @@
+#import "FIRMessaging.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Modules/module.modulemap
new file mode 100755
index 00000000..80bc59c1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseMessaging.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module FirebaseMessaging {
+ umbrella header "FirebaseMessaging.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "SystemConfiguration"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.h
new file mode 100755
index 00000000..93542737
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.h
@@ -0,0 +1,30 @@
+#import <Cordova/CDV.h>
+#import "AppDelegate.h"
+
+@interface FirebasePlugin : CDVPlugin
++ (FirebasePlugin *) firebasePlugin;
+- (void)getInstanceId:(CDVInvokedUrlCommand*)command;
+- (void)getToken:(CDVInvokedUrlCommand*)command;
+- (void)grantPermission:(CDVInvokedUrlCommand*)command;
+- (void)hasPermission:(CDVInvokedUrlCommand*)command;
+- (void)setBadgeNumber:(CDVInvokedUrlCommand*)command;
+- (void)getBadgeNumber:(CDVInvokedUrlCommand*)command;
+- (void)subscribe:(CDVInvokedUrlCommand*)command;
+- (void)unsubscribe:(CDVInvokedUrlCommand*)command;
+- (void)unregister:(CDVInvokedUrlCommand*)command;
+- (void)onNotificationOpen:(CDVInvokedUrlCommand*)command;
+- (void)onTokenRefresh:(CDVInvokedUrlCommand*)command;
+- (void)sendNotification:(NSDictionary*)userInfo;
+- (void)sendToken:(NSString*)token;
+- (void)logEvent:(CDVInvokedUrlCommand*)command;
+- (void)setScreenName:(CDVInvokedUrlCommand*)command;
+- (void)setUserId:(CDVInvokedUrlCommand*)command;
+- (void)setUserProperty:(CDVInvokedUrlCommand*)command;
+- (void)fetch:(CDVInvokedUrlCommand*)command;
+- (void)activateFetched:(CDVInvokedUrlCommand*)command;
+- (void)getValue:(CDVInvokedUrlCommand*)command;
+@property (nonatomic, copy) NSString *notificationCallbackId;
+@property (nonatomic, copy) NSString *tokenRefreshCallbackId;
+@property (nonatomic, retain) NSMutableArray *notificationStack;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.m
new file mode 100644
index 00000000..580fb760
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebasePlugin.m
@@ -0,0 +1,331 @@
+#import "FirebasePlugin.h"
+#import <Cordova/CDV.h>
+#import "AppDelegate.h"
+#import "Firebase.h"
+@import FirebaseInstanceID;
+@import FirebaseMessaging;
+@import FirebaseAnalytics;
+@import FirebaseRemoteConfig;
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@import UserNotifications;
+#endif
+
+#ifndef NSFoundationVersionNumber_iOS_9_x_Max
+#define NSFoundationVersionNumber_iOS_9_x_Max 1299
+#endif
+
+@implementation FirebasePlugin
+
+@synthesize notificationCallbackId;
+@synthesize tokenRefreshCallbackId;
+@synthesize notificationStack;
+
+static NSInteger const kNotificationStackSize = 10;
+static FirebasePlugin *firebasePlugin;
+
++ (FirebasePlugin *) firebasePlugin {
+ return firebasePlugin;
+}
+
+- (void)pluginInitialize {
+ NSLog(@"Starting Firebase plugin");
+ firebasePlugin = self;
+}
+
+// DEPRECATED - alias of getToken
+- (void)getInstanceId:(CDVInvokedUrlCommand *)command {
+ CDVPluginResult *pluginResult;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:
+ [[FIRInstanceID instanceID] token]];
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)getToken:(CDVInvokedUrlCommand *)command {
+ CDVPluginResult *pluginResult;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:
+ [[FIRInstanceID instanceID] token]];
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+- (void)hasPermission:(CDVInvokedUrlCommand *)command
+{
+ BOOL enabled = NO;
+ UIApplication *application = [UIApplication sharedApplication];
+ if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
+ enabled = application.currentUserNotificationSettings.types != UIUserNotificationTypeNone;
+ } else {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ enabled = application.enabledRemoteNotificationTypes != UIRemoteNotificationTypeNone;
+#pragma GCC diagnostic pop
+ }
+
+ NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1];
+ [message setObject:[NSNumber numberWithBool:enabled] forKey:@"isEnabled"];
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
+}
+- (void)grantPermission:(CDVInvokedUrlCommand *)command {
+ if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
+ if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) {
+ UIUserNotificationType notificationTypes =
+ (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
+ UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
+ [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ } else {
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
+ #pragma GCC diagnostic pop
+ }
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+
+
+ #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+ BOOL isIOS10 = TRUE;
+ #else
+ BOOL isIOS10 = FALSE;
+ #endif
+
+
+ if ( !isIOS10 ) {
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+
+
+ // IOS 10
+ UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge;
+ [[UNUserNotificationCenter currentNotificationCenter]
+ requestAuthorizationWithOptions:authOptions
+ completionHandler:^(BOOL granted, NSError * _Nullable error) {
+
+ if ( ![NSThread isMainThread] ) {
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
+ [[FIRMessaging messaging] setRemoteMessageDelegate:self];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus: granted ? CDVCommandStatus_OK : CDVCommandStatus_ERROR];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ });
+ }
+ else {
+ [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
+ [[FIRMessaging messaging] setRemoteMessageDelegate:self];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }
+ ];
+
+ return;
+}
+
+- (void)setBadgeNumber:(CDVInvokedUrlCommand *)command {
+ int number = [[command.arguments objectAtIndex:0] intValue];
+
+ [self.commandDelegate runInBackground:^{
+ [[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)getBadgeNumber:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ long badge = [[UIApplication sharedApplication] applicationIconBadgeNumber];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:badge];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)subscribe:(CDVInvokedUrlCommand *)command {
+ NSString* topic = [NSString stringWithFormat:@"/topics/%@", [command.arguments objectAtIndex:0]];
+
+ [[FIRMessaging messaging] subscribeToTopic: topic];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)unsubscribe:(CDVInvokedUrlCommand *)command {
+ NSString* topic = [NSString stringWithFormat:@"/topics/%@", [command.arguments objectAtIndex:0]];
+
+ [[FIRMessaging messaging] unsubscribeFromTopic: topic];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)unregister:(CDVInvokedUrlCommand *)command {
+ [[FIRInstanceID instanceID] deleteIDWithHandler:^void(NSError *_Nullable error){
+ if (error) {
+ NSLog(@"Unable to delete instance");
+ } else {
+ NSString* currentToken = [[FIRInstanceID instanceID] token];
+ if (currentToken != nil) {
+ [self sendToken:currentToken];
+ }
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+}
+
+- (void)onNotificationOpen:(CDVInvokedUrlCommand *)command {
+ self.notificationCallbackId = command.callbackId;
+
+ if (self.notificationStack != nil && [self.notificationStack count]) {
+ for (NSDictionary *userInfo in self.notificationStack) {
+ [self sendNotification:userInfo];
+ }
+ [self.notificationStack removeAllObjects];
+ }
+}
+
+- (void)onTokenRefresh:(CDVInvokedUrlCommand *)command {
+ self.tokenRefreshCallbackId = command.callbackId;
+ NSString* currentToken = [[FIRInstanceID instanceID] token];
+ if (currentToken != nil) {
+ [self sendToken:currentToken];
+ }
+}
+
+- (void)sendNotification:(NSDictionary *)userInfo {
+ if (self.notificationCallbackId != nil) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:userInfo];
+ [pluginResult setKeepCallbackAsBool:YES];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.notificationCallbackId];
+ } else {
+ if (!self.notificationStack) {
+ self.notificationStack = [[NSMutableArray alloc] init];
+ }
+
+ // stack notifications until a callback has been registered
+ [self.notificationStack addObject:userInfo];
+
+ if ([self.notificationStack count] >= kNotificationStackSize) {
+ [self.notificationStack removeLastObject];
+ }
+ }
+}
+
+- (void)sendToken:(NSString *)token {
+ if (self.tokenRefreshCallbackId != nil) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:token];
+ [pluginResult setKeepCallbackAsBool:YES];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.tokenRefreshCallbackId];
+ }
+}
+
+- (void)logEvent:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* name = [command.arguments objectAtIndex:0];
+ NSDictionary* parameters = [command.arguments objectAtIndex:1];
+
+ [FIRAnalytics logEventWithName:name parameters:parameters];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)setScreenName:(CDVInvokedUrlCommand *)command {
+ NSString* name = [command.arguments objectAtIndex:0];
+
+ [FIRAnalytics setScreenName:name screenClass:NULL];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)setUserId:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* id = [command.arguments objectAtIndex:0];
+
+ [FIRAnalytics setUserID:id];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)setUserProperty:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* name = [command.arguments objectAtIndex:0];
+ NSString* value = [command.arguments objectAtIndex:1];
+
+ [FIRAnalytics setUserPropertyString:value forName:name];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)fetch:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+
+ if ([command.arguments count] > 0){
+ int expirationDuration = [[command.arguments objectAtIndex:0] intValue];
+
+ [remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError * _Nullable error) {
+ if (status == FIRRemoteConfigFetchStatusSuccess) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+ } else {
+ [remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError * _Nullable error) {
+ if (status == FIRRemoteConfigFetchStatusSuccess) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+ }
+ }];
+}
+
+- (void)activateFetched:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+ BOOL activated = [remoteConfig activateFetched];
+ CDVPluginResult *pluginResult;
+ if (activated) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ } else {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+ }
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)getValue:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* key = [command.arguments objectAtIndex:0];
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+ NSString* value = remoteConfig[key].stringValue;
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:value];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/FirebaseRemoteConfig b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/FirebaseRemoteConfig
new file mode 100755
index 00000000..45637862
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/FirebaseRemoteConfig
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h
new file mode 100755
index 00000000..395020ca
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h
@@ -0,0 +1,224 @@
+//
+// FIRRemoteConfig.h
+// Firebase Remote Config service SDK
+// Copyright 2016 Google Inc. All rights reserved.
+//
+#import <Foundation/Foundation.h>
+
+/// The Firebase Remote Config service default namespace, to be used if the API method does not
+/// specify a different namespace. Use the default namespace if configuring from the Google Firebase
+/// service.
+extern NSString *const __nonnull FIRNamespaceGoogleMobilePlatform;
+
+/// Key used to manage throttling in NSError user info when the refreshing of Remote Config
+/// parameter values (data) is throttled. The value of this key is the elapsed time since 1970,
+/// measured in seconds.
+extern NSString *const __nonnull FIRRemoteConfigThrottledEndTimeInSecondsKey;
+
+/// Indicates whether updated data was successfully fetched.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigFetchStatus) {
+ /// Config has never been fetched.
+ FIRRemoteConfigFetchStatusNoFetchYet,
+ /// Config fetch succeeded.
+ FIRRemoteConfigFetchStatusSuccess,
+ /// Config fetch failed.
+ FIRRemoteConfigFetchStatusFailure,
+ /// Config fetch was throttled.
+ FIRRemoteConfigFetchStatusThrottled,
+};
+
+/// Remote Config error domain that handles errors when fetching data from the service.
+extern NSString *const __nonnull FIRRemoteConfigErrorDomain;
+/// Firebase Remote Config service fetch error.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigError) {
+ /// Unknown or no error.
+ FIRRemoteConfigErrorUnknown = 8001,
+ /// Frequency of fetch requests exceeds throttled limit.
+ FIRRemoteConfigErrorThrottled = 8002,
+ /// Internal error that covers all internal HTTP errors.
+ FIRRemoteConfigErrorInternalError = 8003,
+};
+
+/// Enumerated value that indicates the source of Remote Config data. Data can come from
+/// the Remote Config service, the DefaultConfig that is available when the app is first installed,
+/// or a static initialized value if data is not available from the service or DefaultConfig.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigSource) {
+ FIRRemoteConfigSourceRemote, ///< The data source is the Remote Config service.
+ FIRRemoteConfigSourceDefault, ///< The data source is the DefaultConfig defined for this app.
+ FIRRemoteConfigSourceStatic, ///< The data doesn't exist, return a static initialized value.
+};
+
+/// Completion handler invoked by fetch methods when they get a response from the server.
+///
+/// @param status Config fetching status.
+/// @param error Error message on failure.
+typedef void (^FIRRemoteConfigFetchCompletion)(FIRRemoteConfigFetchStatus status,
+ NSError *__nullable error);
+
+#pragma mark - FIRRemoteConfigValue
+/// This class provides a wrapper for Remote Config parameter values, with methods to get parameter
+/// values as different data types.
+@interface FIRRemoteConfigValue : NSObject<NSCopying>
+/// Gets the value as a string.
+@property(nonatomic, readonly, nullable) NSString *stringValue;
+/// Gets the value as a number value.
+@property(nonatomic, readonly, nullable) NSNumber *numberValue;
+/// Gets the value as a NSData object.
+@property(nonatomic, readonly, nonnull) NSData *dataValue;
+/// Gets the value as a boolean.
+@property(nonatomic, readonly) BOOL boolValue;
+/// Identifies the source of the fetched value.
+@property(nonatomic, readonly) FIRRemoteConfigSource source;
+@end
+
+#pragma mark - FIRRemoteConfigSettings
+/// Firebase Remote Config settings.
+@interface FIRRemoteConfigSettings : NSObject
+/// Indicates whether Developer Mode is enabled.
+@property(nonatomic, readonly) BOOL isDeveloperModeEnabled;
+/// Initializes FIRRemoteConfigSettings, which is used to set properties for custom settings. To
+/// make custom settings take effect, pass the FIRRemoteConfigSettings instance to the
+/// configSettings property of FIRRemoteConfig.
+- (nullable FIRRemoteConfigSettings *)initWithDeveloperModeEnabled:(BOOL)developerModeEnabled
+ NS_DESIGNATED_INITIALIZER;
+@end
+
+#pragma mark - FIRRemoteConfig
+/// Firebase Remote Config class. The shared instance method +remoteConfig can be created and used
+/// to fetch, activate and read config results and set default config results.
+@interface FIRRemoteConfig : NSObject<NSFastEnumeration>
+/// Last successful fetch completion time.
+@property(nonatomic, readonly, strong, nullable) NSDate *lastFetchTime;
+/// Last fetch status. The status can be any enumerated value from FIRRemoteConfigFetchStatus.
+@property(nonatomic, readonly, assign) FIRRemoteConfigFetchStatus lastFetchStatus;
+/// Config settings are custom settings.
+@property(nonatomic, readwrite, strong, nonnull) FIRRemoteConfigSettings *configSettings;
+
+/// Returns the FIRRemoteConfig instance shared throughout your app. This singleton object contains
+/// the complete set of Remote Config parameter values available to the app, including the Active
+/// Config and Default Config. This object also caches values fetched from the Remote Config Server
+/// until they are copied to the Active Config by calling activateFetched.
+/// When you fetch values from the Remote Config Server using the default Firebase namespace
+/// service, you should use this class method to create a shared instance of the FIRRemoteConfig
+/// object to ensure that your app will function properly with the Remote Config Server and the
+/// Firebase service.
++ (nonnull FIRRemoteConfig *)remoteConfig NS_SWIFT_NAME(remoteConfig());
+
+/// Unavailable. Use +remoteConfig instead.
+- (nonnull instancetype)init __attribute__((unavailable("Use +remoteConfig instead.")));
+
+#pragma mark - Fetch
+/// Fetches Remote Config data with a callback. Call activateFetched to make fetched data available
+/// to your app.
+/// @param completionHandler Fetch operation callback.
+- (void)fetchWithCompletionHandler:(nullable FIRRemoteConfigFetchCompletion)completionHandler;
+
+/// Fetches Remote Config data and sets a duration that specifies how long config data lasts.
+/// Call activateFetched to make fetched data available to your app.
+/// @param expirationDuration Duration that defines how long fetched config data is available, in
+/// seconds. When the config data expires, a new fetch is required.
+/// @param completionHandler Fetch operation callback.
+- (void)fetchWithExpirationDuration:(NSTimeInterval)expirationDuration
+ completionHandler:(nullable FIRRemoteConfigFetchCompletion)completionHandler;
+
+#pragma mark - Apply
+/// Applies Fetched Config data to the Active Config, causing updates to the behavior and appearance
+/// of the app to take effect (depending on how config data is used in the app).
+/// Returns true if there was a Fetched Config, and it was activated.
+/// Returns false if no Fetched Config was found, or the Fetched Config was already activated.
+- (BOOL)activateFetched;
+
+#pragma mark - Get Config
+/// Enables access to configuration values by using object subscripting syntax.
+/// This is used to get the config value of the default namespace.
+/// <pre>
+/// // Example:
+/// FIRRemoteConfig *config = [FIRRemoteConfig remoteConfig];
+/// FIRRemoteConfigValue *value = config[@"yourKey"];
+/// BOOL b = value.boolValue;
+/// NSNumber *number = config[@"yourKey"].numberValue;
+/// </pre>
+- (nonnull FIRRemoteConfigValue *)objectForKeyedSubscript:(nonnull NSString *)key;
+
+/// Gets the config value of the default namespace.
+/// @param key Config key.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key;
+
+/// Gets the config value of a given namespace.
+/// @param key Config key.
+/// @param aNamespace Config results under a given namespace.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace;
+
+/// Gets the config value of a given namespace and a given source.
+/// @param key Config key.
+/// @param aNamespace Config results under a given namespace.
+/// @param source Config value source.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace
+ source:(FIRRemoteConfigSource)source;
+
+/// Gets all the parameter keys from a given source and a given namespace.
+///
+/// @param source The config data source.
+/// @param aNamespace The config data namespace.
+/// @return An array of keys under the given source and namespace.
+- (nonnull NSArray<NSString *> *)allKeysFromSource:(FIRRemoteConfigSource)source
+ namespace:(nullable NSString *)aNamespace;
+
+/// Returns the set of parameter keys that start with the given prefix, from the default namespace
+/// in the active config.
+///
+/// @param prefix The key prefix to look for. If prefix is nil or empty, returns all the
+/// keys.
+/// @return The set of parameter keys that start with the specified prefix.
+- (nonnull NSSet<NSString *> *)keysWithPrefix:(nullable NSString *)prefix;
+
+/// Returns the set of parameter keys that start with the given prefix, from the given namespace in
+/// the active config.
+///
+/// @param prefix The key prefix to look for. If prefix is nil or empty, returns all the
+/// keys in the given namespace.
+/// @param aNamespace The namespace in which to look up the keys. If the namespace is invalid,
+/// returns an empty set.
+/// @return The set of parameter keys that start with the specified prefix.
+- (nonnull NSSet<NSString *> *)keysWithPrefix:(nullable NSString *)prefix
+ namespace:(nullable NSString *)aNamespace;
+
+#pragma mark - Defaults
+/// Sets config defaults for parameter keys and values in the default namespace config.
+///
+/// @param defaultConfig A dictionary mapping a NSString * key to a NSObject * value.
+- (void)setDefaults:(nullable NSDictionary<NSString *, NSObject *> *)defaults;
+
+/// Sets config defaults for parameter keys and values in the default namespace config.
+///
+/// @param defaultConfig A dictionary mapping a NSString * key to a NSObject * value.
+/// @param aNamespace Config under a given namespace.
+- (void)setDefaults:(nullable NSDictionary<NSString *, NSObject *> *)defaultConfig
+ namespace:(nullable NSString *)aNamespace;
+
+/// Sets default configs from plist for default namespace;
+/// @param fileName The plist file name, with no file name extension. For example, if the plist file
+/// is defaultSamples.plist, call:
+/// [[FIRRemoteConfig remoteConfig] setDefaultsFromPlistFileName:@"defaultSamples"];
+- (void)setDefaultsFromPlistFileName:(nullable NSString *)fileName;
+
+/// Sets default configs from plist for a given namespace;
+/// @param fileName The plist file name, with no file name extension. For example, if the plist file
+/// is defaultSamples.plist, call:
+/// [[FIRRemoteConfig remoteConfig] setDefaultsFromPlistFileName:@"defaultSamples"];
+/// @param aNamespace The namespace where the default config is set.
+- (void)setDefaultsFromPlistFileName:(nullable NSString *)fileName
+ namespace:(nullable NSString *)aNamespace;
+
+/// Returns the default value of a given key and a given namespace from the default config.
+///
+/// @param key The parameter key of default config.
+/// @param aNamespace The namespace of default config.
+/// @return Returns the default value of the specified key and namespace. Returns
+/// nil if the key or namespace doesn't exist in the default config.
+- (nullable FIRRemoteConfigValue *)defaultValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h
new file mode 100755
index 00000000..eedc4fce
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h
@@ -0,0 +1 @@
+#import "FIRRemoteConfig.h"
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Modules/module.modulemap b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Modules/module.modulemap
new file mode 100755
index 00000000..a6627f5e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/FirebaseRemoteConfig.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module FirebaseRemoteConfig {
+ umbrella header "FirebaseRemoteConfig.h"
+ export *
+ module * { export *}
+ link "c++"
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/GoogleToolboxForMac.framework/GoogleToolboxForMac b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/GoogleToolboxForMac.framework/GoogleToolboxForMac
new file mode 100644
index 00000000..345b889c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/GoogleToolboxForMac.framework/GoogleToolboxForMac
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Protobuf.framework/Protobuf b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Protobuf.framework/Protobuf
new file mode 100644
index 00000000..546e02ec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-firebase/Protobuf.framework/Protobuf
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h
deleted file mode 100644
index 7f3f7029..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/*!
- @header GAI.h
- @abstract Google Analytics iOS SDK Header
- @version 3.14
- @copyright Copyright 2015 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "GAILogger.h"
-#import "GAITrackedViewController.h"
-#import "GAITracker.h"
-
-typedef NS_ENUM(NSUInteger, GAIDispatchResult) {
- kGAIDispatchNoData,
- kGAIDispatchGood,
- kGAIDispatchError
-};
-
-/*! Google Analytics product string. */
-extern NSString *const kGAIProduct;
-
-/*! Google Analytics version string. */
-extern NSString *const kGAIVersion;
-
-/*!
- NSError objects returned by the Google Analytics SDK may have this error domain
- to indicate that the error originated in the Google Analytics SDK.
- */
-extern NSString *const kGAIErrorDomain;
-
-/*! Google Analytics error codes. */
-typedef enum {
- // This error code indicates that there was no error. Never used.
- kGAINoError = 0,
-
- // This error code indicates that there was a database-related error.
- kGAIDatabaseError,
-
- // This error code indicates that there was a network-related error.
- kGAINetworkError,
-} GAIErrorCode;
-
-/*!
- Google Analytics iOS top-level class. Provides facilities to create trackers
- and set behaviorial flags.
- */
-@interface GAI : NSObject
-
-/*!
- For convenience, this class exposes a default tracker instance.
- This is initialized to `nil` and will be set to the first tracker that is
- instantiated in trackerWithTrackingId:. It may be overridden as desired.
-
- The GAITrackedViewController class will, by default, use this tracker instance.
- */
-@property(nonatomic, assign) id<GAITracker> defaultTracker;
-
-/*!
- The GAILogger to use.
- */
-@property(nonatomic, retain) id<GAILogger> logger;
-
-/*!
- When this is true, no tracking information will be gathered; tracking calls
- will effectively become no-ops. When set to true, all tracking information that
- has not yet been submitted. The value of this flag will be persisted
- automatically by the SDK. Developers can optionally use this flag to implement
- an opt-out setting in the app to allows users to opt out of Google Analytics
- tracking.
-
- This is set to `NO` the first time the Google Analytics SDK is used on a
- device, and is persisted thereafter.
- */
-@property(nonatomic, assign) BOOL optOut;
-
-/*!
- If this value is positive, tracking information will be automatically
- dispatched every dispatchInterval seconds. Otherwise, tracking information must
- be sent manually by calling dispatch.
-
- By default, this is set to `120`, which indicates tracking information should
- be dispatched automatically every 120 seconds.
- */
-@property(nonatomic, assign) NSTimeInterval dispatchInterval;
-
-/*!
- When set to true, the SDK will record the currently registered uncaught
- exception handler, and then register an uncaught exception handler which tracks
- the exceptions that occurred using defaultTracker. If defaultTracker is not
- `nil`, this function will track the exception on the tracker and attempt to
- dispatch any outstanding tracking information for 5 seconds. It will then call
- the previously registered exception handler, if any. When set back to false,
- the previously registered uncaught exception handler will be restored.
- */
-@property(nonatomic, assign) BOOL trackUncaughtExceptions;
-
-/*!
- When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
- */
-@property(nonatomic, assign) BOOL dryRun;
-
-/*! Get the shared instance of the Google Analytics for iOS class. */
-+ (GAI *)sharedInstance;
-
-/*!
- Creates or retrieves a GAITracker implementation with the specified name and
- tracking ID. If the tracker for the specified name does not already exist, then
- it will be created and returned; otherwise, the existing tracker will be
- returned. If the existing tracker for the respective name has a different
- tracking ID, that tracking ID is not changed by this method. If defaultTracker
- is not set, it will be set to the tracker instance returned here.
-
- @param name The name of this tracker. Must not be `nil` or empty.
-
- @param trackingId The tracking ID to use for this tracker. It should be of
- the form `UA-xxxxx-y`.
-
- @return A GAITracker associated with the specified name. The tracker
- can be used to send tracking data to Google Analytics. The first time this
- method is called with a particular name, the tracker for that name will be
- returned, and subsequent calls with the same name will return the same
- instance. It is not necessary to retain the tracker because the tracker will be
- retained internally by the library.
-
- If an error occurs or the name is not valid, this method will return
- `nil`.
- */
-- (id<GAITracker>)trackerWithName:(NSString *)name
- trackingId:(NSString *)trackingId;
-
-/*!
- Creates or retrieves a GAITracker implementation with name equal to
- the specified tracking ID. If the tracker for the respective name does not
- already exist, it is created, has it's tracking ID set to |trackingId|,
- and is returned; otherwise, the existing tracker is returned. If the existing
- tracker for the respective name has a different tracking ID, that tracking ID
- is not changed by this method. If defaultTracker is not set, it is set to the
- tracker instance returned here.
-
- @param trackingId The tracking ID to use for this tracker. It should be of
- the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
-
- @return A GAITracker associated with the specified trackingID. The tracker
- can be used to send tracking data to Google Analytics. The first time this
- method is called with a particular trackingID, the tracker for the respective
- name will be returned, and subsequent calls with the same trackingID
- will return the same instance. It is not necessary to retain the tracker
- because the tracker will be retained internally by the library.
-
- If an error occurs or the trackingId is not valid, this method will return
- `nil`.
- */
-- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
-
-/*!
- Remove a tracker from the trackers dictionary. If it is the default tracker,
- clears the default tracker as well.
-
- @param name The name of the tracker.
- */
-- (void)removeTrackerByName:(NSString *)name;
-
-/*!
- Dispatches any pending tracking information.
-
- Note that this does not have any effect on dispatchInterval, and can be used in
- conjunction with periodic dispatch. */
-- (void)dispatch;
-
-/*!
- Dispatches the next tracking beacon in the queue, calling completionHandler when
- the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted
- (returning kGAIDispatchError). If there is no network connection or there is no data to send,
- kGAIDispatchNoData is returned.
-
- Note that calling this method with a non-nil completionHandler disables periodic dispatch.
- Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when
- the app resumes from the background.
-
- Calling this method with a nil completionHandler is the same as calling the dispatch
- above.
-
- This method can be used for background data fetching in iOS 7.0 or later. It would be wise to
- call this when the application is exiting to initiate the submission of any unsubmitted
- tracking information.
-
- @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult
- param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch.
- */
-- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h
deleted file mode 100644
index b8c5fdab..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*!
- @header GAIDictionaryBuilder.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "GAIEcommerceProduct.h"
-#import "GAIEcommerceProductAction.h"
-#import "GAIEcommercePromotion.h"
-
-/*!
- * Helper class to build a dictionary of hit parameters and values.
- * <br>
- * Examples:
- * <code>
- * id<GAITracker> t = // get a tracker.
- * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
- * action:@"EventAction"
- * label:nil
- * value:nil]
- * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]];
- * </code>
- * This will send an event hit type with the specified parameters
- * and a custom dimension parameter.
- * <br>
- * If you want to send a parameter with all hits, set it on GAITracker directly.
- * <code>
- * [t set:kGAIScreenName value:@"Home"];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"PlusOne"
- * target:@"SOME_URL"] build]];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"Share"
- * target:@"SOME_POST"] build]];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"HangOut"
- * target:@"SOME_CIRCLE"]
- * build]];
- * </code>
- * You can override a value set on the tracker by adding it to the dictionary.
- * <code>
- * [t set:kGAIScreenName value:@"Home"];
- * [t send:...];
- * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
- * action:@"popup"
- * label:nil
- * value:nil]
- * set:@"popup title" forKey:kGAIScreenName] build]];
- * </code>
- * The values set via [GAIDictionaryBuilder set] or
- * [GAIDictionaryBuilder setAll] will override any existing values in the
- * GAIDictionaryBuilder object (i.e. initialized by
- * [GAIDictionaryBuilder createXYZ]). e.g.
- * <code>
- * GAIDictionaryBuilder *m =
- * GAIDictionaryBuilder createTimingWithCategory:@"category"
- * interval:@0
- * name:@"name"
- * label:nil];
- * [t send:[m.set:@"10" forKey:kGAITimingVar] build];
- * [t send:[m.set:@"20" forKey:kGAITimingVar] build];
- * </code>
- */
-@interface GAIDictionaryBuilder : NSObject
-
-- (GAIDictionaryBuilder *)set:(NSString *)value
- forKey:(NSString *)key;
-
-/*!
- * Copies all the name-value pairs from params into this object, ignoring any
- * keys that are not NSString and any values that are neither NSString or
- * NSNull.
- */
-- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
-
-/*!
- * Returns the value for the input parameter paramName, or nil if paramName
- * is not present.
- */
-- (NSString *)get:(NSString *)paramName;
-
-/*!
- * Return an NSMutableDictionary object with all the parameters set in this
- */
-- (NSMutableDictionary *)build;
-
-/*!
- * Parses and translates utm campaign parameters to analytics campaign param
- * and returns them as a map.
- *
- * @param urlString url containing utm campaign parameters.
- *
- * Valid campaign parameters are:
- * <ul>
- * <li>utm_id</li>
- * <li>utm_campaign</li>
- * <li>utm_content</li>
- * <li>utm_medium</li>
- * <li>utm_source</li>
- * <li>utm_term</li>
- * <li>dclid</li>
- * <li>gclid</li>
- * <li>gmob_t</li>
- * <li>aclid</li>
- * <li>anid</li>
- * </ul>
- * <p>
- * Example:
- * http://my.site.com/index.html?utm_campaign=wow&utm_source=source
- * utm_campaign=wow&utm_source=source.
- * <p>
- * For more information on auto-tagging, see
- * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
- * <p>
- * For more information on manual tagging, see
- * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
- */
-- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an appview
- hit.
-
- Note that using this method will not set the screen name for followon hits. To
- do that you need to call set:kGAIDescription value:<screenName> on the
- GAITracker instance.
-
- This method is deprecated. Use createScreenView instead.
- */
-+ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead.");
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a screenview
- hit.
-
- Note that using this method will not set the screen name for followon hits. To
- do that you need to call set:kGAIDescription value:<screenName> on the
- GAITracker instance.
- */
-+ (GAIDictionaryBuilder *)createScreenView;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
- */
-+ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
- action:(NSString *)action
- label:(NSString *)label
- value:(NSNumber *)value;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an exception
- hit.
- */
-+ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
- withFatal:(NSNumber *)fatal;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
- */
-+ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
- name:(NSString *)name
- sku:(NSString *)sku
- category:(NSString *)category
- price:(NSNumber *)price
- quantity:(NSNumber *)quantity
- currencyCode:(NSString *)currencyCode;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
- */
-+ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
- action:(NSString *)action
- target:(NSString *)target;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
- */
-+ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
- interval:(NSNumber *)intervalMillis
- name:(NSString *)name
- label:(NSString *)label;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a transaction
- hit.
- */
-+ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
- affiliation:(NSString *)affiliation
- revenue:(NSNumber *)revenue
- tax:(NSNumber *)tax
- shipping:(NSNumber *)shipping
- currencyCode:(NSString *)currencyCode;
-
-/*!
- Set the product action field for this hit.
- */
-- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction;
-
-/*!
- Adds a product to this hit.
- */
-- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product;
-
-/*!
- Add a product impression to this hit.
- */
-- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product
- impressionList:(NSString *)name
- impressionSource:(NSString *)source;
-
-/*!
- Add a promotion to this hit.
- */
-- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h
deleted file mode 100644
index b3ba60ae..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*!
- @header GAIEcommerceFields.h
- @abstract Google Analytics iOS SDK Ecommerce Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- This class provides several fields and methods useful as wire format parameters for
- Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details
- on how to use the Enhanced Ecommerce features.
- */
-
-// Enhanced Ecommerce Product fields
-extern NSString *const kGAIProductId;
-extern NSString *const kGAIProductName;
-extern NSString *const kGAIProductBrand;
-extern NSString *const kGAIProductCategory;
-extern NSString *const kGAIProductVariant;
-extern NSString *const kGAIProductPrice;
-extern NSString *const kGAIProductQuantity;
-extern NSString *const kGAIProductCouponCode;
-extern NSString *const kGAIProductPosition;
-
-extern NSString *const kGAIProductAction;
-
-// product action values
-extern NSString *const kGAIPADetail;
-extern NSString *const kGAIPAClick;
-extern NSString *const kGAIPAAdd;
-extern NSString *const kGAIPARemove;
-extern NSString *const kGAIPACheckout;
-extern NSString *const kGAIPACheckoutOption;
-extern NSString *const kGAIPAPurchase;
-extern NSString *const kGAIPARefund;
-
-// product action fields
-// used for 'purchase' and 'refund' actions
-extern NSString *const kGAIPATransactionId;
-extern NSString *const kGAIPAAffiliation;
-extern NSString *const kGAIPARevenue;
-extern NSString *const kGAIPATax;
-extern NSString *const kGAIPAShipping;
-extern NSString *const kGAIPACouponCode;
-// used for 'checkout' action
-extern NSString *const kGAICheckoutStep;
-extern NSString *const kGAICheckoutOption;
-// used for 'detail' and 'click' actions
-extern NSString *const kGAIProductActionList;
-extern NSString *const kGAIProductListSource;
-
-// Enhanced Ecommerce Impressions fields
-extern NSString *const kGAIImpressionName;
-extern NSString *const kGAIImpressionListSource;
-extern NSString *const kGAIImpressionProduct;
-extern NSString *const kGAIImpressionProductId;
-extern NSString *const kGAIImpressionProductName;
-extern NSString *const kGAIImpressionProductBrand;
-extern NSString *const kGAIImpressionProductCategory;
-extern NSString *const kGAIImpressionProductVariant;
-extern NSString *const kGAIImpressionProductPosition;
-extern NSString *const kGAIImpressionProductPrice;
-
-// Enhanced Ecommerce Promotions fields
-extern NSString *const kGAIPromotionId;
-extern NSString *const kGAIPromotionName;
-extern NSString *const kGAIPromotionCreative;
-extern NSString *const kGAIPromotionPosition;
-
-// Promotion actions
-extern NSString *const kGAIPromotionAction;
-extern NSString *const kGAIPromotionView;
-extern NSString *const kGAIPromotionClick;
-
-@interface GAIEcommerceFields : NSObject
-
-/*!
- Generates an enhanced ecommerce product field. Note that field names generated by
- customDimensionForIndex and customMetricForIndex can be used as suffixes.
-
- @param index the index of the product
- @param suffix the product field suffix (such as kGAIProductPrice).
-
- @return an NSString representing the product field parameter
- */
-+ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix;
-
-/*!
- Genrates an enhanced ecommerce impression list field name with an index. The return value of
- this method should also be used as input to the productImpressionForList method below.
-
- @param index the index of the impression list
-
- @return an NSString representing the impression list parameter
- */
-+ (NSString *)impressionListForIndex:(NSUInteger)index;
-
-/*!
- Generates an enhanced ecommerce product impression field with the impression list, product index
- and product suffix as parameters. The output of the method impressionListForIndex above should be
- used as the input list for this method. The output of customDimensionForIndex and
- customMetricForIndex can be used as suffixes.
-
- @param list the impression list for this product impression
- @param index the index of this product in the impression list
- @param suffix the product impression suffix for this field
-
- @return an NSString representing this product impression field parameter
- */
-+ (NSString *)productImpressionForList:(NSString *)list
- index:(NSUInteger)index
- suffix:(NSString *)Suffix;
-
-/*!
- Generates an enhanced ecommerce promotion field with an index and suffix.
-
- @param index the index of the promotion
- @param suffix the promotion suffix (such as kGAIPromotionId)
-
- @return an NSString representing this promotion field paramter
- */
-+ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h
deleted file mode 100644
index 029f7638..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*!
- @header GAIEcommerceProduct.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct product related information for a Google Analytics beacon. Use this class to
- * report information about products sold by merchants or impressions of products seen by users.
- * Instances of this class can be associated with both Product Actions and Product
- * Impression Lists.
- * <br>
- * Typical usage:
- * <code>
- * [tracker set:kGAIScreenName value:@"MyScreen"];
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
- * [product setId:@""PID-1234""];
- * [product setName:@"Space Monkeys!"];
- * [product setPrice:@100];
- * [product setQuantity:@2];
- * [builder addProductImpression:product impressionList:@"listName"];
- * [tracker send:[builder build]];
- * </code>
- */
-@interface GAIEcommerceProduct : NSObject
-
-/*!
- Sets the id that is used to identify a product in GA reports.
- */
-- (GAIEcommerceProduct *)setId:(NSString *)productId;
-
-/*!
- Sets the name that is used to indentify the product in GA reports.
- */
-- (GAIEcommerceProduct *)setName:(NSString *)productName;
-
-/*!
- Sets the brand associated with the product in GA reports.
- */
-- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand;
-
-/*!
- Sets the category associated with the product in GA reports.
- */
-- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory;
-
-/*!
- Sets the variant of the product.
- */
-- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant;
-
-/*!
- Sets the price of the product.
- */
-- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice;
-
-/*!
- Sets the quantity of the product. This field is usually not used with product impressions.
- */
-- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity;
-
-/*!
- Sets the coupon code associated with the product. This field is usually not used with product
- impressions.
- */
-- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode;
-
-/*!
- Sets the position of the product on the screen/product impression list, etc.
- */
-- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition;
-
-/*!
- Sets the custom dimension associated with this product.
- */
-- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value;
-
-/*!
- Sets the custom metric associated with this product.
- */
-- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value;
-
-/*!
- Builds an NSDictionary of fields stored in this instance suitable for a product action. The
- index parameter is the index of this product in the product action list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithIndex:(NSUInteger)index;
-
-/*!
- Builds an NSDictionary of fields stored in this instance suitable for an impression list. The
- lIndex parameter is the index of the product impression list while the index parameter is the
- index of this product in that impression list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h
deleted file mode 100644
index e3da1c15..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*!
- @header GAIProductAction.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct transaction/checkout or other product interaction related information for a
- * Google Analytics hit. Use this class to report information about products sold, viewed or
- * refunded. This class is intended to be used with GAIDictionaryBuilder.
- * <br>
- * Typical usage:
- * <code>
- * [tracker set:kGAIScreenName value:@"MyScreen"];
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init];
- * [action setAction:kGAIPAPurchase];
- * [action setTransactionId:@"TT-1234"];
- * [action setRevenue:@3.14];
- * [action setCouponCode:@"EXTRA100"];
- * [builder setProductAction:action];
- * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
- * [product setId:@""PID-1234""];
- * [product setName:@"Space Monkeys!"];
- * [product setPrice:@100];
- * [product setQuantity:@2];
- * [builder addProduct:product];
- * [tracker send:[builder build]];
- * </code>
- */
-@interface GAIEcommerceProductAction : NSObject
-
-/*!
- Sets the product action field for this product action. Valid values can be found in
- GAIEcommerceFields.h under "product action values".
- */
-- (GAIEcommerceProductAction *)setAction:(NSString *)productAction;
-
-/*!
- The unique id associated with the transaction. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId;
-
-/*!
- Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation;
-
-/*!
- Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund
- product actions.
- */
-- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue;
-
-/*!
- Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund
- product actions.
- */
-- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax;
-
-/*!
- Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping;
-
-/*!
- Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode;
-
-/*!
- Sets the checkout process's progress. This value is used for kGAICheckout and
- kGAICheckoutOptions product actions.
- */
-- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep;
-
-/*!
- Sets the option associated with the checkout. This value is used for kGAICheckout and
- kGAICheckoutOptions product actions.
- */
-- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption;
-
-/*!
- Sets the list name associated with the products in Google Analytics beacons. This value is
- used in kGAIPADetail and kGAIPAClick product actions.
- */
-- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList;
-
-/*!
- Sets the list source name associated with the products in Google Analytics beacons. This value
- is used in kGAIPADetail and kGAIPAClick product actions.
- */
-- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource;
-
-/*!
- Builds an NSDictionary of fields stored in this instance representing this product action.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)build;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h
deleted file mode 100644
index c7bf25af..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- @header GAIEcommercePromotion.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct promotion related fields for Google Analytics hits. The fields from this class
- * can be used to represent internal promotions that run within an app, such as banners, banner ads
- * etc.
- *
- * Typical usage:
- * <code>
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init];
- * [promotion setId:@"PROMO-ID1234"];
- * [promotion setName:@"Home screen banner"];
- * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction];
- * [builder addPromotion:promotion];
- * [tracker send:builder.build]];
- * </code>
- */
-@interface GAIEcommercePromotion : NSObject
-
-/*!
- Sets the id that is used to identify a promotion in GA reports.
- */
-- (GAIEcommercePromotion *)setId:(NSString *)pid;
-
-/*!
- Sets the name that is used to identify a promotion in GA reports.
- */
-- (GAIEcommercePromotion *)setName:(NSString *)name;
-
-/*!
- Sets the name of the creative associated with the promotion.
- */
-- (GAIEcommercePromotion *)setCreative:(NSString *)creative;
-
-/*!
- Sets the position of the promotion.
- */
-- (GAIEcommercePromotion *)setPosition:(NSString *)position;
-
-/*!
- Builds an NSDictionary of fields stored in this instance. The index parameter is the
- index of this promotion in that promotion list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithIndex:(NSUInteger)index;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h
deleted file mode 100644
index e54cef03..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*!
- @header GAIFields.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- These fields can be used for the wire format parameter names required by
- the |GAITracker| get, set and send methods as well as the set methods in the
- |GAIDictionaryBuilder| class.
- */
-extern NSString *const kGAIUseSecure;
-
-extern NSString *const kGAIHitType;
-extern NSString *const kGAITrackingId;
-extern NSString *const kGAIClientId;
-extern NSString *const kGAIDataSource;
-extern NSString *const kGAIAnonymizeIp;
-extern NSString *const kGAISessionControl;
-extern NSString *const kGAIDeviceModelVersion;
-extern NSString *const kGAIScreenResolution;
-extern NSString *const kGAIViewportSize;
-extern NSString *const kGAIEncoding;
-extern NSString *const kGAIScreenColors;
-extern NSString *const kGAILanguage;
-extern NSString *const kGAIJavaEnabled;
-extern NSString *const kGAIFlashVersion;
-extern NSString *const kGAINonInteraction;
-extern NSString *const kGAIReferrer;
-extern NSString *const kGAILocation;
-extern NSString *const kGAIHostname;
-extern NSString *const kGAIPage;
-extern NSString *const kGAIDescription; // synonym for kGAIScreenName
-extern NSString *const kGAIScreenName; // synonym for kGAIDescription
-extern NSString *const kGAITitle;
-extern NSString *const kGAIAdMobHitId;
-extern NSString *const kGAIAppName;
-extern NSString *const kGAIAppVersion;
-extern NSString *const kGAIAppId;
-extern NSString *const kGAIAppInstallerId;
-extern NSString *const kGAIUserId;
-
-extern NSString *const kGAIEventCategory;
-extern NSString *const kGAIEventAction;
-extern NSString *const kGAIEventLabel;
-extern NSString *const kGAIEventValue;
-
-extern NSString *const kGAISocialNetwork;
-extern NSString *const kGAISocialAction;
-extern NSString *const kGAISocialTarget;
-
-extern NSString *const kGAITransactionId;
-extern NSString *const kGAITransactionAffiliation;
-extern NSString *const kGAITransactionRevenue;
-extern NSString *const kGAITransactionShipping;
-extern NSString *const kGAITransactionTax;
-extern NSString *const kGAICurrencyCode;
-
-extern NSString *const kGAIItemPrice;
-extern NSString *const kGAIItemQuantity;
-extern NSString *const kGAIItemSku;
-extern NSString *const kGAIItemName;
-extern NSString *const kGAIItemCategory;
-
-extern NSString *const kGAICampaignSource;
-extern NSString *const kGAICampaignMedium;
-extern NSString *const kGAICampaignName;
-extern NSString *const kGAICampaignKeyword;
-extern NSString *const kGAICampaignContent;
-extern NSString *const kGAICampaignId;
-extern NSString *const kGAICampaignAdNetworkClickId;
-extern NSString *const kGAICampaignAdNetworkId;
-
-extern NSString *const kGAITimingCategory;
-extern NSString *const kGAITimingVar;
-extern NSString *const kGAITimingValue;
-extern NSString *const kGAITimingLabel;
-
-extern NSString *const kGAIExDescription;
-extern NSString *const kGAIExFatal;
-
-extern NSString *const kGAISampleRate;
-
-extern NSString *const kGAIIdfa;
-extern NSString *const kGAIAdTargetingEnabled;
-
-// hit types
-extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead.");
-extern NSString *const kGAIScreenView;
-extern NSString *const kGAIEvent;
-extern NSString *const kGAISocial;
-extern NSString *const kGAITransaction;
-extern NSString *const kGAIItem;
-extern NSString *const kGAIException;
-extern NSString *const kGAITiming;
-
-/*!
- This class provides several fields and methods useful as wire format parameter
- names. The methods are used for wire format parameter names that are indexed.
- */
-
-@interface GAIFields : NSObject
-
-/*!
- Generates the correct parameter name for a content group with an index.
-
- @param index the index of the content group.
-
- @return an NSString representing the content group parameter for the index.
- */
-+ (NSString *)contentGroupForIndex:(NSUInteger)index;
-
-/*!
- Generates the correct parameter name for a custon dimension with an index.
-
- @param index the index of the custom dimension.
-
- @return an NSString representing the custom dimension parameter for the index.
- */
-+ (NSString *)customDimensionForIndex:(NSUInteger)index;
-
-/*!
- Generates the correct parameter name for a custom metric with an index.
-
- @param index the index of the custom metric.
-
- @return an NSString representing the custom metric parameter for the index.
- */
-+ (NSString *)customMetricForIndex:(NSUInteger)index;
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h
deleted file mode 100644
index 06291f2c..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
- @header GAILogger.h
- @abstract Google Analytics iOS SDK Source
- @copyright Copyright 2011 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-typedef NS_ENUM(NSUInteger, GAILogLevel) {
- kGAILogLevelNone = 0,
- kGAILogLevelError = 1,
- kGAILogLevelWarning = 2,
- kGAILogLevelInfo = 3,
- kGAILogLevelVerbose = 4
-};
-
-/*!
- Protocol to be used for logging debug and informational messages from the SDK.
- Implementations of this protocol can be provided to the |GAI| class,
- to be used as the logger by the SDK. See the |logger| property in GAI.h.
- */
-@protocol GAILogger<NSObject>
-@required
-
-/*!
- Only messages of |logLevel| and below are logged.
- */
-@property (nonatomic, assign) GAILogLevel logLevel;
-
-/*!
- Logs message with log level |kGAILogLevelVerbose|.
- */
-- (void)verbose:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelInfo|.
- */
-- (void)info:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelWarning|.
- */
-- (void)warning:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelError|.
- */
-- (void)error:(NSString *)message;
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h
deleted file mode 100644
index de19def0..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
- @header GAITrackedViewController.h
- @abstract Google Analytics for iOS Tracked View Controller Header
- @copyright Copyright 2012 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@protocol GAITracker;
-
-/*!
- Extends UIViewController to generate Google Analytics screenview calls
- whenever the view appears; this is done by overriding the `viewDidAppear:`
- method. The screen name must be set for any tracking calls to be made.
-
- By default, this will use [GAI defaultTracker] for tracking calls, but one can
- override this by setting the tracker property.
- */
-@interface GAITrackedViewController : UIViewController
-
-/*!
- The tracker on which view tracking calls are be made, or `nil`, in which case
- [GAI defaultTracker] will be used.
- */
-@property(nonatomic, assign) id<GAITracker> tracker;
-/*!
- The screen name, for purposes of Google Analytics tracking. If this is `nil`,
- no tracking calls will be made.
- */
-@property(nonatomic, copy) NSString *screenName;
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h
deleted file mode 100644
index fdc5c5df..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
- @header GAITracker.h
- @abstract Google Analytics iOS SDK Tracker Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
-*/
-
-#import <Foundation/Foundation.h>
-
-/*!
- Google Analytics tracking interface. Obtain instances of this interface from
- [GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
- and exceptions. The implementation of this interface is thread-safe, and no
- calls are expected to block or take a long time. All network and disk activity
- will take place in the background.
- */
-@protocol GAITracker<NSObject>
-
-/*!
- Name of this tracker.
- */
-@property(nonatomic, readonly) NSString *name;
-
-/*!
- Allow collection of IDFA and related fields if set to true. Default is false.
- */
-@property(nonatomic) BOOL allowIDFACollection;
-
-/*!
- Set a tracking parameter.
-
- @param parameterName The parameter name.
-
- @param value The value to set for the parameter. If this is nil, the
- value for the parameter will be cleared.
- */
-- (void)set:(NSString *)parameterName
- value:(NSString *)value;
-
-/*!
- Get a tracking parameter.
-
- @param parameterName The parameter name.
-
- @returns The parameter value, or nil if no value for the given parameter is
- set.
- */
-- (NSString *)get:(NSString *)parameterName;
-
-/*!
- Queue tracking information with the given parameter values.
-
- @param parameters A map from parameter names to parameter values which will be
- set just for this piece of tracking information, or nil for none.
- */
-- (void)send:(NSDictionary *)parameters;
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h
deleted file mode 100644
index dde480ac..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//UniversalAnalyticsPlugin.h
-//Created by Daniel Wilson 2013-09-19
-
-#import <Foundation/Foundation.h>
-#import <Cordova/CDV.h>
-#import "GAI.h"
-
-@interface UniversalAnalyticsPlugin : CDVPlugin {
- bool _trackerStarted;
- bool _debugMode;
- NSMutableDictionary *_customDimensions;
-}
-
-- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command;
-- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command;
-- (void) setUserId: (CDVInvokedUrlCommand*)command;
-- (void) setAppVersion: (CDVInvokedUrlCommand*)command;
-- (void) getVar: (CDVInvokedUrlCommand*)command;
-- (void) setVar: (CDVInvokedUrlCommand*)command;
-- (void) dispatch: (CDVInvokedUrlCommand*)command;
-- (void) debugMode: (CDVInvokedUrlCommand*)command;
-- (void) setOptOut: (CDVInvokedUrlCommand*)command;
-- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command;
-- (void) addCustomDimension: (CDVInvokedUrlCommand*)command;
-- (void) trackEvent: (CDVInvokedUrlCommand*)command;
-- (void) trackMetric: (CDVInvokedUrlCommand*)command;
-- (void) trackTiming: (CDVInvokedUrlCommand*)command;
-- (void) trackView: (CDVInvokedUrlCommand*)command;
-- (void) trackException: (CDVInvokedUrlCommand*)command;
-- (void) addTransaction: (CDVInvokedUrlCommand*)command;
-- (void) addTransactionItem: (CDVInvokedUrlCommand*)command;
-
-@end
-
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m
deleted file mode 100644
index 12355da6..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m
+++ /dev/null
@@ -1,543 +0,0 @@
-//UniversalAnalyticsPlugin.m
-//Created by Daniel Wilson 2013-09-19
-
-#import "UniversalAnalyticsPlugin.h"
-#import "GAI.h"
-#import "GAIDictionaryBuilder.h"
-#import "GAIFields.h"
-
-@implementation UniversalAnalyticsPlugin
-
-- (void) pluginInitialize
-{
- _debugMode = false;
- _trackerStarted = false;
- _customDimensions = nil;
-}
-
-- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString* accountId = [command.arguments objectAtIndex:0];
- NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1];
-
- if ([dispatchPeriod isKindOfClass:[NSNumber class]])
- [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue];
- else
- [GAI sharedInstance].dispatchInterval = 30;
-
- [[GAI sharedInstance] trackerWithTrackingId:accountId];
-
- _trackerStarted = true;
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
- /* NSLog(@"successfully started GAI tracker"); */
-}
-
-- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command
-{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue];
-}
-
-- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker
-{
- if (_customDimensions) {
- for (NSString *key in _customDimensions.allKeys) {
- NSString *value = [_customDimensions objectForKey:key];
-
- NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
- f.numberStyle = NSNumberFormatterDecimalStyle;
- NSNumber *myKey = [f numberFromString:key];
-
- /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */
- [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue]
- value:value];
- }
- }
-}
-
-- (void) getVar: (CDVInvokedUrlCommand*) command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- NSString* parameterName = [command.arguments objectAtIndex:0];
- NSString* result = [tracker get:parameterName];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) setVar: (CDVInvokedUrlCommand*) command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- NSString* parameterName = [command.arguments objectAtIndex:0];
- NSString* parameter = [command.arguments objectAtIndex:1];
- [tracker set:parameterName value:parameter];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) dispatch: (CDVInvokedUrlCommand*) command
-{
- [[GAI sharedInstance] dispatch];
-}
-
-- (void) debugMode: (CDVInvokedUrlCommand*) command
-{
- _debugMode = true;
- [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
-}
-
-- (void) setUserId: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* userId = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:@"&uid" value: userId];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* anonymize = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:kGAIAnonymizeIp value:anonymize];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setOptOut: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- bool optout = [[command.arguments objectAtIndex:0] boolValue];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [[GAI sharedInstance] setOptOut:optout];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setAppVersion: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* version = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:@"&av" value: version];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- bool enabled = [[command.arguments objectAtIndex:0] boolValue];
- [[GAI sharedInstance] setTrackUncaughtExceptions:enabled];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) addCustomDimension: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSNumber* key = [command.arguments objectAtIndex:0];
- NSString* value = [command.arguments objectAtIndex:1];
-
- if ( ! _customDimensions) {
- _customDimensions = [[NSMutableDictionary alloc] init];
- }
-
- _customDimensions[key.stringValue] = value;
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) trackMetric: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSNumber *key = nil;
- NSString *value = nil;
-
- if ([command.arguments count] > 0)
- key = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- value = [command.arguments objectAtIndex:1];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value];
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackEvent: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString *category = nil;
- NSString *action = nil;
- NSString *label = nil;
- NSNumber *value = nil;
-
- if ([command.arguments count] > 0)
- category = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- action = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- label = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- value = [command.arguments objectAtIndex:3];
-
- bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- GAIDictionaryBuilder *builder = [GAIDictionaryBuilder
- createEventWithCategory: category //required
- action: action //required
- label: label
- value: value];
- if(newSession){
- [builder set:@"start" forKey:kGAISessionControl];
- }
- [tracker send:[builder build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-
- }];
-
-}
-
-- (void) trackException: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString *description = nil;
- NSNumber *fatal = nil;
-
- if ([command.arguments count] > 0)
- description = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- fatal = [command.arguments objectAtIndex:1];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
-
- [tracker send:[[GAIDictionaryBuilder
- createExceptionWithDescription: description
- withFatal: fatal] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackView: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString* screenName = [command.arguments objectAtIndex:0];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [self addCustomDimensionsToTracker:tracker];
-
- NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
- GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];
-
- if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) {
- [[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
- }
-
- bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue];
- if(newSession){
- [openParams set:@"start" forKey:kGAISessionControl];
- }
-
- NSDictionary *hitParamsDict = [openParams build];
-
- [tracker set:kGAIScreenName value:screenName];
- [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackTiming: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
-
- NSString *category = nil;
- NSNumber *intervalInMilliseconds = nil;
- NSString *name = nil;
- NSString *label = nil;
-
- if ([command.arguments count] > 0)
- category = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- intervalInMilliseconds = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- name = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- label = [command.arguments objectAtIndex:3];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- [tracker send:[[GAIDictionaryBuilder
- createTimingWithCategory: category //required
- interval: intervalInMilliseconds //required
- name: name
- label: label] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) addTransaction: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
-
- NSString *transactionId = nil;
- NSString *affiliation = nil;
- NSNumber *revenue = nil;
- NSNumber *tax = nil;
- NSNumber *shipping = nil;
- NSString *currencyCode = nil;
-
-
- if ([command.arguments count] > 0)
- transactionId = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- affiliation = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- revenue = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- tax = [command.arguments objectAtIndex:3];
-
- if ([command.arguments count] > 4)
- shipping = [command.arguments objectAtIndex:4];
-
- if ([command.arguments count] > 5)
- currencyCode = [command.arguments objectAtIndex:5];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
-
- [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID
- affiliation:affiliation // (NSString) Affiliation
- revenue:revenue // (NSNumber) Order revenue (including tax and shipping)
- tax:tax // (NSNumber) Tax
- shipping:shipping // (NSNumber) Shipping
- currencyCode:currencyCode] build]]; // (NSString) Currency code
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-
-
-- (void) addTransactionItem: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
-
- CDVPluginResult* pluginResult = nil;
- NSString *transactionId = nil;
- NSString *name = nil;
- NSString *sku = nil;
- NSString *category = nil;
- NSNumber *price = nil;
- NSNumber *quantity = nil;
- NSString *currencyCode = nil;
-
-
- if ([command.arguments count] > 0)
- transactionId = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- name = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- sku = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- category = [command.arguments objectAtIndex:3];
-
- if ([command.arguments count] > 4)
- price = [command.arguments objectAtIndex:4];
-
- if ([command.arguments count] > 5)
- quantity = [command.arguments objectAtIndex:5];
-
- if ([command.arguments count] > 6)
- currencyCode = [command.arguments objectAtIndex:6];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
-
- [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID
- name:name // (NSString) Product Name
- sku:sku // (NSString) Product SKU
- category:category // (NSString) Product category
- price:price // (NSNumber) Product price
- quantity:quantity // (NSNumber) Product quantity
- currencyCode:currencyCode] build]]; // (NSString) Currency code
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a
deleted file mode 100644
index 9813beaf..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a
deleted file mode 100644
index 45ca87e8..00000000
--- a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Resources/GoogleService-Info.plist b/StoneIsland/platforms/ios/Stone Island/Resources/GoogleService-Info.plist
new file mode 100644
index 00000000..5516ebf3
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Resources/GoogleService-Info.plist
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+</dict>
+</plist> \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Stone Island/config.xml b/StoneIsland/platforms/ios/Stone Island/config.xml
index 409c6a57..d955ecf8 100755
--- a/StoneIsland/platforms/ios/Stone Island/config.xml
+++ b/StoneIsland/platforms/ios/Stone Island/config.xml
@@ -47,9 +47,6 @@
<feature name="PushNotification">
<param name="ios-package" value="PushPlugin" />
</feature>
- <feature name="UniversalAnalytics">
- <param name="ios-package" value="UniversalAnalyticsPlugin" />
- </feature>
<feature name="StatusBar">
<param name="ios-package" value="CDVStatusBar" />
<param name="onload" value="true" />
@@ -93,4 +90,8 @@
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="AutoHideSplashScreen" value="false" />
+ <feature name="FirebasePlugin">
+ <param name="ios-package" value="FirebasePlugin" />
+ <param name="onload" value="true" />
+ </feature>
</widget>
diff --git a/StoneIsland/platforms/ios/frameworks.json b/StoneIsland/platforms/ios/frameworks.json
index dc881b1d..6cb97880 100644
--- a/StoneIsland/platforms/ios/frameworks.json
+++ b/StoneIsland/platforms/ios/frameworks.json
@@ -2,14 +2,10 @@
"AudioToolbox.framework": 1,
"CoreLocation.framework": 1,
"Social.framework": 1,
- "SystemConfiguration.framework": 2,
+ "SystemConfiguration.framework": 1,
"CoreTelephony.framework": 1,
"MessageUI.framework": 1,
"AddressBook.framework": 1,
"libsqlite3.tbd": 1,
- "libz.tbd": 1,
- "CoreData.framework": 1,
- "AdSupport.framework": 1,
- "libz.dylib": 1,
- "libsqlite3.dylib": 1
+ "libz.tbd": 1
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/ios.json b/StoneIsland/platforms/ios/ios.json
index 741c049c..9596fcd6 100644
--- a/StoneIsland/platforms/ios/ios.json
+++ b/StoneIsland/platforms/ios/ios.json
@@ -49,10 +49,6 @@
"count": 1
},
{
- "xml": "<feature name=\"UniversalAnalytics\"><param name=\"ios-package\" value=\"UniversalAnalyticsPlugin\" /></feature>",
- "count": 1
- },
- {
"xml": "<feature name=\"StatusBar\"><param name=\"ios-package\" value=\"CDVStatusBar\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
@@ -63,6 +59,10 @@
{
"xml": "<preference name=\"StatusBarStyle\" value=\"lightcontent\" />",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"FirebasePlugin\"><param name=\"ios-package\" value=\"FirebasePlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "count": 1
}
]
}
@@ -120,6 +120,26 @@
}
]
}
+ },
+ "*/Entitlements-Debug.plist": {
+ "parents": {
+ "aps-environment": [
+ {
+ "xml": "<string>development</string>",
+ "count": 1
+ }
+ ]
+ }
+ },
+ "*/Entitlements-Release.plist": {
+ "parents": {
+ "aps-environment": [
+ {
+ "xml": "<string>production</string>",
+ "count": 1
+ }
+ ]
+ }
}
}
},
@@ -165,10 +185,10 @@
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-google-analytics": {
+ "cordova-plugin-statusbar": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-statusbar": {
+ "cordova-plugin-firebase": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
@@ -306,21 +326,20 @@
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
],
"plugin_metadata": {
@@ -337,7 +356,7 @@
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
index e80f5bbb..e39888f0 100644
--- a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
@@ -132,21 +132,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
];
module.exports.metadata =
@@ -165,8 +164,8 @@ module.exports.metadata =
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-firebase/www/firebase.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-firebase/www/firebase.js
new file mode 100644
index 00000000..e1e423d1
--- /dev/null
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-firebase/www/firebase.js
@@ -0,0 +1,124 @@
+cordova.define("cordova-plugin-firebase.FirebasePlugin", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+exports.getInstanceId = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getInstanceId", []);
+};
+
+exports.getToken = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getToken", []);
+};
+
+exports.onNotificationOpen = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onNotificationOpen", []);
+};
+
+exports.onTokenRefresh = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onTokenRefresh", []);
+};
+
+exports.grantPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "grantPermission", []);
+};
+
+exports.hasPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "hasPermission", []);
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ exec(success, error, "FirebasePlugin", "setBadgeNumber", [number]);
+};
+
+exports.getBadgeNumber = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getBadgeNumber", []);
+};
+
+exports.subscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "subscribe", [topic]);
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "unsubscribe", [topic]);
+};
+
+exports.unregister = function(success, error) {
+ exec(success, error, "FirebasePlugin", "unregister", []);
+};
+
+exports.logEvent = function(name, params, success, error) {
+ exec(success, error, "FirebasePlugin", "logEvent", [name, params]);
+};
+
+exports.logError = function(message, success, error) {
+ exec(success, error, "FirebasePlugin", "logError", [message]);
+};
+
+exports.setScreenName = function(name, success, error) {
+ exec(success, error, "FirebasePlugin", "setScreenName", [name]);
+};
+
+exports.setUserId = function(id, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserId", [id]);
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserProperty", [name, value]);
+};
+
+exports.activateFetched = function (success, error) {
+ exec(success, error, "FirebasePlugin", "activateFetched", []);
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ var args = [];
+ if (typeof cacheExpirationSeconds === 'number') {
+ args.push(cacheExpirationSeconds);
+ } else {
+ error = success;
+ success = cacheExpirationSeconds;
+ }
+ exec(success, error, "FirebasePlugin", "fetch", args);
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getByteArray", args);
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getValue", args);
+};
+
+exports.getInfo = function (success, error) {
+ exec(success, error, "FirebasePlugin", "getInfo", []);
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ exec(success, error, "FirebasePlugin", "setConfigSettings", [settings]);
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ var args = [defaults];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "setDefaults", args);
+};
+
+});
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
deleted file mode 100644
index b46b19ea..00000000
--- a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
+++ /dev/null
@@ -1,130 +0,0 @@
-cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
-function UniversalAnalyticsPlugin() {}
-
-UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
- if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
- dispatchPeriod = 30;
- } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
- // Called without dispatchPeriod but with a callback.
- // Looks like the original API was used so shift parameters over to remain compatible.
- error = success;
- success = dispatchPeriod;
- dispatchPeriod = 30;
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
-};
-
-UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
-};
-
-UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
-};
-
-/* enables verbose logging */
-UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
-};
-
-UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
- if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
- campaignUrl = '';
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
-};
-
-UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
- if (typeof key !== "number") {
- throw Error("key must be a valid integer not '" + typeof key + "'");
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
- if (typeof value === 'undefined' || value === null) {
- value = 0;
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
-};
-
-/**
- * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
- */
-UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
- if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
- intervalInMilliseconds = 0;
- }
- if (typeof name === 'undefined' || name === null) {
- name = '';
- }
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
-};
-
-/* Google Analytics e-Commerce Tracking */
-/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
-UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
-};
-
-UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
-};
-
-/* automatic uncaught exception tracking */
-UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
-};
-
-module.exports = new UniversalAnalyticsPlugin();
-
-});
diff --git a/StoneIsland/platforms/ios/www/cordova_plugins.js b/StoneIsland/platforms/ios/www/cordova_plugins.js
index e80f5bbb..e39888f0 100644
--- a/StoneIsland/platforms/ios/www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/www/cordova_plugins.js
@@ -132,21 +132,20 @@ module.exports = [
]
},
{
- "id": "cordova-plugin-google-analytics.UniversalAnalytics",
- "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
- "pluginId": "cordova-plugin-google-analytics",
- "clobbers": [
- "analytics",
- "ga"
- ]
- },
- {
"id": "cordova-plugin-statusbar.statusbar",
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
"pluginId": "cordova-plugin-statusbar",
"clobbers": [
"window.StatusBar"
]
+ },
+ {
+ "id": "cordova-plugin-firebase.FirebasePlugin",
+ "file": "plugins/cordova-plugin-firebase/www/firebase.js",
+ "pluginId": "cordova-plugin-firebase",
+ "clobbers": [
+ "FirebasePlugin"
+ ]
}
];
module.exports.metadata =
@@ -165,8 +164,8 @@ module.exports.metadata =
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
"phonegap-plugin-push": "1.9.2",
- "cordova-plugin-google-analytics": "1.8.3",
- "cordova-plugin-statusbar": "2.2.3"
+ "cordova-plugin-statusbar": "2.2.3",
+ "cordova-plugin-firebase": "0.1.24"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-firebase/www/firebase.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-firebase/www/firebase.js
new file mode 100644
index 00000000..e1e423d1
--- /dev/null
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-firebase/www/firebase.js
@@ -0,0 +1,124 @@
+cordova.define("cordova-plugin-firebase.FirebasePlugin", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+exports.getInstanceId = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getInstanceId", []);
+};
+
+exports.getToken = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getToken", []);
+};
+
+exports.onNotificationOpen = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onNotificationOpen", []);
+};
+
+exports.onTokenRefresh = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onTokenRefresh", []);
+};
+
+exports.grantPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "grantPermission", []);
+};
+
+exports.hasPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "hasPermission", []);
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ exec(success, error, "FirebasePlugin", "setBadgeNumber", [number]);
+};
+
+exports.getBadgeNumber = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getBadgeNumber", []);
+};
+
+exports.subscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "subscribe", [topic]);
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "unsubscribe", [topic]);
+};
+
+exports.unregister = function(success, error) {
+ exec(success, error, "FirebasePlugin", "unregister", []);
+};
+
+exports.logEvent = function(name, params, success, error) {
+ exec(success, error, "FirebasePlugin", "logEvent", [name, params]);
+};
+
+exports.logError = function(message, success, error) {
+ exec(success, error, "FirebasePlugin", "logError", [message]);
+};
+
+exports.setScreenName = function(name, success, error) {
+ exec(success, error, "FirebasePlugin", "setScreenName", [name]);
+};
+
+exports.setUserId = function(id, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserId", [id]);
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserProperty", [name, value]);
+};
+
+exports.activateFetched = function (success, error) {
+ exec(success, error, "FirebasePlugin", "activateFetched", []);
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ var args = [];
+ if (typeof cacheExpirationSeconds === 'number') {
+ args.push(cacheExpirationSeconds);
+ } else {
+ error = success;
+ success = cacheExpirationSeconds;
+ }
+ exec(success, error, "FirebasePlugin", "fetch", args);
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getByteArray", args);
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getValue", args);
+};
+
+exports.getInfo = function (success, error) {
+ exec(success, error, "FirebasePlugin", "getInfo", []);
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ exec(success, error, "FirebasePlugin", "setConfigSettings", [settings]);
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ var args = [defaults];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "setDefaults", args);
+};
+
+});
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js
deleted file mode 100644
index b46b19ea..00000000
--- a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js
+++ /dev/null
@@ -1,130 +0,0 @@
-cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
-function UniversalAnalyticsPlugin() {}
-
-UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
- if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
- dispatchPeriod = 30;
- } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
- // Called without dispatchPeriod but with a callback.
- // Looks like the original API was used so shift parameters over to remain compatible.
- error = success;
- success = dispatchPeriod;
- dispatchPeriod = 30;
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
-};
-
-UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
-};
-
-UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
-};
-
-/* enables verbose logging */
-UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
-};
-
-UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
- if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
- campaignUrl = '';
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
-};
-
-UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
- if (typeof key !== "number") {
- throw Error("key must be a valid integer not '" + typeof key + "'");
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
- if (typeof value === 'undefined' || value === null) {
- value = 0;
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
-};
-
-/**
- * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
- */
-UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
- if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
- intervalInMilliseconds = 0;
- }
- if (typeof name === 'undefined' || name === null) {
- name = '';
- }
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
-};
-
-/* Google Analytics e-Commerce Tracking */
-/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
-UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
-};
-
-UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
-};
-
-/* automatic uncaught exception tracking */
-UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
-};
-
-module.exports = new UniversalAnalyticsPlugin();
-
-});
diff --git a/StoneIsland/plugins/android.json b/StoneIsland/plugins/android.json
index 6b738bd7..67cc3c41 100755
--- a/StoneIsland/plugins/android.json
+++ b/StoneIsland/plugins/android.json
@@ -48,10 +48,10 @@
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-google-analytics": {
+ "cordova-plugin-statusbar": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-statusbar": {
+ "cordova-plugin-firebase": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/LICENSE b/StoneIsland/plugins/cordova-plugin-firebase/LICENSE
new file mode 100644
index 00000000..4a12e4dc
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Robert Arnesson AB
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/README.md b/StoneIsland/plugins/cordova-plugin-firebase/README.md
new file mode 100644
index 00000000..2fed7ef5
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/README.md
@@ -0,0 +1,342 @@
+# cordova-plugin-firebase
+This plugin brings push notifications, analytics, event tracking, crash reporting and more from Google Firebase to your Cordova project!
+Android and iOS supported.
+
+Donations are welcome and will go towards further development of this project. Use the wallet address below to donate.
+
+BTC: 1JuXhHMCPHXT2fDfSRUTef9TpE2D67sc9f
+
+Thank you for your support!
+
+## Installation
+See npm package for versions - https://www.npmjs.com/package/cordova-plugin-firebase
+
+Install the plugin by adding it your project's config.xml:
+```
+<plugin name="cordova-plugin-firebase" spec="0.1.24" />
+```
+or by running:
+```
+cordova plugin add cordova-plugin-firebase@0.1.24 --save
+```
+Download your Firebase configuration files, GoogleService-Info.plist for ios and google-services.json for android, and place them in the root folder of your cordova project:
+
+```
+- My Project/
+ platforms/
+ plugins/
+ www/
+ config.xml
+ google-services.json <--
+ GoogleService-Info.plist <--
+ ...
+```
+
+See https://support.google.com/firebase/answer/7015592 for details how to download the files from firebase.
+
+This plugin uses a hook (after prepare) that copies the configuration files to the right place, namely platforms/ios/\<My Project\>/Resources for ios and platforms/android for android.
+
+**Note that the Firebase SDK requires the configuration files to be present and valid, otherwise your app will crash on boot or Firebase features won't work.**
+
+## Changing Notification Icon
+The plugin will use notification_icon from drawable resources if it exists, otherwise the default app icon will is used.
+To set a big icon and small icon for notifications, define them through drawable nodes.
+Create the required styles.xml files and add the icons to the
+`<projectroot>/res/native/android/res/<drawable-DPI>` folders.
+
+The example below uses a png named "ic_silhouette.png", the app Icon (@mipmap/icon) and sets a base theme.
+From android version 21 (Lollipop) notifications were changed, needing a seperate setting.
+If you only target Lollipop and above, you don't need to setup both.
+Thankfully using the version dependant asset selections, we can make one build/apk supporting all target platforms.
+`<projectroot>/res/native/android/res/values/styles.xml`
+```
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+ <!-- inherit from the holo theme -->
+ <style name="AppTheme" parent="android:Theme.Light">
+ <item name="android:windowDisablePreview">true</item>
+ </style>
+ <drawable name="notification_big">@mipmap/icon</drawable>
+ <drawable name="notification_icon">@mipmap/icon</drawable>
+</resources>
+```
+and
+`<projectroot>/res/native/android/res/values-v21/styles.xml`
+```
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+ <!-- inherit from the material theme -->
+ <style name="AppTheme" parent="android:Theme.Material">
+ <item name="android:windowDisablePreview">true</item>
+ </style>
+ <drawable name="notification_big">@mipmap/icon</drawable>
+ <drawable name="notification_icon">@drawable/ic_silhouette</drawable>
+</resources>
+```
+
+## Notification Colors
+
+On Android Lollipop and above you can also set the accent color for the notification by adding a color setting.
+
+`<projectroot>/res/native/android/res/values/colors.xml`
+```
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="primary">#FFFFFF00</color>
+ <color name="primary_dark">#FF220022</color>
+ <color name="accent">#FF00FFFF</color>
+</resources>
+```
+
+
+### Notes about PhoneGap Build
+
+Hooks does not work with PhoneGap Build. This means you will have to manually make sure the configuration files are included. One way to do that is to make a private fork of this plugin and replace the placeholder config files (see src/ios and src/android) with your actual ones, as well as hard coding your app id and api key in plugin.xml.
+
+
+## Methods
+
+### getToken
+
+Get the device token (id):
+```
+window.FirebasePlugin.getToken(function(token) {
+ // save this server-side and use it to push notifications to this device
+ console.log(token);
+}, function(error) {
+ console.error(error);
+});
+```
+Note that token will be null if it has not been established yet
+
+### onTokenRefresh
+
+Register for token changes:
+```
+window.FirebasePlugin.onTokenRefresh(function(token) {
+ // save this server-side and use it to push notifications to this device
+ console.log(token);
+}, function(error) {
+ console.error(error);
+});
+```
+This is the best way to get a valid token for the device as soon as the token is established
+
+### onNotificationOpen
+
+Register notification callback:
+```
+window.FirebasePlugin.onNotificationOpen(function(notification) {
+ console.log(notification);
+}, function(error) {
+ console.error(error);
+});
+```
+Notification flow:
+
+1. App is in foreground:
+ 1. User receives the notification data in the JavaScript callback without any notification on the device itself (this is the normal behaviour of push notifications, it is up to you, the developer, to notify the user)
+2. App is in background:
+ 1. User receives the notification message in its device notification bar
+ 2. User taps the notification and the app opens
+ 3. User receives the notification data in the JavaScript callback
+
+Notification icon on Android:
+
+[Changing notification icon](#changing-notification-icon)
+
+### grantPermission (iOS only)
+
+Grant permission to recieve push notifications (will trigger prompt):
+```
+window.FirebasePlugin.grantPermission();
+```
+### hasPermission
+
+Check permission to recieve push notifications:
+```
+window.FirebasePlugin.hasPermission(function(data){
+ console.log(data.isEnabled);
+});
+```
+
+### setBadgeNumber
+
+Set a number on the icon badge:
+```
+window.FirebasePlugin.setBadgeNumber(3);
+```
+
+Set 0 to clear the badge
+```
+window.FirebasePlugin.setBadgeNumber(0);
+```
+
+### getBadgeNumber
+
+Get icon badge number:
+```
+window.FirebasePlugin.getBadgeNumber(function(n) {
+ console.log(n);
+});
+```
+
+### subscribe
+
+Subscribe to a topic:
+```
+window.FirebasePlugin.subscribe("example");
+```
+
+### unsubscribe
+
+Unsubscribe from a topic:
+```
+window.FirebasePlugin.unsubscribe("example");
+```
+
+### unregister
+
+Unregister from firebase, used to stop receiving push notifications. Call this when you logout user from your app. :
+```
+window.FirebasePlugin.unregister();
+```
+
+### logEvent
+
+Log an event using Analytics:
+```
+window.FirebasePlugin.logEvent("select_content", {content_type: "page_view", item_id: "home"});
+```
+
+### setScreenName
+
+Set the name of the current screen in Analytics:
+```
+window.FirebasePlugin.setScreenName("Home");
+```
+
+### setUserId
+
+Set a user id for use in Analytics:
+```
+window.FirebasePlugin.setUserId("user_id");
+```
+
+### setUserProperty
+
+Set a user property for use in Analytics:
+```
+window.FirebasePlugin.setUserProperty("name", "value");
+```
+
+### fetch
+
+Fetch Remote Config parameter values for your app:
+```
+window.FirebasePlugin.fetch();
+// or, specify the cacheExpirationSeconds
+window.FirebasePlugin.fetch(600);
+```
+
+### activateFetched
+
+Activate the Remote Config fetched config:
+```
+window.FirebasePlugin.activateFetched(function(activated) {
+ // activated will be true if there was a fetched config activated,
+ // or false if no fetched config was found, or the fetched config was already activated.
+ console.log(activated);
+}, function(error) {
+ console.error(error);
+});
+```
+
+### getValue
+
+Retrieve a Remote Config value:
+```
+window.FirebasePlugin.getValue("key", function(value) {
+ console.log(value);
+}, function(error) {
+ console.error(error);
+});
+// or, specify a namespace for the config value
+window.FirebasePlugin.getValue("key", "namespace", function(value) {
+ console.log(value);
+}, function(error) {
+ console.error(error);
+});
+```
+
+### getByteArray (Android only)
+**NOTE: byte array is only available for SDK 19+**
+Retrieve a Remote Config byte array:
+```
+window.FirebasePlugin.getByteArray("key", function(bytes) {
+ // a Base64 encoded string that represents the value for "key"
+ console.log(bytes.base64);
+ // a numeric array containing the values of the byte array (i.e. [0xFF, 0x00])
+ console.log(bytes.array);
+}, function(error) {
+ console.error(error);
+});
+// or, specify a namespace for the byte array
+window.FirebasePlugin.getByteArray("key", "namespace", function(bytes) {
+ // a Base64 encoded string that represents the value for "key"
+ console.log(bytes.base64);
+ // a numeric array containing the values of the byte array (i.e. [0xFF, 0x00])
+ console.log(bytes.array);
+}, function(error) {
+ console.error(error);
+});
+```
+
+### getInfo (Android only)
+
+Get the current state of the FirebaseRemoteConfig singleton object:
+```
+window.FirebasePlugin.getInfo(function(info) {
+ // the status of the developer mode setting (true/false)
+ console.log(info.configSettings.developerModeEnabled);
+ // the timestamp (milliseconds since epoch) of the last successful fetch
+ console.log(info.fetchTimeMillis);
+ // the status of the most recent fetch attempt (int)
+ console.log(info.lastFetchStatus);
+}, function(error) {
+ console.error(error);
+});
+```
+
+### setConfigSettings (Android only)
+
+Change the settings for the FirebaseRemoteConfig object's operations:
+```
+var settings = {
+ developerModeEnabled: true
+}
+window.FirebasePlugin.setConfigSettings(settings);
+```
+
+### setDefaults (Android only)
+
+Set defaults in the Remote Config:
+```
+// define defaults
+var defaults = {
+ // map property name to value in Remote Config defaults
+ mLong: 1000,
+ mString: 'hello world',
+ mDouble: 3.14,
+ mBoolean: true,
+ // map "mBase64" to a Remote Config byte array represented by a Base64 string
+ // Note: the Base64 string is in an array in order to differentiate from a string config value
+ mBase64: ["SGVsbG8gV29ybGQ="],
+ // map "mBytes" to a Remote Config byte array represented by a numeric array
+ mBytes: [0xFF, 0x00]
+}
+// set defaults
+window.FirebasePlugin.setDefaults(defaults);
+// or, specify a namespace
+window.FirebasePlugin.setDefaults(defaults, "namespace");
+```
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/package.json b/StoneIsland/plugins/cordova-plugin-firebase/package.json
new file mode 100644
index 00000000..90b5d164
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/package.json
@@ -0,0 +1,60 @@
+{
+ "_from": "cordova-plugin-firebase",
+ "_id": "cordova-plugin-firebase@0.1.24",
+ "_inBundle": false,
+ "_integrity": "sha1-qZk6XHZxFQJM2IIJDuiBT6TvuYQ=",
+ "_location": "/cordova-plugin-firebase",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "cordova-plugin-firebase",
+ "name": "cordova-plugin-firebase",
+ "escapedName": "cordova-plugin-firebase",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/cordova-plugin-firebase/-/cordova-plugin-firebase-0.1.24.tgz",
+ "_shasum": "a9993a5c767115024cd882090ee8814fa4efb984",
+ "_spec": "cordova-plugin-firebase",
+ "_where": "/Users/user/Sites/stone-island/StoneIsland/node_modules",
+ "author": {
+ "name": "Robert Arnesson"
+ },
+ "bugs": {
+ "url": "https://github.com/arnesson/cordova-plugin-firebase/issues"
+ },
+ "bundleDependencies": false,
+ "cordova": {
+ "id": "cordova-plugin-firebase",
+ "platforms": [
+ "android",
+ "ios",
+ "browser"
+ ]
+ },
+ "deprecated": false,
+ "description": "Cordova plugin for Google Firebase",
+ "homepage": "https://github.com/arnesson/cordova-plugin-firebase#readme",
+ "keywords": [
+ "ecosystem:cordova",
+ "cordova-android",
+ "cordova-ios",
+ "cordova-browser",
+ "firebase",
+ "push",
+ "notifications"
+ ],
+ "license": "MIT",
+ "name": "cordova-plugin-firebase",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/arnesson/cordova-plugin-firebase.git"
+ },
+ "version": "0.1.24"
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/plugin.xml b/StoneIsland/plugins/cordova-plugin-firebase/plugin.xml
new file mode 100644
index 00000000..c0cacd43
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/plugin.xml
@@ -0,0 +1,108 @@
+<?xml version='1.0' encoding='utf-8'?>
+<plugin id="cordova-plugin-firebase" version="0.1.24"
+xmlns="http://apache.org/cordova/ns/plugins/1.0"
+xmlns:android="http://schemas.android.com/apk/res/android">
+ <name>Google Firebase Plugin</name>
+
+ <license>MIT</license>
+
+ <engines>
+ <engine name="cordova" version=">=3.2.0" />
+ </engines>
+
+ <platform name="android">
+ <js-module name="FirebasePlugin" src="www/firebase.js">
+ <clobbers target="FirebasePlugin" />
+ </js-module>
+ <config-file parent="/*" target="res/xml/config.xml">
+ <feature name="FirebasePlugin">
+ <param name="android-package" value="org.apache.cordova.firebase.FirebasePlugin" />
+ <param name="onload" value="true" />
+ </feature>
+ </config-file>
+ <config-file parent="/resources" target="res/values/strings.xml">
+ <string name="google_app_id">@string/google_app_id</string>
+ </config-file>
+ <config-file parent="/resources" target="res/values/strings.xml">
+ <string name="google_api_key">@string/google_api_key</string>
+ </config-file>
+ <config-file target="AndroidManifest.xml" parent="/*">
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ </config-file>
+ <config-file target="AndroidManifest.xml" parent="/manifest/application">
+ <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementService" />
+ </config-file>
+ <config-file target="AndroidManifest.xml" parent="/manifest/application">
+ <service android:name="org.apache.cordova.firebase.FirebasePluginMessagingService">
+ <intent-filter>
+ <action android:name="com.google.firebase.MESSAGING_EVENT"/>
+ </intent-filter>
+ </service>
+ <service android:name="org.apache.cordova.firebase.FirebasePluginInstanceIDService">
+ <intent-filter>
+ <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
+ </intent-filter>
+ </service>
+ <receiver android:name="org.apache.cordova.firebase.OnNotificationOpenReceiver"></receiver>
+ </config-file>
+ <source-file src="src/android/google-services.json" target-dir="." />
+ <source-file src="src/android/FirebasePlugin.java" target-dir="src/org/apache/cordova/firebase" />
+ <source-file src="src/android/OnNotificationOpenReceiver.java" target-dir="src/org/apache/cordova/firebase" />
+ <source-file src="src/android/FirebasePluginInstanceIDService.java" target-dir="src/org/apache/cordova/firebase" />
+ <source-file src="src/android/FirebasePluginMessagingService.java" target-dir="src/org/apache/cordova/firebase" />
+ <source-file src="src/android/colors.xml" target-dir="res/values" />
+
+ <framework src="src/android/build.gradle" custom="true" type="gradleReference" />
+ <framework src="com.google.gms:google-services:+" />
+ <framework src="com.google.firebase:firebase-core:+" />
+ <framework src="com.google.firebase:firebase-messaging:+" />
+ <framework src="com.google.firebase:firebase-crash:+" />
+ <framework src="com.google.firebase:firebase-config:+" />
+ </platform>
+
+ <platform name="ios">
+ <js-module name="FirebasePlugin" src="www/firebase.js">
+ <clobbers target="FirebasePlugin" />
+ </js-module>
+ <config-file parent="/*" target="config.xml">
+ <feature name="FirebasePlugin">
+ <param name="ios-package" value="FirebasePlugin" />
+ <param name="onload" value="true" />
+ </feature>
+ </config-file>
+ <config-file parent="aps-environment" target="*/Entitlements-Debug.plist">
+ <string>development</string>
+ </config-file>
+ <config-file parent="aps-environment" target="*/Entitlements-Release.plist">
+ <string>production</string>
+ </config-file>
+
+ <resource-file src="src/ios/GoogleService-Info.plist" />
+
+ <header-file src="src/ios/AppDelegate+FirebasePlugin.h" />
+ <source-file src="src/ios/AppDelegate+FirebasePlugin.m" />
+ <header-file src="src/ios/FirebasePlugin.h" />
+ <source-file src="src/ios/FirebasePlugin.m" />
+
+ <header-file src="src/ios/Firebase/Firebase.h" />
+
+ <framework custom="true" src="src/ios/Firebase/Analytics/FirebaseAnalytics.framework" />
+ <framework custom="true" src="src/ios/Firebase/Analytics/FirebaseCore.framework" />
+ <framework custom="true" src="src/ios/Firebase/Analytics/FirebaseInstanceID.framework" />
+ <framework custom="true" src="src/ios/Firebase/Analytics/GoogleToolboxForMac.framework" />
+ <framework custom="true" src="src/ios/Firebase/Messaging/Protobuf.framework" />
+ <framework custom="true" src="src/ios/Firebase/Messaging/FirebaseMessaging.framework" />
+ <framework custom="true" src="src/ios/Firebase/Crash/FirebaseCrash.framework" />
+ <framework custom="true" src="src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework" />
+ </platform>
+
+ <platform name="browser">
+ <js-module name="FirebasePlugin" src="www/firebase-browser.js">
+ <clobbers target="FirebasePlugin" />
+ </js-module>
+ </platform>
+
+ <hook src="scripts/after_prepare.js" type="after_prepare" />
+</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/scripts/after_prepare.js b/StoneIsland/plugins/cordova-plugin-firebase/scripts/after_prepare.js
new file mode 100755
index 00000000..3f8406c2
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/scripts/after_prepare.js
@@ -0,0 +1,134 @@
+#!/usr/bin/env node
+'use strict';
+
+/**
+ * This hook makes sure projects using [cordova-plugin-firebase](https://github.com/arnesson/cordova-plugin-firebase)
+ * will build properly and have the required key files copied to the proper destinations when the app is build on Ionic Cloud using the package command.
+ * Credits: https://github.com/arnesson.
+ */
+var fs = require('fs');
+var path = require('path');
+
+fs.ensureDirSync = function (dir) {
+ if (!fs.existsSync(dir)) {
+ dir.split(path.sep).reduce(function (currentPath, folder) {
+ currentPath += folder + path.sep;
+ if (!fs.existsSync(currentPath)) {
+ fs.mkdirSync(currentPath);
+ }
+ return currentPath;
+ }, '');
+ }
+};
+
+var config = fs.readFileSync('config.xml').toString();
+var name = getValue(config, 'name');
+
+var IOS_DIR = 'platforms/ios';
+var ANDROID_DIR = 'platforms/android';
+
+var PLATFORM = {
+ IOS: {
+ dest: [
+ IOS_DIR + '/' + name + '/Resources/GoogleService-Info.plist',
+ IOS_DIR + '/' + name + '/Resources/Resources/GoogleService-Info.plist'
+ ],
+ src: [
+ 'GoogleService-Info.plist',
+ IOS_DIR + '/www/GoogleService-Info.plist',
+ 'www/GoogleService-Info.plist'
+ ]
+ },
+ ANDROID: {
+ dest: [
+ ANDROID_DIR + '/google-services.json'
+ ],
+ src: [
+ 'google-services.json',
+ ANDROID_DIR + '/assets/www/google-services.json',
+ 'www/google-services.json'
+ ],
+ stringsXml: ANDROID_DIR + '/res/values/strings.xml'
+ }
+};
+
+// Copy key files to their platform specific folders
+if (directoryExists(IOS_DIR)) {
+ copyKey(PLATFORM.IOS);
+} else if (directoryExists(ANDROID_DIR)) {
+ copyKey(PLATFORM.ANDROID, updateStringsXml)
+}
+
+function updateStringsXml(contents) {
+ var json = JSON.parse(contents);
+ var strings = fs.readFileSync(PLATFORM.ANDROID.stringsXml).toString();
+
+ // strip non-default value
+ strings = strings.replace(new RegExp('<string name="google_app_id">([^\@<]+?)</string>', 'i'), '');
+
+ // strip non-default value
+ strings = strings.replace(new RegExp('<string name="google_api_key">([^\@<]+?)</string>', 'i'), '');
+
+ // strip empty lines
+ strings = strings.replace(new RegExp('(\r\n|\n|\r)[ \t]*(\r\n|\n|\r)', 'gm'), '$1');
+
+ // replace the default value
+ strings = strings.replace(new RegExp('<string name="google_app_id">([^<]+?)</string>', 'i'), '<string name="google_app_id">' + json.client[0].client_info.mobilesdk_app_id + '</string>');
+
+ // replace the default value
+ strings = strings.replace(new RegExp('<string name="google_api_key">([^<]+?)</string>', 'i'), '<string name="google_api_key">' + json.client[0].api_key[0].current_key + '</string>');
+
+ fs.writeFileSync(PLATFORM.ANDROID.stringsXml, strings);
+}
+
+function copyKey(platform, callback) {
+ for (var i = 0; i < platform.src.length; i++) {
+ var file = platform.src[i];
+ if (fileExists(file)) {
+ try {
+ var contents = fs.readFileSync(file).toString();
+
+ try {
+ platform.dest.forEach(function (destinationPath) {
+ var folder = destinationPath.substring(0, destinationPath.lastIndexOf('/'));
+ fs.ensureDirSync(folder);
+ fs.writeFileSync(destinationPath, contents);
+ });
+ } catch (e) {
+ // skip
+ }
+
+ callback && callback(contents);
+ } catch (err) {
+ console.log(err)
+ }
+
+ break;
+ }
+ }
+}
+
+function getValue(config, name) {
+ var value = config.match(new RegExp('<' + name + '>(.*?)</' + name + '>', 'i'));
+ if (value && value[1]) {
+ return value[1]
+ } else {
+ return null
+ }
+}
+
+function fileExists(path) {
+ try {
+ return fs.statSync(path).isFile();
+ } catch (e) {
+ return false;
+ }
+}
+
+function directoryExists(path) {
+ try {
+ return fs.statSync(path).isDirectory();
+ } catch (e) {
+ return false;
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePlugin.java b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePlugin.java
new file mode 100755
index 00000000..7e4431df
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePlugin.java
@@ -0,0 +1,601 @@
+package org.apache.cordova.firebase;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.util.Base64;
+import android.util.Log;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.analytics.FirebaseAnalytics;
+import com.google.firebase.iid.FirebaseInstanceId;
+import com.google.firebase.messaging.FirebaseMessaging;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigInfo;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
+import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue;
+import com.google.firebase.crash.FirebaseCrash;
+import me.leolin.shortcutbadger.ShortcutBadger;
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class FirebasePlugin extends CordovaPlugin {
+
+ private FirebaseAnalytics mFirebaseAnalytics;
+ private final String TAG = "FirebasePlugin";
+ protected static final String KEY = "badge";
+
+ private static boolean inBackground = true;
+ private static ArrayList<Bundle> notificationStack = null;
+ private static CallbackContext notificationCallbackContext;
+ private static CallbackContext tokenRefreshCallbackContext;
+
+ @Override
+ protected void pluginInitialize() {
+ final Context context = this.cordova.getActivity().getApplicationContext();
+ final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
+ this.cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ Log.d(TAG, "Starting Firebase plugin");
+ mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
+ mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);
+ if (extras != null && extras.size() > 1) {
+ if (FirebasePlugin.notificationStack == null) {
+ FirebasePlugin.notificationStack = new ArrayList<Bundle>();
+ }
+ if (extras.containsKey("google.message_id")) {
+ extras.putBoolean("tap", true);
+ notificationStack.add(extras);
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (action.equals("getInstanceId")) {
+ this.getInstanceId(callbackContext);
+ return true;
+ } else if (action.equals("getToken")) {
+ this.getToken(callbackContext);
+ return true;
+ } else if (action.equals("hasPermission")) {
+ this.hasPermission(callbackContext);
+ return true;
+ } else if (action.equals("setBadgeNumber")) {
+ this.setBadgeNumber(callbackContext, args.getInt(0));
+ return true;
+ } else if (action.equals("getBadgeNumber")) {
+ this.getBadgeNumber(callbackContext);
+ return true;
+ } else if (action.equals("subscribe")) {
+ this.subscribe(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("unsubscribe")) {
+ this.unsubscribe(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("unregister")) {
+ this.unregister(callbackContext);
+ return true;
+ } else if (action.equals("onNotificationOpen")) {
+ this.onNotificationOpen(callbackContext);
+ return true;
+ } else if (action.equals("onTokenRefresh")) {
+ this.onTokenRefresh(callbackContext);
+ return true;
+ } else if (action.equals("logEvent")) {
+ this.logEvent(callbackContext, args.getString(0), args.getJSONObject(1));
+ return true;
+ } else if (action.equals("logError")) {
+ this.logError(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setScreenName")) {
+ this.setScreenName(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setUserId")) {
+ this.setUserId(callbackContext, args.getString(0));
+ return true;
+ } else if (action.equals("setUserProperty")) {
+ this.setUserProperty(callbackContext, args.getString(0), args.getString(1));
+ return true;
+ } else if (action.equals("activateFetched")) {
+ this.activateFetched(callbackContext);
+ return true;
+ } else if (action.equals("fetch")) {
+ if (args.length() > 0) this.fetch(callbackContext, args.getLong(0));
+ else this.fetch(callbackContext);
+ return true;
+ } else if (action.equals("getByteArray")) {
+ if (args.length() > 1) this.getByteArray(callbackContext, args.getString(0), args.getString(1));
+ else this.getByteArray(callbackContext, args.getString(0), null);
+ return true;
+ } else if (action.equals("getValue")) {
+ if (args.length() > 1) this.getValue(callbackContext, args.getString(0), args.getString(1));
+ else this.getValue(callbackContext, args.getString(0), null);
+ return true;
+ } else if (action.equals("getInfo")) {
+ this.getInfo(callbackContext);
+ return true;
+ } else if (action.equals("setConfigSettings")) {
+ this.setConfigSettings(callbackContext, args.getJSONObject(0));
+ return true;
+ } else if (action.equals("setDefaults")) {
+ if (args.length() > 1) this.setDefaults(callbackContext, args.getJSONObject(0), args.getString(1));
+ else this.setDefaults(callbackContext, args.getJSONObject(0), null);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onPause(boolean multitasking) {
+ FirebasePlugin.inBackground = true;
+ }
+
+ @Override
+ public void onResume(boolean multitasking) {
+ FirebasePlugin.inBackground = false;
+ }
+
+ @Override
+ public void onReset() {
+ FirebasePlugin.notificationCallbackContext = null;
+ FirebasePlugin.tokenRefreshCallbackContext = null;
+ }
+
+ private void onNotificationOpen(final CallbackContext callbackContext) {
+ FirebasePlugin.notificationCallbackContext = callbackContext;
+ if (FirebasePlugin.notificationStack != null) {
+ for (Bundle bundle : FirebasePlugin.notificationStack) {
+ FirebasePlugin.sendNotification(bundle);
+ }
+ FirebasePlugin.notificationStack.clear();
+ }
+ }
+
+ private void onTokenRefresh(final CallbackContext callbackContext) {
+ FirebasePlugin.tokenRefreshCallbackContext = callbackContext;
+
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String currentToken = FirebaseInstanceId.getInstance().getToken();
+
+ if (currentToken != null) {
+ FirebasePlugin.sendToken(currentToken);
+ }
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ public static void sendNotification(Bundle bundle) {
+ if (!FirebasePlugin.hasNotificationsCallback()) {
+ if (FirebasePlugin.notificationStack == null) {
+ FirebasePlugin.notificationStack = new ArrayList<Bundle>();
+ }
+ notificationStack.add(bundle);
+ return;
+ }
+ final CallbackContext callbackContext = FirebasePlugin.notificationCallbackContext;
+ if (callbackContext != null && bundle != null) {
+ JSONObject json = new JSONObject();
+ Set<String> keys = bundle.keySet();
+ for (String key : keys) {
+ try {
+ json.put(key, bundle.get(key));
+ } catch (JSONException e) {
+ callbackContext.error(e.getMessage());
+ return;
+ }
+ }
+
+ PluginResult pluginresult = new PluginResult(PluginResult.Status.OK, json);
+ pluginresult.setKeepCallback(true);
+ callbackContext.sendPluginResult(pluginresult);
+ }
+ }
+
+ public static void sendToken(String token) {
+ if (FirebasePlugin.tokenRefreshCallbackContext == null) {
+ return;
+ }
+ final CallbackContext callbackContext = FirebasePlugin.tokenRefreshCallbackContext;
+ if (callbackContext != null && token != null) {
+ PluginResult pluginresult = new PluginResult(PluginResult.Status.OK, token);
+ pluginresult.setKeepCallback(true);
+ callbackContext.sendPluginResult(pluginresult);
+ }
+ }
+
+ public static boolean inBackground() {
+ return FirebasePlugin.inBackground;
+ }
+
+ public static boolean hasNotificationsCallback() {
+ return FirebasePlugin.notificationCallbackContext != null;
+ }
+
+ @Override
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ final Bundle data = intent.getExtras();
+ if (data != null && data.containsKey("google.message_id")) {
+ data.putBoolean("tap", true);
+ FirebasePlugin.sendNotification(data);
+ }
+ }
+
+ // DEPRECTED - alias of getToken
+ private void getInstanceId(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String token = FirebaseInstanceId.getInstance().getToken();
+ callbackContext.success(token);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getToken(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String token = FirebaseInstanceId.getInstance().getToken();
+ callbackContext.success(token);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void hasPermission(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
+ boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();
+ JSONObject object = new JSONObject();
+ object.put("isEnabled", areNotificationsEnabled);
+ callbackContext.success(object);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setBadgeNumber(final CallbackContext callbackContext, final int number) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ SharedPreferences.Editor editor = context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
+ editor.putInt(KEY, number);
+ editor.apply();
+ ShortcutBadger.applyCount(context, number);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getBadgeNumber(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ Context context = cordova.getActivity();
+ SharedPreferences settings = context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
+ int number = settings.getInt(KEY, 0);
+ callbackContext.success(number);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void subscribe(final CallbackContext callbackContext, final String topic) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic(topic);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void unsubscribe(final CallbackContext callbackContext, final String topic) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseMessaging.getInstance().unsubscribeFromTopic(topic);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void unregister(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseInstanceId.getInstance().deleteInstanceId();
+ String currentToken = FirebaseInstanceId.getInstance().getToken();
+ if (currentToken != null) {
+ FirebasePlugin.sendToken(currentToken);
+ }
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void logEvent(final CallbackContext callbackContext, final String name, final JSONObject params) throws JSONException {
+ final Bundle bundle = new Bundle();
+ Iterator iter = params.keys();
+ while (iter.hasNext()) {
+ String key = (String) iter.next();
+ Object value = params.get(key);
+
+ if (value instanceof Integer || value instanceof Double) {
+ bundle.putFloat(key, ((Number) value).floatValue());
+ } else {
+ bundle.putString(key, value.toString());
+ }
+ }
+
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.logEvent(name, bundle);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void logError(final CallbackContext callbackContext, final String message) throws JSONException {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseCrash.report(new Exception(message));
+ callbackContext.success(1);
+ } catch (Exception e) {
+ FirebaseCrash.log(e.getMessage());
+ e.printStackTrace();
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setScreenName(final CallbackContext callbackContext, final String name) {
+ // This must be called on the main thread
+ cordova.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setCurrentScreen(cordova.getActivity(), name, null);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setUserId(final CallbackContext callbackContext, final String id) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setUserId(id);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setUserProperty(final CallbackContext callbackContext, final String name, final String value) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ mFirebaseAnalytics.setUserProperty(name, value);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void activateFetched(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ final boolean activated = FirebaseRemoteConfig.getInstance().activateFetched();
+ callbackContext.success(String.valueOf(activated));
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void fetch(CallbackContext callbackContext) {
+ fetch(callbackContext, FirebaseRemoteConfig.getInstance().fetch());
+ }
+
+ private void fetch(CallbackContext callbackContext, long cacheExpirationSeconds) {
+ fetch(callbackContext, FirebaseRemoteConfig.getInstance().fetch(cacheExpirationSeconds));
+ }
+
+ private void fetch(final CallbackContext callbackContext, final Task<Void> task) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ task.addOnCompleteListener(new OnCompleteListener<Void>() {
+ @Override
+ public void onComplete(Task<Void> task) {
+ callbackContext.success();
+ }
+ }).addOnFailureListener(new OnFailureListener() {
+ @Override
+ public void onFailure(Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ });
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getByteArray(final CallbackContext callbackContext, final String key, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ byte[] bytes = namespace == null ? FirebaseRemoteConfig.getInstance().getByteArray(key)
+ : FirebaseRemoteConfig.getInstance().getByteArray(key, namespace);
+ JSONObject object = new JSONObject();
+ object.put("base64", Base64.encodeToString(bytes, Base64.DEFAULT));
+ object.put("array", new JSONArray(bytes));
+ callbackContext.success(object);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getValue(final CallbackContext callbackContext, final String key, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseRemoteConfigValue value = namespace == null ? FirebaseRemoteConfig.getInstance().getValue(key)
+ : FirebaseRemoteConfig.getInstance().getValue(key, namespace);
+ callbackContext.success(value.asString());
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void getInfo(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ FirebaseRemoteConfigInfo remoteConfigInfo = FirebaseRemoteConfig.getInstance().getInfo();
+ JSONObject info = new JSONObject();
+
+ JSONObject settings = new JSONObject();
+ settings.put("developerModeEnabled", remoteConfigInfo.getConfigSettings().isDeveloperModeEnabled());
+ info.put("configSettings", settings);
+
+ info.put("fetchTimeMillis", remoteConfigInfo.getFetchTimeMillis());
+ info.put("lastFetchStatus", remoteConfigInfo.getLastFetchStatus());
+
+ callbackContext.success(info);
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setConfigSettings(final CallbackContext callbackContext, final JSONObject config) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ boolean devMode = config.getBoolean("developerModeEnabled");
+ FirebaseRemoteConfigSettings.Builder settings = new FirebaseRemoteConfigSettings.Builder()
+ .setDeveloperModeEnabled(devMode);
+ FirebaseRemoteConfig.getInstance().setConfigSettings(settings.build());
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private void setDefaults(final CallbackContext callbackContext, final JSONObject defaults, final String namespace) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ if (namespace == null)
+ FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults));
+ else
+ FirebaseRemoteConfig.getInstance().setDefaults(defaultsToMap(defaults), namespace);
+ callbackContext.success();
+ } catch (Exception e) {
+ callbackContext.error(e.getMessage());
+ }
+ }
+ });
+ }
+
+ private static Map<String, Object> defaultsToMap(JSONObject object) throws JSONException {
+ final Map<String, Object> map = new HashMap<String, Object>();
+
+ for (Iterator<String> keys = object.keys(); keys.hasNext(); ) {
+ String key = keys.next();
+ Object value = object.get(key);
+
+ if (value instanceof Integer) {
+ //setDefaults() should take Longs
+ value = new Long((Integer) value);
+ } else if (value instanceof JSONArray) {
+ JSONArray array = (JSONArray) value;
+ if (array.length() == 1 && array.get(0) instanceof String) {
+ //parse byte[] as Base64 String
+ value = Base64.decode(array.getString(0), Base64.DEFAULT);
+ } else {
+ //parse byte[] as numeric array
+ byte[] bytes = new byte[array.length()];
+ for (int i = 0; i < array.length(); i++)
+ bytes[i] = (byte) array.getInt(i);
+ value = bytes;
+ }
+ }
+
+ map.put(key, value);
+ }
+ return map;
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginInstanceIDService.java b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginInstanceIDService.java
new file mode 100755
index 00000000..96140f02
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginInstanceIDService.java
@@ -0,0 +1,26 @@
+package org.apache.cordova.firebase;
+
+import android.util.Log;
+
+import com.google.firebase.iid.FirebaseInstanceId;
+import com.google.firebase.iid.FirebaseInstanceIdService;
+
+
+public class FirebasePluginInstanceIDService extends FirebaseInstanceIdService {
+
+ private static final String TAG = "FirebasePlugin";
+
+ /**
+ * Called if InstanceID token is updated. This may occur if the security of
+ * the previous token had been compromised. Note that this is called when the InstanceID token
+ * is initially generated so this is where you would retrieve the token.
+ */
+ @Override
+ public void onTokenRefresh() {
+ // Get updated InstanceID token.
+ String refreshedToken = FirebaseInstanceId.getInstance().getToken();
+ Log.d(TAG, "Refreshed token: " + refreshedToken);
+
+ FirebasePlugin.sendToken(refreshedToken);
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
new file mode 100755
index 00000000..a42ce60e
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
@@ -0,0 +1,127 @@
+package org.apache.cordova.firebase;
+
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import android.app.Notification;
+import android.text.TextUtils;
+
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+
+import java.util.Map;
+import java.util.Random;
+
+public class FirebasePluginMessagingService extends FirebaseMessagingService {
+
+ private static final String TAG = "FirebasePlugin";
+
+ /**
+ * Called when message is received.
+ *
+ * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
+ */
+ @Override
+ public void onMessageReceived(RemoteMessage remoteMessage) {
+ // [START_EXCLUDE]
+ // There are two types of messages data messages and notification messages. Data messages are handled
+ // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
+ // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
+ // is in the foreground. When the app is in the background an automatically generated notification is displayed.
+ // When the user taps on the notification they are returned to the app. Messages containing both notification
+ // and data payloads are treated as notification messages. The Firebase console always sends notification
+ // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
+ // [END_EXCLUDE]
+
+ // TODO(developer): Handle FCM messages here.
+ // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
+ String title;
+ String text;
+ String id;
+ if (remoteMessage.getNotification() != null) {
+ title = remoteMessage.getNotification().getTitle();
+ text = remoteMessage.getNotification().getBody();
+ id = remoteMessage.getMessageId();
+ } else {
+ title = remoteMessage.getData().get("title");
+ text = remoteMessage.getData().get("text");
+ id = remoteMessage.getData().get("id");
+ }
+
+ if(TextUtils.isEmpty(id)){
+ Random rand = new Random();
+ int n = rand.nextInt(50) + 1;
+ id = Integer.toString(n);
+ }
+
+ Log.d(TAG, "From: " + remoteMessage.getFrom());
+ Log.d(TAG, "Notification Message id: " + id);
+ Log.d(TAG, "Notification Message Title: " + title);
+ Log.d(TAG, "Notification Message Body/Text: " + text);
+
+ // TODO: Add option to developer to configure if show notification when app on foreground
+ if (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title) || (!remoteMessage.getData().isEmpty())) {
+ boolean showNotification = (FirebasePlugin.inBackground() || !FirebasePlugin.hasNotificationsCallback()) && (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title));
+ sendNotification(id, title, text, remoteMessage.getData(), showNotification);
+ }
+ }
+
+ private void sendNotification(String id, String title, String messageBody, Map<String, String> data, boolean showNotification) {
+ Bundle bundle = new Bundle();
+ for (String key : data.keySet()) {
+ bundle.putString(key, data.get(key));
+ }
+ if (showNotification) {
+ Intent intent = new Intent(this, OnNotificationOpenReceiver.class);
+ intent.putExtras(bundle);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id.hashCode(), intent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
+ .setContentTitle(title)
+ .setContentText(messageBody)
+ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+ .setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody))
+ .setAutoCancel(true)
+ .setSound(defaultSoundUri)
+ .setContentIntent(pendingIntent);
+
+ int resID = getResources().getIdentifier("notification_icon", "drawable", getPackageName());
+ if (resID != 0) {
+ notificationBuilder.setSmallIcon(resID);
+ } else {
+ notificationBuilder.setSmallIcon(getApplicationInfo().icon);
+ }
+
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
+ {
+ int accentID = getResources().getIdentifier("accent", "color", getPackageName());
+ notificationBuilder.setColor(getResources().getColor(accentID, null));
+ }
+
+ Notification notification = notificationBuilder.build();
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
+ int iconID = android.R.id.icon;
+ int notiID = getResources().getIdentifier("notification_big", "drawable", getPackageName());
+ if (notification.contentView != null) {
+ notification.contentView.setImageViewResource(iconID, notiID);
+ }
+ }
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ notificationManager.notify(id.hashCode(), notification);
+ } else {
+ bundle.putBoolean("tap", false);
+ bundle.putString("title", title);
+ bundle.putString("body", messageBody);
+ FirebasePlugin.sendNotification(bundle);
+ }
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/OnNotificationOpenReceiver.java b/StoneIsland/plugins/cordova-plugin-firebase/src/android/OnNotificationOpenReceiver.java
new file mode 100644
index 00000000..a7f63757
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/OnNotificationOpenReceiver.java
@@ -0,0 +1,24 @@
+package org.apache.cordova.firebase;
+
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+public class OnNotificationOpenReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ PackageManager pm = context.getPackageManager();
+ Intent launchIntent = pm.getLaunchIntentForPackage(context.getPackageName());
+
+ launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ Bundle data = intent.getExtras();
+ data.putBoolean("tap", true);
+ FirebasePlugin.sendNotification(data);
+ launchIntent.putExtras(data);
+ context.startActivity(launchIntent);
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/build-extras.gradle b/StoneIsland/plugins/cordova-plugin-firebase/src/android/build-extras.gradle
new file mode 100755
index 00000000..67b387f5
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/build-extras.gradle
@@ -0,0 +1 @@
+apply plugin: 'com.google.gms.google-services' \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/build.gradle b/StoneIsland/plugins/cordova-plugin-firebase/src/android/build.gradle
new file mode 100755
index 00000000..d5cb4edd
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/build.gradle
@@ -0,0 +1,15 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.google.gms:google-services:3.0.0'
+ }
+}
+repositories {
+ mavenCentral()
+}
+dependencies {
+ compile 'me.leolin:ShortcutBadger:1.1.4@aar'
+ compile 'com.google.firebase:firebase-crash:+'
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/colors.xml b/StoneIsland/plugins/cordova-plugin-firebase/src/android/colors.xml
new file mode 100644
index 00000000..6f1665a5
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="primary">#FFFFFF00</color>
+ <color name="primary_dark">#FF220022</color>
+ <color name="accent">#FF00FFFF</color>
+</resources> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/google-services.json b/StoneIsland/plugins/cordova-plugin-firebase/src/android/google-services.json
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/google-services.json
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.h
new file mode 100755
index 00000000..210cbb65
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.h
@@ -0,0 +1,5 @@
+#import "AppDelegate.h"
+
+@interface AppDelegate (FirebasePlugin)
+@property (nonatomic, strong) NSNumber *applicationInBackground;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m
new file mode 100755
index 00000000..c4c45778
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m
@@ -0,0 +1,132 @@
+#import "AppDelegate+FirebasePlugin.h"
+#import "FirebasePlugin.h"
+#import "Firebase.h"
+#import <objc/runtime.h>
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@import UserNotifications;
+#endif
+
+// Implement UNUserNotificationCenterDelegate to receive display notification via APNS for devices
+// running iOS 10 and above. Implement FIRMessagingDelegate to receive data message via FCM for
+// devices running iOS 10 and above.
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@interface AppDelegate () <UNUserNotificationCenterDelegate, FIRMessagingDelegate>
+@end
+#endif
+
+#define kApplicationInBackgroundKey @"applicationInBackground"
+
+@implementation AppDelegate (FirebasePlugin)
+
++ (void)load {
+ Method original = class_getInstanceMethod(self, @selector(application:didFinishLaunchingWithOptions:));
+ Method swizzled = class_getInstanceMethod(self, @selector(application:swizzledDidFinishLaunchingWithOptions:));
+ method_exchangeImplementations(original, swizzled);
+}
+
+- (void)setApplicationInBackground:(NSNumber *)applicationInBackground {
+ objc_setAssociatedObject(self, kApplicationInBackgroundKey, applicationInBackground, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+- (NSNumber *)applicationInBackground {
+ return objc_getAssociatedObject(self, kApplicationInBackgroundKey);
+}
+
+- (BOOL)application:(UIApplication *)application swizzledDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ [self application:application swizzledDidFinishLaunchingWithOptions:launchOptions];
+
+ if(![FIRApp defaultApp]) {
+ [FIRApp configure];
+ }
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
+ name:kFIRInstanceIDTokenRefreshNotification object:nil];
+
+ self.applicationInBackground = @(YES);
+
+ return YES;
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ [self connectToFcm];
+ self.applicationInBackground = @(NO);
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ [[FIRMessaging messaging] disconnect];
+ self.applicationInBackground = @(YES);
+ NSLog(@"Disconnected from FCM");
+}
+
+- (void)tokenRefreshNotification:(NSNotification *)notification {
+ // Note that this callback will be fired everytime a new token is generated, including the first
+ // time. So if you need to retrieve the token as soon as it is available this is where that
+ // should be done.
+ NSString *refreshedToken = [[FIRInstanceID instanceID] token];
+ NSLog(@"InstanceID token: %@", refreshedToken);
+
+ // Connect to FCM since connection may have failed when attempted before having a token.
+ [self connectToFcm];
+
+ [FirebasePlugin.firebasePlugin sendToken:refreshedToken];
+}
+
+- (void)connectToFcm {
+ [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
+ if (error != nil) {
+ NSLog(@"Unable to connect to FCM. %@", error);
+ } else {
+ NSLog(@"Connected to FCM.");
+ NSString *refreshedToken = [[FIRInstanceID instanceID] token];
+ NSLog(@"InstanceID token: %@", refreshedToken);
+ }
+ }];
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
+ NSDictionary *mutableUserInfo = [userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
+ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+
+ NSDictionary *mutableUserInfo = [userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+- (void)userNotificationCenter:(UNUserNotificationCenter *)center
+ willPresentNotification:(UNNotification *)notification
+ withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
+ NSDictionary *mutableUserInfo = [notification.request.content.userInfo mutableCopy];
+
+ [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"];
+
+ // Pring full message.
+ NSLog(@"%@", mutableUserInfo);
+
+ [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo];
+}
+
+// Receive data message on iOS 10 devices.
+- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage {
+ // Print full message
+ NSLog(@"%@", [remoteMessage appData]);
+}
+#endif
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/FirebaseAnalytics b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/FirebaseAnalytics
new file mode 100755
index 00000000..61f61cd1
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/FirebaseAnalytics
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
new file mode 100755
index 00000000..e3ff4c12
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h
@@ -0,0 +1,57 @@
+#import <Foundation/Foundation.h>
+
+#import "FIRAnalytics.h"
+
+/**
+ * Provides App Delegate handlers to be used in your App Delegate.
+ *
+ * To save time integrating Firebase Analytics in an application, Firebase Analytics does not
+ * require delegation implementation from the AppDelegate. Instead this is automatically done by
+ * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App
+ * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting
+ * it to NO, and adding the methods in this category to corresponding delegation handlers.
+ *
+ * To handle Universal Links, you must return YES in
+ * [UIApplicationDelegate application:didFinishLaunchingWithOptions:].
+ */
+@interface FIRAnalytics (AppDelegate)
+
+/**
+ * Handles events related to a URL session that are waiting to be processed.
+ *
+ * For optimal use of Firebase Analytics, call this method from the
+ * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler]
+ * method of the app delegate in your app.
+ *
+ * @param identifier The identifier of the URL session requiring attention.
+ * @param completionHandler The completion handler to call when you finish processing the events.
+ * Calling this completion handler lets the system know that your app's user interface is
+ * updated and a new snapshot can be taken.
+ */
++ (void)handleEventsForBackgroundURLSession:(NSString *)identifier
+ completionHandler:(void (^)(void))completionHandler;
+
+/**
+ * Handles the event when the app is launched by a URL.
+ *
+ * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and
+ * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on iOS 8.x
+ * and below) in your app.
+ *
+ * @param url The URL resource to open. This resource can be a network resource or a file.
+ */
++ (void)handleOpenURL:(NSURL *)url;
+
+/**
+ * Handles the event when the app receives data associated with user activity that includes a
+ * Universal Link (on iOS 9.0 and above).
+ *
+ * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app
+ * delegate (on iOS 9.0 and above).
+ *
+ * @param userActivity The activity object containing the data associated with the task the user
+ * was performing.
+ */
++ (void)handleUserActivity:(id)userActivity;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
new file mode 100755
index 00000000..f5023f57
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalytics.h
@@ -0,0 +1,102 @@
+#import <Foundation/Foundation.h>
+
+#import "FIREventNames.h"
+#import "FIRParameterNames.h"
+#import "FIRUserPropertyNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The top level Firebase Analytics singleton that provides methods for logging events and setting
+/// user properties. See <a href="http://goo.gl/gz8SLz">the developer guides</a> for general
+/// information on using Firebase Analytics in your apps.
+@interface FIRAnalytics : NSObject
+
+/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have
+/// the same parameters. Up to 500 event names are supported. Using predefined events and/or
+/// parameters is recommended for optimal reporting.
+///
+/// The following event names are reserved and cannot be used:
+/// <ul>
+/// <li>app_clear_data</li>
+/// <li>app_remove</li>
+/// <li>app_update</li>
+/// <li>error</li>
+/// <li>first_open</li>
+/// <li>in_app_purchase</li>
+/// <li>notification_dismiss</li>
+/// <li>notification_foreground</li>
+/// <li>notification_open</li>
+/// <li>notification_receive</li>
+/// <li>os_update</li>
+/// <li>session_start</li>
+/// <li>user_engagement</li>
+/// </ul>
+///
+/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or
+/// underscores. The name must start with an alphabetic character. Some event names are
+/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_" prefix
+/// is reserved and should not be used. Note that event names are case-sensitive and that
+/// logging two events whose names differ only in case will result in two distinct events.
+/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has
+/// no parameters. Parameter names can be up to 40 characters long and must start with an
+/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString
+/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are
+/// supported. NSString parameter values can be up to 100 characters long. The "firebase_"
+/// prefix is reserved and should not be used for parameter names.
++ (void)logEventWithName:(NSString *)name
+ parameters:(nullable NSDictionary<NSString *, NSObject *> *)parameters;
+
+/// Sets a user property to a given value. Up to 25 user property names are supported. Once set,
+/// user property values persist throughout the app lifecycle and across sessions.
+///
+/// The following user property names are reserved and cannot be used:
+/// <ul>
+/// <li>first_open_time</li>
+/// <li>last_deep_link_referrer</li>
+/// <li>user_id</li>
+/// </ul>
+///
+/// @param value The value of the user property. Values can be up to 36 characters long. Setting the
+/// value to nil removes the user property.
+/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters
+/// or underscores and must start with an alphabetic character. The "firebase_" prefix is
+/// reserved and should not be used for user property names.
++ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name;
+
+/// Sets the user ID property. This feature must be used in accordance with
+/// <a href="https://www.google.com/policies/privacy">Google's Privacy Policy</a>
+///
+/// @param userID The user ID to ascribe to the user of this app on this device, which must be
+/// non-empty and no more than 36 characters long. Setting userID to nil removes the user ID.
++ (void)setUserID:(nullable NSString *)userID;
+
+/// Sets the current screen name, which specifies the current visual context in your app. This helps
+/// identify the areas in your app where users spend their time and how they interact with your app.
+///
+/// Note that screen reporting is enabled automatically and records the class name of the current
+/// UIViewController for you without requiring you to call this method. If you implement
+/// viewDidAppear in your UIViewController but do not call [super viewDidAppear:], that screen class
+/// will not be automatically tracked. The class name can optionally be overridden by calling this
+/// method in the viewDidAppear callback of your UIViewController and specifying the
+/// screenClassOverride parameter.
+///
+/// If your app does not use a distinct UIViewController for each screen, you should call this
+/// method and specify a distinct screenName each time a new screen is presented to the user.
+///
+/// The screen name and screen class remain in effect until the current UIViewController changes or
+/// a new call to setScreenName:screenClass: is made.
+///
+/// @param screenName The name of the current screen. Should contain 1 to 100 characters. Set to nil
+/// to clear the current screen name.
+/// @param screenClassOverride The name of the screen class. Should contain 1 to 100 characters. By
+/// default this is the class name of the current UIViewController. Set to nil to revert to the
+/// default class name.
++ (void)setScreenName:(nullable NSString *)screenName
+ screenClass:(nullable NSString *)screenClassOverride;
+
+/// The unique ID for this instance of the application.
++ (NSString *)appInstanceID;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h
new file mode 100755
index 00000000..dc227a4c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRAnalyticsConfiguration.h>
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRApp.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRApp.h
new file mode 100755
index 00000000..de24da17
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRApp.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRApp.h>
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRConfiguration.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRConfiguration.h
new file mode 100755
index 00000000..be2ff7bf
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRConfiguration.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIRConfiguration.h>
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h
new file mode 100755
index 00000000..3b40eecf
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIREventNames.h
@@ -0,0 +1,336 @@
+/// @file FIREventNames.h
+///
+/// Predefined event names.
+///
+/// An Event is an important occurrence in your app that you want to measure. You can report up to
+/// 500 different types of Events per app and you can associate up to 25 unique parameters with each
+/// Event type. Some common events are suggested below, but you may also choose to specify custom
+/// Event types that are associated with your specific app. Each event type is identified by a
+/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric
+/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_"
+/// prefix is reserved and should not be used.
+
+/// Add Payment Info event. This event signifies that a user has submitted their payment information
+/// to your app.
+static NSString *const kFIREventAddPaymentInfo = @"add_payment_info";
+
+/// E-Commerce Add To Cart event. This event signifies that an item was added to a cart for
+/// purchase. Add this event to a funnel with kFIREventEcommercePurchase to gauge the effectiveness
+/// of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must
+/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventAddToCart = @"add_to_cart";
+
+/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist.
+/// Use this event to identify popular gift items in your app. Note: If you supply the
+/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency
+/// parameter so that revenue metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventAddToWishlist = @"add_to_wishlist";
+
+/// App Open event. By logging this event when an App is moved to the foreground, developers can
+/// understand how often users leave and return during the course of a Session. Although Sessions
+/// are automatically reported, this event can provide further clarification around the continuous
+/// engagement of app-users.
+static NSString *const kFIREventAppOpen = @"app_open";
+
+/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of
+/// checking out. Add this event to a funnel with your kFIREventEcommercePurchase event to gauge the
+/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue
+/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue
+/// metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventBeginCheckout = @"begin_checkout";
+
+/// Campaign Detail event. Log this event to supply the referral details of a re-engagement
+/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource,
+/// kFIRParameterMedium or kFIRParameterCampaign. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSource (NSString)</li>
+/// <li>@c kFIRParameterMedium (NSString)</li>
+/// <li>@c kFIRParameterCampaign (NSString)</li>
+/// <li>@c kFIRParameterTerm (NSString) (optional)</li>
+/// <li>@c kFIRParameterContent (NSString) (optional)</li>
+/// <li>@c kFIRParameterAdNetworkClickID (NSString) (optional)</li>
+/// <li>@c kFIRParameterCP1 (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventCampaignDetails = @"campaign_details";
+
+/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log
+/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li>
+/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li>
+/// </ul>
+static NSString *const kFIREventEarnVirtualCurrency = @"earn_virtual_currency";
+
+/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note:
+/// This is different from the in-app purchase event, which is reported automatically for App
+/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also
+/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// <li>@c kFIRParameterTax (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterShipping (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCoupon (NSString) (optional)</li>
+/// <li>@c kFIRParameterLocation (NSString) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventEcommercePurchase = @"ecommerce_purchase";
+
+/// Generate Lead event. Log this event when a lead has been generated in the app to understand the
+/// efficacy of your install and re-engagement campaigns. Note: If you supply the
+/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency
+/// parameter so that revenue metrics can be computed accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventGenerateLead = @"generate_lead";
+
+/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use
+/// this event to analyze how popular certain groups or social features are in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterGroupID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventJoinGroup = @"join_group";
+
+/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can
+/// help you gauge the level distribution of your userbase and help you identify certain levels that
+/// are difficult to pass. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterCharacter (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventLevelUp = @"level_up";
+
+/// Login event. Apps with a login feature can report this event to signify that a user has logged
+/// in.
+static NSString *const kFIREventLogin = @"login";
+
+/// Post Score event. Log this event when the user posts a score in your gaming app. This event can
+/// help you understand how users are actually performing in your game and it can help you correlate
+/// high scores with certain audiences or behaviors. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterScore (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCharacter (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPostScore = @"post_score";
+
+/// Present Offer event. This event signifies that the app has presented a purchase offer to a user.
+/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge
+/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must
+/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed
+/// accurately. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPresentOffer = @"present_offer";
+
+/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded.
+/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the
+/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterTransactionID (NSString) (optional)</li>
+/// </ul>
+static NSString *const kFIREventPurchaseRefund = @"purchase_refund";
+
+/// Search event. Apps that support search features can use this event to contextualize search
+/// operations by supplying the appropriate, corresponding parameters. This event can help you
+/// identify the most popular content in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSearchTerm (NSString)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// hotel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventSearch = @"search";
+
+/// Select Content event. This general purpose event signifies that a user has selected some content
+/// of a certain type in an app. The content can be any object in your app. This event can help you
+/// identify popular content and categories of content in your app. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterContentType (NSString)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventSelectContent = @"select_content";
+
+/// Share event. Apps with social features can log the Share event to identify the most viral
+/// content. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterContentType (NSString)</li>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventShare = @"share";
+
+/// Sign Up event. This event indicates that a user has signed up for an account in your app. The
+/// parameter signifies the method by which the user signed up. Use this event to understand the
+/// different behaviors between logged in and logged out users. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSignUpMethod (NSString)</li>
+/// </ul>
+static NSString *const kFIREventSignUp = @"sign_up";
+
+/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can
+/// help you identify which virtual goods are the most popular objects of purchase. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterVirtualCurrencyName (NSString)</li>
+/// <li>@c kFIRParameterValue (signed 64-bit integer or double as NSNumber)</li>
+/// </ul>
+static NSString *const kFIREventSpendVirtualCurrency = @"spend_virtual_currency";
+
+/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use
+/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this
+/// process and move on to the full app experience.
+static NSString *const kFIREventTutorialBegin = @"tutorial_begin";
+
+/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding
+/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your
+/// on-boarding process.
+static NSString *const kFIREventTutorialComplete = @"tutorial_complete";
+
+/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your
+/// game. Since achievements generally represent the breadth of a gaming experience, this event can
+/// help you understand how many users are experiencing all that your game has to offer. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterAchievementID (NSString)</li>
+/// </ul>
+static NSString *const kFIREventUnlockAchievement = @"unlock_achievement";
+
+/// View Item event. This event signifies that some content was shown to the user. This content may
+/// be a product, a webpage or just a simple image or text. Use the appropriate parameters to
+/// contextualize the event. Use this event to discover the most popular items viewed in your app.
+/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the
+/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately.
+/// Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemID (NSString)</li>
+/// <li>@c kFIRParameterItemName (NSString)</li>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// <li>@c kFIRParameterItemLocationID (NSString) (optional)</li>
+/// <li>@c kFIRParameterPrice (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterQuantity (signed 64-bit integer as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterCurrency (NSString) (optional)</li>
+/// <li>@c kFIRParameterValue (double as NSNumber) (optional)</li>
+/// <li>@c kFIRParameterStartDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterEndDate (NSString) (optional)</li>
+/// <li>@c kFIRParameterFlightNumber (NSString) (optional) for travel bookings</li>
+/// <li>@c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional)
+/// for travel bookings</li>
+/// <li>@c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for
+/// travel bookings</li>
+/// <li>@c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for
+/// travel bookings</li>
+/// <li>@c kFIRParameterOrigin (NSString) (optional)</li>
+/// <li>@c kFIRParameterDestination (NSString) (optional)</li>
+/// <li>@c kFIRParameterSearchTerm (NSString) (optional) for travel bookings</li>
+/// <li>@c kFIRParameterTravelClass (NSString) (optional) for travel bookings</li>
+/// </ul>
+static NSString *const kFIREventViewItem = @"view_item";
+
+/// View Item List event. Log this event when the user has been presented with a list of items of a
+/// certain category. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterItemCategory (NSString)</li>
+/// </ul>
+static NSString *const kFIREventViewItemList = @"view_item_list";
+
+/// View Search Results event. Log this event when the user has been presented with the results of a
+/// search. Params:
+///
+/// <ul>
+/// <li>@c kFIRParameterSearchTerm (NSString)</li>
+/// </ul>
+static NSString *const kFIREventViewSearchResults = @"view_search_results";
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIROptions.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIROptions.h
new file mode 100755
index 00000000..126824b0
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIROptions.h
@@ -0,0 +1 @@
+#import <FirebaseCore/FIROptions.h>
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
new file mode 100755
index 00000000..a43e3473
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRParameterNames.h
@@ -0,0 +1,369 @@
+/// @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 40 characters long, may only contain alphanumeric
+/// characters and underscores ("_"), and must start with an alphabetic character. Param values can
+/// be up to 100 characters long. The "firebase_" prefix is reserved and should not be used.
+
+/// Game achievement ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterAchievementID : @"10_matches_won",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterAchievementID = @"achievement_id";
+
+/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterAdNetworkClickID : @"1234567",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterAdNetworkClickID = @"aclid";
+
+/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to
+/// capture campaign information, otherwise can be populated by developer. Highly Recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCampaign : @"winter_promotion",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCampaign = @"campaign";
+
+/// Character used in game (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCharacter : @"beat_boss",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCharacter = @"character";
+
+/// Campaign content (NSString).
+static NSString *const kFIRParameterContent = @"content";
+
+/// Type of content selected (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterContentType : @"news article",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterContentType = @"content_type";
+
+/// Coupon code for a purchasable item (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCoupon : @"zz123",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCoupon = @"coupon";
+
+/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign.
+/// Use varies by network.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCP1 : @"custom_data",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCP1 = @"cp1";
+
+/// Purchase currency in 3-letter <a href="http://en.wikipedia.org/wiki/ISO_4217#Active_codes">
+/// ISO_4217</a> format (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCurrency : @"USD",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterCurrency = @"currency";
+
+/// Flight or Travel destination (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterDestination : @"Mountain View, CA",
+/// // ...
+/// };
+/// </pre>
+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).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterEndDate : @"2015-09-14",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterEndDate = @"end_date";
+
+/// Flight number for travel events (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterFlightNumber : @"ZZ800",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterFlightNumber = @"flight_number";
+
+/// Group/clan/guild ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterGroupID : @"g1",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterGroupID = @"group_id";
+
+/// Item category (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemCategory : @"t-shirts",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemCategory = @"item_category";
+
+/// Item ID (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemID : @"p7654",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemID = @"item_id";
+
+/// The Google <a href="https://developers.google.com/places/place-id">Place ID</a> (NSString) that
+/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemLocationID = @"item_location_id";
+
+/// Item name (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterItemName : @"abc",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterItemName = @"item_name";
+
+/// Level in game (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterLevel : @(42),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterLevel = @"level";
+
+/// Location (NSString). The Google <a href="https://developers.google.com/places/place-id">Place ID
+/// </a> that corresponds to the associated event. Alternatively, you can supply your own custom
+/// Location ID.
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterLocation = @"location";
+
+/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterMedium : @"email",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterMedium = @"medium";
+
+/// Number of nights staying at hotel (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfNights : @(3),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfNights = @"number_of_nights";
+
+/// Number of passengers traveling (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfPassengers : @(11),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfPassengers = @"number_of_passengers";
+
+/// Number of rooms for travel events (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterNumberOfRooms : @(2),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterNumberOfRooms = @"number_of_rooms";
+
+/// Flight or Travel origin (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterOrigin : @"Mountain View, CA",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterOrigin = @"origin";
+
+/// Purchase price (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterPrice : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterPrice = @"price";
+
+/// Purchase quantity (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterQuantity : @(1),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterQuantity = @"quantity";
+
+/// Score in game (signed 64-bit integer as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterScore : @(4200),
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterScore = @"score";
+
+/// The search string/keywords used (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSearchTerm : @"periodic table",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSearchTerm = @"search_term";
+
+/// Shipping cost (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterShipping : @(9.50),
+/// kFIRParameterCurrency : @"USD", // e.g. $9.50 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterShipping = @"shipping";
+
+/// Sign up method (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSignUpMethod : @"google",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSignUpMethod = @"sign_up_method";
+
+/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban
+/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your
+/// property. Highly recommended (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSource : @"InMobi",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterSource = @"source";
+
+/// The departure date, check-in date or rental start date for the item. This should be in
+/// YYYY-MM-DD format (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterStartDate : @"2015-09-14",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterStartDate = @"start_date";
+
+/// Tax amount (double as NSNumber).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTax : @(1.0),
+/// kFIRParameterCurrency : @"USD", // e.g. $1.00 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTax = @"tax";
+
+/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTerm : @"game",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTerm = @"term";
+
+/// A single ID for a ecommerce group transaction (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTransactionID : @"ab7236dd9823",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterTransactionID = @"transaction_id";
+
+/// Travel class (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterTravelClass : @"business",
+/// // ...
+/// };
+/// </pre>
+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: Values for pre-defined currency-related events
+/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be
+/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is
+/// [-9,223,372,036,854.77, 9,223,372,036,854.77].
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterValue : @(3.99),
+/// kFIRParameterCurrency : @"USD", // e.g. $3.99 USD
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterValue = @"value";
+
+/// Name of virtual currency type (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRParameterVirtualCurrencyName = @"virtual_currency_name";
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h
new file mode 100755
index 00000000..54cf1c20
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
new file mode 100755
index 00000000..3142c97b
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h
@@ -0,0 +1,9 @@
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIROptions.h"
+#import "FIRAnalytics+AppDelegate.h"
+#import "FIRAnalytics.h"
+#import "FIREventNames.h"
+#import "FIRParameterNames.h"
+#import "FIRUserPropertyNames.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap
new file mode 100755
index 00000000..c9bd66bc
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseAnalytics.framework/Modules/module.modulemap
@@ -0,0 +1,10 @@
+framework module FirebaseAnalytics {
+ umbrella header "FirebaseAnalytics.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/FirebaseCore b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/FirebaseCore
new file mode 100755
index 00000000..364c6d67
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/FirebaseCore
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
new file mode 100755
index 00000000..667d5a4b
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h
@@ -0,0 +1,38 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * 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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRApp.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRApp.h
new file mode 100755
index 00000000..263c4bef
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRApp.h
@@ -0,0 +1,98 @@
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** A block that takes a BOOL and has no return value. */
+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.
+ *
+ * It is also possible to change the default logging level in code by calling setLoggerLevel: on
+ * the FIRConfiguration interface.
+ */
+@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 are no FIRApp instances. 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.
+ */
+- (void)deleteApp:(FIRAppVoidBoolCallback)completion;
+
+/**
+ * FIRApp instances should not be initialized directly. Call +[FIRApp configure],
+ * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly.
+ */
+- (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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRConfiguration.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRConfiguration.h
new file mode 100755
index 00000000..a25647b4
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRConfiguration.h
@@ -0,0 +1,52 @@
+#import <Foundation/Foundation.h>
+
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRLoggerLevel.h"
+
+/**
+ * The log levels used by FIRConfiguration.
+ */
+typedef NS_ENUM(NSInteger, FIRLogLevel) {
+ /** Error */
+ kFIRLogLevelError __deprecated = 0,
+ /** Warning */
+ kFIRLogLevelWarning __deprecated,
+ /** Info */
+ kFIRLogLevelInfo __deprecated,
+ /** Debug */
+ kFIRLogLevelDebug __deprecated,
+ /** Assert */
+ kFIRLogLevelAssert __deprecated,
+ /** Max */
+ kFIRLogLevelMax __deprecated = kFIRLogLevelAssert
+} DEPRECATED_MSG_ATTRIBUTE(
+ "Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. 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
+
+/** Returns the shared configuration object. */
++ (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 or setLoggerLevel. See FIRApp.h for more details.");
+
+/**
+ * Sets the logging level for internal Firebase logging. Firebase will only log messages
+ * that are logged at or below loggerLevel. The messages are logged both to the Xcode
+ * console and to the device's log. Note that if an app is running from AppStore, it will
+ * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose)
+ * setting.
+ *
+ * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice.
+ */
+- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRLoggerLevel.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRLoggerLevel.h
new file mode 100755
index 00000000..ddf683f7
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIRLoggerLevel.h
@@ -0,0 +1,12 @@
+/**
+ * The log levels used by internal logging.
+ */
+typedef NS_ENUM(NSInteger, FIRLoggerLevel) {
+ FIRLoggerLevelError = 3 /*ASL_LEVEL_ERR*/,
+ FIRLoggerLevelWarning = 4 /*ASL_LEVEL_WARNING*/,
+ FIRLoggerLevelNotice = 5 /*ASL_LEVEL_NOTICE*/,
+ FIRLoggerLevelInfo = 6 /*ASL_LEVEL_INFO*/,
+ FIRLoggerLevelDebug = 7 /*ASL_LEVEL_DEBUG*/,
+ FIRLoggerLevelMin = FIRLoggerLevelError,
+ FIRLoggerLevelMax = FIRLoggerLevelDebug
+};
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIROptions.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIROptions.h
new file mode 100755
index 00000000..083082ab
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FIROptions.h
@@ -0,0 +1,93 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * This class provides constant fields of Google APIs.
+ */
+@interface FIROptions : NSObject<NSCopying>
+
+/**
+ * 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 Project ID from the Firebase console, for example @"abc-xyz-123". Currently only populated
+ * when using [FIROptions defaultOptions].
+ */
+@property(nonatomic, readonly, copy) NSString *projectID;
+
+/**
+ * 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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FirebaseCore.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FirebaseCore.h
new file mode 100755
index 00000000..52a222f5
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Headers/FirebaseCore.h
@@ -0,0 +1,5 @@
+#import "FIRAnalyticsConfiguration.h"
+#import "FIRApp.h"
+#import "FIRConfiguration.h"
+#import "FIRLoggerLevel.h"
+#import "FIROptions.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Modules/module.modulemap
new file mode 100755
index 00000000..f3db90d8
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseCore.framework/Modules/module.modulemap
@@ -0,0 +1,8 @@
+framework module FirebaseCore {
+ umbrella header "FirebaseCore.h"
+ export *
+ module * { export *}
+ link "z"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/FirebaseInstanceID b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/FirebaseInstanceID
new file mode 100755
index 00000000..2ebc6e68
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/FirebaseInstanceID
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
new file mode 100755
index 00000000..5ff8372e
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
@@ -0,0 +1,245 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * @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 via
+ * `kFIRInstanceIDTokenRefreshNotification`.
+ *
+ * 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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
new file mode 100755
index 00000000..053ec2b1
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h
@@ -0,0 +1 @@
+#import "FIRInstanceID.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap
new file mode 100755
index 00000000..267c0356
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/FirebaseInstanceID.framework/Modules/module.modulemap
@@ -0,0 +1,7 @@
+framework module FirebaseInstanceID {
+ umbrella header "FirebaseInstanceID.h"
+ export *
+ module * { export *}
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMac b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMac
new file mode 100644
index 00000000..345b889c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Analytics/GoogleToolboxForMac.framework/GoogleToolboxForMac
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/FirebaseCrash b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/FirebaseCrash
new file mode 100755
index 00000000..7cf08c10
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/FirebaseCrash
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FIRCrashLog.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FIRCrashLog.h
new file mode 100755
index 00000000..ac446a62
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FIRCrashLog.h
@@ -0,0 +1,164 @@
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ap A variable argument list.
+ */
+FOUNDATION_EXTERN NS_FORMAT_FUNCTION(1, 0)
+void FIRCrashLogv(NSString *format, va_list ap);
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ... A comma-separated list of arguments to substitute into
+ * format.
+ *
+ * @see FIRCrashLogv(format, ap)
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2)
+void FIRCrashLog(NSString *format, ...) {
+ va_list ap;
+
+ va_start(ap, format);
+ FIRCrashLogv(format, ap);
+ va_end(ap);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system as
+ * well as <code>NSLog()</code>.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ap A variable argument list.
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 0)
+void FIRCrashNSLogv(NSString *format, va_list ap) {
+ va_list ap2;
+
+ va_copy(ap2, ap);
+ NSLogv(format, ap);
+ FIRCrashLogv(format, ap2);
+ va_end(ap2);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system as
+ * well as <code>NSLog()</code>.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. The recent logs will be sent with the crash
+ * report when the application exits abnormally. Note that the
+ * timestamp of this message and the timestamp of the console
+ * message may differ by a few milliseconds.
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @warning Raises an NSInvalidArgumentException if @p format is nil.
+ *
+ * @param format A format string.
+ *
+ * @param ... A comma-separated list of arguments to substitute into
+ * format.
+ *
+ * @see FIRCrashLogv(format, ap)
+ */
+FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2)
+void FIRCrashNSLog(NSString *format, ...) {
+ va_list ap;
+
+ va_start(ap, format);
+ FIRCrashNSLogv(format, ap);
+ va_end(ap);
+}
+
+/**
+ * @abstract Logs a message to the Firebase Crash Reporter system in
+ * a way that is easily called from Swift code.
+ *
+ * @discussion This method adds a message to the crash reporter
+ * logging system. Similar to FIRCrashLog, but with a call signature
+ * that is more Swift friendly. Unlike FIRCrashLog, callers
+ * use string interpolation instead of formatting arguments.
+ *
+ * @code
+ * public func mySwiftFunction() {
+ * let unexpected_number = 10;
+ * FIRCrashMessage("This number doesn't seem right: \(unexpected_number)");
+ * }
+ * @endcode
+ *
+ * Messages should be brief as the total size of the message payloads
+ * is limited by the uploader and may change between releases of the
+ * crash reporter. Excessively long messages will be truncated
+ * safely but that will introduce a delay in submitting the message.
+ *
+ * @param Message A log message
+ *
+ * @see FIRCrashLog(format, ...)
+ */
+FOUNDATION_STATIC_INLINE
+void FIRCrashMessage(NSString *message) {
+ FIRCrashLog(@"%@", message);
+}
+
+NS_ASSUME_NONNULL_END
+
+#ifdef FIRCRASH_REPLACE_NSLOG
+#if defined(DEBUG) || defined(FIRCRASH_LOG_TO_CONSOLE)
+#define NSLog(...) FIRCrashNSLog(__VA_ARGS__)
+#define NSLogv(...) FIRCrashNSLogv(__VA_ARGS__)
+#else
+#define NSLog(...) FIRCrashLog(__VA_ARGS__)
+#define NSLogv(...) FIRCrashLogv(__VA_ARGS__)
+#endif
+#endif
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FirebaseCrash.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FirebaseCrash.h
new file mode 100755
index 00000000..18659214
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Headers/FirebaseCrash.h
@@ -0,0 +1 @@
+#import "FIRCrashLog.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Modules/module.modulemap
new file mode 100755
index 00000000..537a790a
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/FirebaseCrash.framework/Modules/module.modulemap
@@ -0,0 +1,12 @@
+framework module FirebaseCrash {
+ umbrella header "FirebaseCrash.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "CoreTelephony"
+ link framework "Foundation"
+ link framework "SystemConfiguration"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/Protobuf.framework/Protobuf b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/Protobuf.framework/Protobuf
new file mode 100644
index 00000000..546e02ec
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/Protobuf.framework/Protobuf
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/batch-upload b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/batch-upload
new file mode 100755
index 00000000..053a3ee7
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/batch-upload
@@ -0,0 +1,416 @@
+#!/bin/bash
+
+usage () {
+ echo >&2 "usage: ${0##*/} [-hv] [-p google-service] [-i info] service-account-file {mach-o file|uuid} ..."
+}
+
+help () {
+ usage
+ cat >&2 <<EOF
+
+-h Show this help.
+-p Location of GoogleService-Info.plist.
+-i Location of Info.plist.
+-v Be verbose.
+
+account JSON file containing account information.
+mach-o A path to an executable, dSYM file, library,
+ or other Mach-O object.
+uuid A dSYM file's UUID (searches for the file).
+
+Processes one or more Mach-O files for use with the Firebase Crash
+Reporter. dSYM bundles may be specified by full path to the dSYM
+companion file (usually found under "DWARF") or by UUID.
+
+For applications and frameworks, please use the full path to the
+Mach-O file. For frameworks, this will be "Blah.framework/Blah".
+For applications, this will be "Blah.app/Blah".
+
+Useful environment variables:
+
+ SERVICE_PLIST - path to GoogleService-Info.plist (-p command-line option)
+ INFO_PLIST - path to Info.plist (-i command-line option)
+ DUMP_SYMS - path to dump_syms executable
+ FCR_BUNDLE_ID - CFBundleIdentifier (build version) from Info.plist
+ FCR_PROD_VERS - CFBundleShortVersionString from Info.plist
+ FIREBASE_API_KEY - API key from GoogleService-Info.plist
+ FIREBASE_APP_ID - App ID from GoogleService-Info.plist
+ SWIFT_DEMANGLE - path to swift-demangle executable
+
+Setting any of the above prevents this script from searching for the
+values. Specifically, the SERVICE_PLIST and INFO_PLIST files are not
+required if FCR_* and FIREBASE_* environment variables are not empty.
+
+EOF
+}
+
+KEEP_TEMPORARIES=false # mostly for debugging (not documented)
+
+while getopts hi:kp:v-: OPT; do
+ case ${OPT} in
+ h) help; exit 0;;
+ i) INFO_PLIST="${OPTARG}";;
+ k) KEEP_TEMPORARIES=true;;
+ p) SERVICE_PLIST="${OPTARG}";;
+ v) ((VERBOSE+=1));;
+ -) case "${OPTARG}" in
+ help) help; exit 0;;
+ info=*) INFO_PLIST="${OPTARG#info=}";;
+ service=*) SERVICE_PLIST="${OPTARG#service=}";;
+ verbose) ((VERBOSE+=1));;
+ *) usage; exit 2;;
+ esac;;
+ ?) usage; exit 2;;
+ esac
+done
+
+shift $((OPTIND - 1))
+
+. "$(dirname "$0")/upload-sym-util.bash"
+
+var_check () {
+ for VAR; do
+ if [[ "${!VAR}" =~ \$\(.*\) ]]; then
+ xcwarning "${VAR} (== \"${!VAR}\") appears to have unexpanded variables."
+ xcnote "Consider specifying it through an environment variable."
+ fi
+ done
+}
+
+SERVICE_ACCOUNT_FILE="$1"
+
+if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then
+ xcwarning "The first argument does not look like a service account file."
+ xcdebug "Will attempt to extract account file from legacy cache."
+ unset SERVICE_ACCOUNT_FILE
+else
+ shift
+fi
+
+if (( $# == 0 )); then
+ usage
+ exit 2
+fi
+
+if [[ "${INFO_PLIST}" && -f "${INFO_PLIST%/*}/GoogleService-Info.plist" ]]; then
+ : "${SERVICE_PLIST:="${INFO_PLIST%/*}/GoogleService-Info.plist"}"
+fi
+
+if [[ "${SERVICE_PLIST}" && -f "${SERVICE_PLIST%/*}/Info.plist" ]]; then
+ : "${INFO_PLIST:="${SERVICE_PLIST%/*}/Info.plist"}"
+fi
+
+xcdebug "SERVICE_PLIST = ${SERVICE_PLIST:="$(find . -name GoogleService-Info.plist | head -n1)"}"
+
+xcdebug "INFO_PLIST = ${INFO_PLIST:="$(find . -name Info.plist | head -n1)"}"
+
+if [[ -f "${SERVICE_PLIST}" ]]; then
+ xcdebug "FIREBASE_API_KEY = ${FIREBASE_API_KEY:="$(/usr/libexec/PlistBuddy -c 'print API_KEY' "${SERVICE_PLIST}")"}"
+ xcdebug "FIREBASE_APP_ID = ${FIREBASE_APP_ID:="$(/usr/libexec/PlistBuddy -c 'print GOOGLE_APP_ID' "${SERVICE_PLIST}")"}"
+ xcdebug "FCR_BUNDLE_ID = ${FCR_BUNDLE_ID:="$(/usr/libexec/PlistBuddy -c 'print BUNDLE_ID' "${SERVICE_PLIST}")"}"
+fi
+
+if [[ -f "${INFO_PLIST}" ]]; then
+ xcdebug "FCR_PROD_VERS = ${FCR_PROD_VERS:="$(/usr/libexec/PlistBuddy -c 'print CFBundleShortVersionString' "${INFO_PLIST}" 2>/dev/null)"}"
+fi
+
+var_check FCR_PROD_VERS FCR_BUNDLE_ID
+
+ERROR=$'environment variable empty or unset\n\nExplicitly add to environment or set GoogleService-Info.plist (-p)\nand Info.plist (-i) flags to extract values from the files.\n\nTry "'"$0"' -h" for details.'
+
+: "${FIREBASE_API_KEY:?"${ERROR}"}" "${FIREBASE_APP_ID:?"${ERROR}"}"
+: "${FCR_PROD_VERS:?"${ERROR}"}" "${FCR_BUNDLE_ID:?"${ERROR}"}"
+
+# Extract key from legacy cache.
+
+if [[ ! "${SERVICE_ACCOUNT_FILE}" ]]; then
+ xcwarning "Running extract-keys on desktop."
+ EXTRACT_KEYS="$(script_dir)/extract-keys"
+ (cd "${HOME}/Desktop"; "${EXTRACT_KEYS}") || exit $?
+ SERVICE_ACCOUNT_FILE="${HOME}/Desktop/${FIREBASE_APP_ID}.json"
+ xcdebug "Using ${SERVICE_ACCOUNT_FILE} as account file. Please move this and all other extracted keys to a safe place."
+fi
+
+if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then
+ echo >&2 "Unable to find service account file."
+ echo >&2
+ usage
+ exit 2
+fi
+
+# usage: extract_symbols_and_upload *dwarf-file* *arch* *exe-file*
+#
+# Do NOT use the dSYM bundle path. While it may work on occasion, it
+# is not guaranteed to do so; the full path to the DWARF companion
+# file will always work. (Discovered by Kerem Erkan.)
+#
+# If the executable is empty, use the DWARF companion file as a proxy
+# for the executable.
+extract_symbols_and_upload () {
+ local DWARF_COMPANION="$1" ARCH="$2" EXECUTABLE="$3"
+
+ if [[ ! "${EXECUTABLE}" ]]; then
+ xcdebug "No executable; using ${DWARF_COMPANION} as symbol source."
+
+ EXECUTABLE="${DWARF_COMPANION}"
+ unset DWARF_COMPANION
+ fi
+
+ [[ "${EXECUTABLE}" ]] || return 1
+
+ if [[ -x "${SWIFT_DEMANGLE:=$(xcrun --find swift-demangle 2>/dev/null)}" ]];
+ then
+ SWIFT_DEMANGLE_COMMAND="${SWIFT_DEMANGLE} -simplified"
+ else
+ SWIFT_DEMANGLE_COMMAND=/bin/cat
+ fi
+ fcr_mktemp SYMBOL_FILE
+
+ "${DUMP_SYMS:="$(script_dir)/dump_syms"}" -a "${ARCH}" ${DWARF_COMPANION:+-g "${DWARF_COMPANION}"} "${EXECUTABLE}" | ${SWIFT_DEMANGLE_COMMAND} >|"${SYMBOL_FILE}" || return $?
+
+ fcr_upload_files "${SYMBOL_FILE}" || return $?
+}
+
+# usage: is_executable *path*
+#
+# Check to see if the file is an executable or a dSYM bundle
+is_executable () {
+ [[ -f "$1" || ( -d "$1" && "${1%/}" == *.dSYM ) ]]
+}
+
+# usage: is_uuid *string*
+#
+# Verify that the argument is a UUID.
+is_uuid () {
+ [[ "$1" =~ ^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}$ ]]
+}
+
+# usage: set_uuids_archs *mach-o-file*
+#
+# side effect: appends to UUIDS, ARCHS
+#
+# Extract the uuid and architecture information from the given Mach-O
+# file and append the information to the UUIDS and ARCHS arrays.
+set_uuids_archs () {
+ eval "$(dwarfdump --uuid "$1" | awk '/^UUID:/ { print "UUIDS+=(" $2 "); ARCHS+=" $3 }')"
+}
+
+# usage: mdls_to_bash
+#
+# Convert the output of mdls to a string consumable by bash. mdls
+# outputs string arrays as quoted strings separated by commas, and
+# Unicode characters as '\Uxxxx'.
+#
+# Note: this is sensitive to the current locale. If the locale is not
+# UTF-8, then wide-character warnings will result if the strings
+# contain non-ASCII characters. This is actually a desired behavior,
+# because bash has issues with non-Unicode encodings for file names.
+# (The macOS default is to have UTF-8 enabled, so this should not be a
+# problem for the majority of use cases.)
+mdls_to_bash () {
+ perl -C -ple 's/,$//; s/\\U(....)/chr hex $1/ge'
+}
+
+for EXE; do
+ if is_executable "${EXE}"; then
+ xcdebug "Assuming ${EXE} is an executable or dSYM bundle."
+
+ # Import architecture UUID information
+ UUIDS=() ARCHS=()
+ set_uuids_archs "${EXE}"
+
+ for I in "${!UUIDS[@]}"; do
+ xcdebug "Found ${UUIDS[$I]} for ${ARCHS[$I]} in ${EXE}"
+ done
+
+ if ((${#UUIDS[*]} == 0)); then
+ xcwarning "${EXE} exists, but has no architecture information."
+ continue
+ fi
+
+ if [[ "${EXE}" = *.dSYM ]]; then
+ xcdebug "Removing dSYM bundle as executable target."
+ unset EXE
+ fi
+
+ elif is_uuid "${EXE}"; then
+ xcdebug "${EXE} looks like a UUID to me."
+ UUIDS=("${EXE}"); unset EXE
+
+ else
+ xcwarning "${EXE}: not an executable, bundle, or UUID."
+ continue
+ fi
+
+ BUNDLES=()
+
+ for UUID in "${UUIDS[@]}"; do
+ xcdebug "Searching for ${UUID} ..."
+
+ QUERY_UUID="com_apple_xcode_dsym_uuids == '${UUID}'"
+ QUERY_TYPE="kMDItemContentType == 'com.apple.xcode.dsym' || kMDItemContentType == 'com.apple.xcode.archive'"
+ QUERY="(${QUERY_UUID}) && (${QUERY_TYPE})"
+
+ if ((VERBOSE > 1)); then
+ xcnote "Passing query \"${QUERY}\" to mdfind."
+ fi
+
+ MD_FIND_RESULT=()
+
+ eval "$(mdfind "${QUERY}" -0 | xargs -0 perl -le 'print "MD_FIND_RESULT+=(\Q$_\E)" for @ARGV')"
+
+ xcdebug "mdfind returned (${MD_FIND_RESULT[*]})"
+
+ # BUNDLES should contain no duplicates.
+ for I in "${!MD_FIND_RESULT[@]}"; do
+ for BUNDLE in "${BUNDLES[@]}"; do
+ if [[ "${MD_FIND_RESULT[$I]}" == "$BUNDLE" ]]; then
+ unset "MD_FIND_RESULT[$I]"
+ fi
+ done
+ done
+
+ BUNDLES+=("${MD_FIND_RESULT[@]}")
+ done
+
+ if [[ ${#BUNDLES[@]} == 0 && ${#ARCHS[@]} == 0 ]]; then
+ xcwarning "No executable or bundle found for ${UUIDS[*]}."
+ xcnote "Try passing in the executable itself instead of a UUID."
+ continue
+ fi
+
+ xcdebug "BUNDLES = (${BUNDLES[*]})"
+
+ if [[ ${#BUNDLES[@]} == 0 ]]; then
+ xcdebug "No dSYM bundle found."
+
+ # The dSYM has to be on a normal volume (not temporary). It
+ # can, however, be shared among multiple executables.
+ if [[ ! "${SCRATCH_BUNDLE}" ]]; then
+ SCRATCH_BUNDLE="${HOME}/com.google.BatchUploadScratchFile.dSYM"
+ FCR_TEMPORARY_FILES+=("${SCRATCH_BUNDLE}")
+ fi
+
+ xcdebug "Creating one in ${SCRATCH_BUNDLE}"
+
+ BUNDLES=("${SCRATCH_BUNDLE}")
+
+ # Create the dSYM bundle. This may produce an empty dSYM
+ # bundle if the executable has no debugging information.
+ xcrun dsymutil -o "${BUNDLES[0]}" "${EXE}"; STATUS=$?
+
+ if ((STATUS)); then
+ xcwarning "Command dsymutil failed with exit code ${STATUS}."
+ continue
+ fi
+
+ # Import the dSYM bundle. There is a momentary delay between
+ # creating the bundle and having it indexed; explicitly
+ # importing guarantees the mds database is up-to-date when we
+ # ask it for information about UUIDs and paths.
+ mdimport "${SCRATCH_BUNDLE}"; STATUS=$?
+
+ if ((STATUS)); then
+ xcwarning "Command mdimport failed with exit code ${STATUS}."
+ continue
+ fi
+ fi
+
+ SEEN_ARCH=() SEEN_PATH=()
+
+ for BUNDLE in "${BUNDLES[@]}"; do
+ typeset -a BNDL_UUIDS BNDL_PATHS # keeps ShellLint happy
+
+ eval "BNDL_UUIDS=$(mdls -raw -name com_apple_xcode_dsym_uuids "${BUNDLE}" | mdls_to_bash)"
+ eval "BNDL_PATHS=$(mdls -raw -name com_apple_xcode_dsym_paths "${BUNDLE}" | mdls_to_bash)"
+
+ # Neither of these SHOULD occur, but curious things happen out
+ # in the field.
+ if ((${#BNDL_UUIDS[@]} != ${#BNDL_PATHS[@]})); then
+ xcwarning "${BUNDLE}: Malformed dSYM bundle."
+ continue
+ elif ((${#BNDL_UUIDS[@]} == 0)); then
+ xcwarning "${BUNDLE}: No DWARF information."
+ continue
+ fi
+
+ # If no executable was specified, then the UUIDS and ARCHS
+ # arrays are empty. Populate them with information from the
+ # bundle.
+ if [[ ! "${EXE}" ]]; then
+ # The final UUIDS setting will be the intersection of the
+ # discovered set and the originally specified UUIDS. This
+ # is to prevent uploading potentially private information.
+ SOUGHT_UUIDS=("${UUIDS[@]}")
+
+ UUIDS=() ARCHS=()
+ for BNDL_PATH in "${BNDL_PATHS[@]}"; do
+ set_uuids_archs "${BUNDLE}/${BNDL_PATH}"
+ done
+
+ if ((${#SOUGHT_UUIDS[@]})); then
+ for I in "${!UUIDS[@]}"; do
+ for UUID in "${SOUGHT_UUIDS[@]}"; do
+ if [[ "${UUIDS[$I]}" == "${UUID}" ]]; then
+ continue 2
+ fi
+ done
+
+ # This is not the DWARF you are looking for...
+ xcdebug "Rejecting ${UUIDS[$I]} (${ARCHS[$I]}) as candidate DWARF file."
+ unset "UUIDS[$I]" "ARCHS[$I]"
+ done
+ fi
+
+ unset SOUGHT_UUIDS
+ fi
+
+ for I in "${!BNDL_UUIDS[@]}"; do
+ # See comment on extract_symbols_and_upload for why the
+ # full path to the companion file is required.
+
+ BNDL_UUID="${BNDL_UUIDS[$I]}" DWARF_COMPANION="${BUNDLE}/${BNDL_PATHS[$I]}"
+
+ for J in "${!ARCHS[@]}"; do
+ # A dSYM bundle can contain multiple architectures for
+ # multiple applications. Make sure we get the right
+ # one.
+ if [[ "${BNDL_UUID}" == "${UUIDS[$J]}" ]]; then
+ ARCH="${ARCHS[$J]}"
+ break
+ fi
+ done
+
+ if [[ ! "${ARCH}" ]]; then
+ # This is not an error: it is legal for a dSYM bundle
+ # to contain debugging information for multiple
+ # executables (such as a framework with multiple
+ # subframeworks). Just ignore it.
+ xcdebug "No matching information found in ${DWARF_COMPANION} with UUID ${BNDL_UUID}."
+ continue
+ fi
+
+ xcdebug "Found ${UUID} for ${ARCH} in ${DWARF_COMPANION}"
+
+ # Have we already uploaded this file?
+ for J in "${!SEEN_ARCH[@]}"; do
+ if [[ "${ARCH}" == "${SEEN_ARCH[$J]}" ]] && cmp -s "${DWARF_COMPANION}" "${SEEN_PATH[$J]}"; then
+ xcdebug "${DWARF_COMPANION}: copy of ${SEEN_PATH[$J]}; no need to upload."
+ continue 2
+ fi
+ done
+
+ if [[ -f "${DWARF_COMPANION}" ]]; then
+ extract_symbols_and_upload "${DWARF_COMPANION}" "${ARCH}" "${EXE}" || exit $?
+ SEEN_ARCH+=("${ARCH}") SEEN_PATH+=("${DWARF_COMPANION}")
+ fi
+ done
+ done
+done
+
+# For debugging odd cases.
+if "${KEEP_TEMPORARIES}"; then
+ FCR_TEMPORARY_FILES=()
+fi
+
+echo "Done."
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/dump_syms b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/dump_syms
new file mode 100755
index 00000000..8d0ef781
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/dump_syms
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/extract-keys b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/extract-keys
new file mode 100755
index 00000000..0da57003
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/extract-keys
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+PLIST="${HOME}/Library/Preferences/com.google.SymbolUpload.plist"
+
+[[ -f $PLIST ]] || exit
+
+defaults read com.google.SymbolUpload |
+perl -nle '/"(app_\d+_\d+_ios_.*)"/ and print $1' |
+while read KEY; do
+ APP_ID="${KEY#app_}"; APP_ID="${APP_ID//_/:}"
+ plutil -extract "${KEY}" json -o "${APP_ID}.json" "${PLIST}"
+done
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym
new file mode 100755
index 00000000..1f8327dc
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym
@@ -0,0 +1,273 @@
+#!/bin/bash
+
+usage () {
+ echo >&2 "usage: $0 [-h] [-v] [-w|-e] service-account-file"
+}
+
+help () {
+ usage
+
+ cat >&2 <<EOF
+
+ -h This message.
+ -v Increase verbosity. Multiple -v options will provide
+ increasing details. Use at least '-vv' when reporting bugs.
+ -w Treat errors as warnings. Does not change the exit status.
+ -e Treat warnings as errors. Does not change the exit status.
+
+The service account private key file is downloaded from the Firebase
+console. See
+
+ https://firebase.google.com/docs/crash/ios#upload_symbol_files
+
+for details on retrieving this file. Older keys may still be in the
+registry. Consider using extract-keys.pl to retrieve them.
+
+Execute this script in the final phase of your build. It will not
+work outside of Xcode, and should warn you if you try. See the
+batch-upload script included in this distribution to upload symbols
+outside of an Xcode build.
+
+Here is an example Run Script Phase you can add to your project
+to invoke this script:
+
+ "\${PODS_ROOT}/FirebaseCrashReporting/upload-sym" \\
+ "\${HOME}/Library/Developer/My Project-1fad0d0767b42e.json"
+
+To avoid stopping the build should the upload fail,
+
+ "\${PODS_ROOT}/FirebaseCrashReporting/upload-sym" -w \\
+ "\${HOME}/Library/Developer/My Project-1fad0d0767b42e.json"
+ exit 0 # claim success no matter what
+
+EOF
+}
+
+# Parse optional command-line flags.
+
+VERBOSE=0 WARNINGS_ONLY=0 ERRORS_ONLY=0
+
+while getopts ehvw OPT; do
+ case "${OPT}" in
+ h) help; exit 0;;
+ v) VERBOSE=$((VERBOSE + 1));;
+ w) WARNINGS_ONLY=1;;
+ e) ERRORS_ONLY=1;;
+ ?) usage; exit 2;;
+ esac
+done
+
+shift $((OPTIND - 1))
+
+if ((WARNINGS_ONLY && ERRORS_ONLY)); then
+ echo >&2 "Either -w or -e may be specified, but not both."
+ echo >&2
+ usage
+ exit 2
+fi
+
+SERVICE_ACCOUNT_FILE="$1"; shift
+
+if (($#)); then
+ echo >&2 "Unexpected argument '$1'"
+ echo >&2
+ usage
+ exit 2
+fi
+
+export PATH=/bin:/usr/bin # play it safe
+
+# Load common utility routines.
+
+. "$(dirname "$0")/upload-sym-util.bash"
+
+# Make the error output Xcode-friendly.
+
+# This is a bit of Bash voodoo that cries for an explanation and is
+# horribly underdocumented on-line. The construct '>(...)' starts a
+# subprocess with its stdin connected to a pipe. After starting the
+# subprocess, the parser replaces the construct with the NAME of the
+# writable end of the pipe as a named file descriptor '/dev/fd/XX',
+# then reevaluates the line. So, after the subprocess is started
+# (which filters stdin and outputs to stderr [not stdout]), the line
+# "exec 2> /dev/fd/XX" is evaluated. This redirects the main
+# process's stderr to the given file descriptor.
+#
+# The end result is that anything sent to stderr of the form:
+# file.in: line 47: blah blah
+# is replaced with
+# file.in:47: error: blah blah
+# which Xcode will detect and emphasize in the formatted output.
+
+exec 2> >(sed -e 's/: line \([0-9]*\):/:\1: error:/' >&2)
+
+# Be long-winded about problems. The user may not understand how this
+# script works or what prerequisites it has. If the user sees this,
+# it is likely that they are executing the script outside of an Xcode
+# build.
+
+ERRMSG=$'Value missing\n\nThis script must be executed as part of an Xcode build stage to have the\nproper environment variables set.'
+
+# Locate Xcode-generated files.
+
+: "${TARGET_BUILD_DIR:?"${ERRMSG}"}"
+: "${FULL_PRODUCT_NAME:?"${ERRMSG}"}"
+
+DSYM_BUNDLE="${DWARF_DSYM_FOLDER_PATH?"${ERRMSG}"}/${DWARF_DSYM_FILE_NAME?"${ERRMSG}"}"
+[[ -e "${DSYM_BUNDLE}" ]] || unset DSYM_BUNDLE
+
+EXECUTABLE="${TARGET_BUILD_DIR?"${ERRMSG}"}/${EXECUTABLE_PATH?"${ERRMSG}"}"
+
+# Locate dump_syms utility.
+
+if ! [[ -f "${FCR_DUMP_SYMS:=$(script_dir)/dump_syms}" && -x "${FCR_DUMP_SYMS}" ]]; then
+ xcerror "Cannot find dump_syms."
+ xcnote "It should have been installed with the Cocoapod. The location of dump_syms can be explicitly set using the environment variable FCR_DUMP_SYMS if you are using a non-standard install."
+
+ exit 2
+fi
+
+if [[ ! "${FIREBASE_API_KEY}" || ! "${FIREBASE_APP_ID}" ]]; then
+ : "${SERVICE_PLIST:="$(find "${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}" -name GoogleService-Info.plist | head -n1)"}"
+ : "${SERVICE_PLIST:?"GoogleService-Info.plist could not be located"}"
+ : "${FIREBASE_API_KEY:="$(property API_KEY "${SERVICE_PLIST}")"}"
+ : "${FIREBASE_APP_ID:="$(property GOOGLE_APP_ID "${SERVICE_PLIST}")"}"
+fi
+
+if ! [[ "${FIREBASE_API_KEY}" ]]; then
+ xcerror "Unable to get API_KEY from ${SERVICE_PLIST}."
+ xcnote "Specify FIREBASE_API_KEY in environment."
+ exit 2
+fi
+
+if ! [[ "${FIREBASE_APP_ID}" ]]; then
+ xcerror "Unable to get GOOGLE_APP_ID from ${SERVICE_PLIST}."
+ xcnote "Specify FIREBASE_APP_ID in environment."
+ exit 2
+fi
+
+# Load Info.plist values (Bundle ID & version)
+
+INFOPLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
+
+if [[ -f "${INFOPLIST}" ]]; then
+ : "${FCR_PROD_VERS:="$(property CFBundleShortVersionString "${INFOPLIST}")"}"
+ : "${FCR_BUNDLE_ID:="$(property CFBundleIdentifier "${INFOPLIST}")"}"
+fi
+
+if ! [[ "${FCR_PROD_VERS}" ]]; then
+ xcerror "Unable to get CFBundleShortVersionString from Info.plist."
+ xcnote "Specify FCR_PROD_VERS in environment."
+ exit 2
+fi
+
+if ! [[ "${FCR_BUNDLE_ID}" ]]; then
+ xcerror "Unable to get CFBundleIdentifier from Info.plist."
+ xcnote "Specify FCR_BUNDLE_ID in environment."
+ exit 2
+fi
+
+# Support legacy account file cache before giving up
+
+if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then
+ xcwarning "Unable to find service account JSON file: ${SERVICE_ACCOUNT_FILE}"
+ "Please ensure you've followed the steps at:"
+ "https://firebase.google.com/docs/crash/ios#upload_symbol_files"
+
+ xcdebug "Trying to extract JSON file from cache."
+
+ CACHE_PLIST="${HOME}/Library/Preferences/com.google.SymbolUpload.plist"
+
+ if [[ -f "${CACHE_PLIST}" ]]; then
+ fcr_mktemp SERVICE_ACCOUNT_FILE
+ /usr/bin/plutil -extract "app_${FIREBASE_APP_ID//:/_}" \
+ json -o "${SERVICE_ACCOUNT_FILE}" "${CACHE_PLIST}" >/dev/null 2>&1
+ if [[ ! -s "${SERVICE_ACCOUNT_FILE}" ]]; then
+ xcwarning "${FIREBASE_APP_ID} not found in cache."
+ /bin/rm -f "${SERVICE_ACCOUNT_FILE}"
+ else
+ xcnote "${FIREBASE_APP_ID} found in cache. Consider using extract-keys.pl to reduce reliance on cache."
+ fi
+ else
+ xcnote "No cache file found."
+ fi
+fi
+
+if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then
+ xcerror "All attempts to find the service account JSON file have failed."
+ xcnote "You must supply it on the command line."
+ echo >&2 -n "$0:1: note: "; usage
+ exit 2
+fi
+
+# Dump collected information if requested
+
+if ((VERBOSE >= 2)); then
+ xcnote "FIREBASE_API_KEY = ${FIREBASE_API_KEY}"
+ xcnote "FIREBASE_APP_ID = ${FIREBASE_APP_ID}"
+ xcnote "DSYM_BUNDLE = ${DSYM_BUNDLE:-(unset, will use symbols in executable)}"
+ xcnote "EXECUTABLE = ${EXECUTABLE}"
+ xcnote "INFOPLIST = ${INFOPLIST}"
+ xcnote "FCR_PROD_VERS = ${FCR_PROD_VERS}"
+ xcnote "FCR_BUNDLE_ID = ${FCR_BUNDLE_ID}"
+fi
+
+# Create and upload symbol files for each architecture
+if [[ -x "${SWIFT_DEMANGLE:=$(xcrun --find swift-demangle 2>/dev/null)}" ]]; then
+ SWIFT_DEMANGLE_COMMAND="${SWIFT_DEMANGLE} -simplified"
+else
+ SWIFT_DEMANGLE_COMMAND=/bin/cat
+fi
+
+for ARCH in ${ARCHS?:}; do
+ SYMBOL_FILE="SYMBOL_FILE_${ARCH}"
+ fcr_mktemp "${SYMBOL_FILE}" SCRATCH
+
+ # Just because there is a dSYM bundle at that path does not mean
+ # it is the RIGHT dSYM bundle...
+
+ if [[ -d "${DSYM_BUNDLE}" ]]; then
+ DSYM_UUID="$(dwarfdump --arch "${ARCH}" --uuid "${DSYM_BUNDLE}" | awk '{print $2}')"
+ EXE_UUID="$(dwarfdump --arch "${ARCH}" --uuid "${EXECUTABLE}" | awk '{print $2}')"
+ if ((VERBOSE > 1)); then
+ xcnote "dSYM bundle UUID: ${DSYM_UUID}"
+ xcnote "Executable UUID: ${EXE_UUID}"
+ fi
+ if [[ "${DSYM_UUID}" != "${EXE_UUID}" ]]; then
+ xcdebug "Current dSYM bundle is not valid."
+ unset DSYM_BUNDLE
+ fi
+ fi
+
+ if [[ ! -d "${DSYM_BUNDLE}" ]]; then
+ xcdebug "Extracting dSYM from executable."
+ fcr_mktempdir TMP_DSYM
+ DSYM_BUNDLE="${TMP_DSYM}/${EXECUTABLE##*/}.dSYM"
+ xcrun dsymutil -o "${DSYM_BUNDLE}" "${EXECUTABLE}"
+ STATUS=$?
+ if ((STATUS)); then
+ xcerror "Command dsymutil failed with exit code ${STATUS}."
+ exit ${STATUS}
+ fi
+ fi
+
+ "${FCR_DUMP_SYMS}" -a "${ARCH}" -g "${DSYM_BUNDLE}" "${EXECUTABLE}" >"${SCRATCH}" 2> >(sed -e 's/^/warning: dump_syms: /' | grep -v 'failed to demangle' >&2)
+
+ STATUS=$?
+ if ((STATUS)); then
+ xcerror "Command dump_syms failed with exit code ${STATUS}."
+ exit ${STATUS}
+ fi
+
+ ${SWIFT_DEMANGLE_COMMAND} <"${SCRATCH}" >|"${!SYMBOL_FILE}" || exit 1
+
+ if ((VERBOSE >= 2)); then
+ xcnote "${EXECUTABLE##*/} (architecture ${ARCH}) symbol dump follows (first 20 lines):"
+ head >&2 -n20 "${!SYMBOL_FILE}"
+ elif ((VERBOSE >= 1)); then
+ xcnote "${EXECUTABLE##*/} (architecture ${ARCH}) symbol dump follows (first line only):"
+ head >&2 -n1 "${!SYMBOL_FILE}"
+ fi
+
+ fcr_upload_files "${!SYMBOL_FILE}" || exit 1
+done
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym-util.bash b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym-util.bash
new file mode 100644
index 00000000..a8f8c655
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym-util.bash
@@ -0,0 +1,382 @@
+# Output a clickable message. This will not count as a warning or
+# error.
+
+xcnote () {
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: note: $*"
+}
+
+# Output a clickable message prefixed with a warning symbol (U+26A0)
+# and highlighted yellow. This will increase the overall warning
+# count. A non-zero value for the variable ERRORS_ONLY will force
+# warnings to be treated as errors.
+
+if ((ERRORS_ONLY)); then
+ xcwarning () {
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: error: $*"
+ }
+else
+ xcwarning () {
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: warning: $*"
+ }
+fi
+
+# Output a clickable message prefixed with a halt symbol (U+1F6D1) and
+# highlighted red. This will increase the overall error count. Xcode
+# will flag the build as failed if the error count is non-zero at the
+# end of the build, even if this script returns a successful exit
+# code. Set WARNINGS_ONLY to non-zero to prevent this.
+
+if ((WARNINGS_ONLY)); then
+ xcerror () {
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: warning: $*"
+ }
+else
+ xcerror () {
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: error: $*"
+ }
+fi
+
+xcdebug () {
+ if ((VERBOSE)); then
+ echo >&2 "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: note: $*"
+ fi
+}
+
+# Locate the script directory.
+
+script_dir () {
+ local SCRIPT="$0" SCRIPT_DIR="$(dirname "$0")"
+
+ while SCRIPT="$(readlink "${SCRIPT}")"; do
+ [[ "${SCRIPT}" != /* ]] && SCRIPT="${SCRIPT_DIR}/${SCRIPT}"
+ SCRIPT_DIR="$(dirname "${SCRIPT}")"
+ done
+
+ ( cd "${SCRIPT_DIR}"; pwd -P )
+}
+
+# Timestamp needed for various operations. Does not need to be exact,
+# but does need to be consistent across web service calls.
+
+readonly NOW="$(/bin/date +%s)"
+
+# All files created by fcr_mktemp will be listed in FCR_TEMPORARY_FILES.
+# Delete these when the enclosing script exits. (You may manually
+# add files to this array as well to have them cleaned up on exit.)
+
+typeset -a FCR_TEMPORARY_FILES
+trap 'STATUS=$?; rm -rf "${FCR_TEMPORARY_FILES[@]}"; exit ${STATUS}' 0 1 2 15
+
+# Create a temporary file and add it to the list of files to delete when the
+# script finishes.
+#
+# usage: fcr_mktemp VARNAME...
+
+fcr_mktemp () {
+ for VAR; do
+ eval "${VAR}=\$(mktemp -t com.google.FIRCrash) || return 1"
+ FCR_TEMPORARY_FILES+=("${!VAR}")
+ done
+}
+
+# Create a temporary directory and add it to the list of files to
+# delete when the script finishes.
+#
+# usage: fcr_mktempdir VARNAME...
+
+fcr_mktempdir () {
+ for VAR; do
+ eval "${VAR}=\$(mktemp -d -t com.google.FIRCrash) || return 1"
+ FCR_TEMPORARY_FILES+=("${!VAR}")
+ done
+}
+
+# The keys we care about in the JSON objects. There are others that
+# we do not use. Note that 'expires_at' and 'app_id' are not part of
+# the original payload, but are computed from the environment used to
+# make the call.
+
+FCR_SVC_KEYS=(client_email private_key private_key_id token_uri type)
+FCR_TOK_KEYS=(access_token expires_at token_type app_id)
+
+# Extract a value from the property list.
+#
+# usage: property *name* *file*
+
+property () {
+ [[ -f "$2" ]] || echo '{}' >|"$2" # keeps PlistBuddy quiet
+ /usr/libexec/PlistBuddy "$2" -c "Print :$1" 2>/dev/null
+}
+
+# Retrieve the property from the service account property list.
+#
+# usage: svc_property *name*
+
+svc_property () {
+ property "$1" "${SVC_PLIST}"
+}
+
+# Does the same as svc_property above but for the token cache
+# property list.
+#
+# usage: tok_property *name*
+
+tok_property () {
+ property "$1" "${TOK_PLIST}"
+}
+
+# Verify that the service account property list has values for the
+# required keys. Does not check the values themselves.
+
+fcr_verify_svc_plist () {
+ for key in "${FCR_SVC_KEYS[@]}"; do
+ if ! svc_property "${key}" >/dev/null; then
+ xcdebug "${key} not found in ${SVC_PLIST}. Service account invalid."
+ return 1
+ fi
+ done
+}
+
+# Verify that the token cache property list has values for the
+# required keys. If the token_type is incorrect, the expiration date
+# has been passed, or the application id does not match, return
+# failure.
+
+fcr_verify_tok_plist () {
+ for key in "${FCR_TOK_KEYS[@]}"; do
+ if ! tok_property "${key}" >/dev/null; then
+ xcdebug "${key} not found in ${TOK_PLIST}. Token invalid."
+ return 1
+ fi
+ done
+
+ if [[ "$(tok_property token_type)" != "Bearer" ]]; then
+ xcwarning "Invalid token type '$(tok_property token_type)'."
+ return 1
+ fi
+
+ if (($(tok_property expires_at) <= NOW)); then
+ xcdebug "Token well-formed but expired at $(date -jf %s "$(tok_property expires_at)")."
+ echo '{}' >|"${TOK_PLIST}"
+ return 1
+ fi
+
+ if [[ "$(tok_property app_id)" != "${FIREBASE_APP_ID}" ]]; then
+ xcdebug "Cached token is for a different application."
+ echo '{}' >|"${TOK_PLIST}"
+ return 1
+ fi
+}
+
+# Convert a JSON certificate file to a PList certificate file.
+#
+# usage: fcr_load_certificate VARNAME
+
+fcr_load_certificate () {
+ : "${SERVICE_ACCOUNT_FILE:?must be the path to the service account JSON file.}"
+ fcr_mktemp "$1"
+
+ if ! /usr/bin/plutil -convert binary1 "${SERVICE_ACCOUNT_FILE}" -o "${!1}"; then
+ xcerror "Unable to read service account file ${SERVICE_ACCOUNT_FILE}."
+ return 2
+ fi
+}
+
+# BASE64URL uses a sligtly different character set than BASE64, and
+# uses no padding characters.
+
+function base64url () {
+ /usr/bin/base64 | sed -e 's/=//g; s/+/-/g; s/\//_/g'
+}
+
+# Assemble the JSON Web Token (RFC 1795)
+#
+# usage: fcr_create_jwt *client-email* *token-uri*
+
+fcr_create_jwt () {
+ local JWT_HEADER="$(base64url <<<'{"alg":"RS256","typ":"JWT"}')"
+ local JWT_CLAIM="$(base64url <<<'{'"\"iss\":\"${1:?}\",\"aud\":\"${2:?}\",\"exp\":\"$((NOW + 3600))\",\"iat\":\"${NOW}\",\"scope\":\"https://www.googleapis.com/auth/mobilecrashreporting\""'}')"
+ local JWT_BODY="${JWT_HEADER}.${JWT_CLAIM}"
+ local JWT_SIG="$(echo -n "${JWT_BODY}" | openssl dgst -sha256 -sign <(svc_property private_key) -binary | base64url)"
+
+ echo "${JWT_BODY}.${JWT_SIG}"
+}
+
+# Set the BEARER_TOKEN variable for authentication.
+#
+# usage: fcr_authenticate
+
+fcr_authenticate () {
+ : "${FIREBASE_APP_ID:?required to select authentication credentials}"
+
+ local SVC_PLIST
+
+ fcr_load_certificate SVC_PLIST || return 2
+
+ local TOK_PLIST="${HOME}/Library/Preferences/com.google.SymbolUploadToken.plist"
+
+ if ((VERBOSE > 2)); then
+ CURLOPT='--trace-ascii /dev/fd/2'
+ elif ((VERBOSE > 1)); then
+ CURLOPT='--verbose'
+ else
+ CURLOPT=''
+ fi
+
+ # If the token will expire in the next sixty seconds (or already
+ # has), reload it.
+ if ! fcr_verify_tok_plist; then
+ xcdebug "Token cannot be used. Requesting OAuth2 token using installed credentials."
+
+ if ! fcr_verify_svc_plist; then
+ xcerror "Incorrect/incomplete service account file."
+ return 2
+ else
+ xcdebug "Certificate information appears valid."
+ fi
+
+ TOKEN_URI="$(svc_property token_uri)"
+ CLIENT_EMAIL="$(svc_property client_email)"
+
+ # Assemble the JSON Web Token (RFC 1795)
+ local JWT="$(fcr_create_jwt "${CLIENT_EMAIL}" "${TOKEN_URI}")"
+
+ fcr_mktemp TOKEN_JSON
+
+ HTTP_STATUS="$(curl ${CURLOPT} -o "${TOKEN_JSON}" -s -d grant_type='urn:ietf:params:oauth:grant-type:jwt-bearer' -d assertion="${JWT}" -w '%{http_code}' "${TOKEN_URI}")"
+
+ if [[ "${HTTP_STATUS}" == 403 ]]; then
+ xcerror "Invalid certificate. Unable to retrieve OAuth2 token."
+ return 2
+ elif [[ "${HTTP_STATUS}" != 200 ]]; then
+ cat >&2 "${TOKEN_JSON}"
+ return 2
+ fi
+
+ # Store the token in the preferences directory for future use.
+ /usr/bin/plutil -convert binary1 "${TOKEN_JSON}" -o "${TOK_PLIST}"
+
+ EXPIRES_IN="$(tok_property expires_in)"
+ EXPIRES_AT="$((EXPIRES_IN + NOW))"
+
+ /usr/libexec/PlistBuddy \
+ -c "Add :app_id string \"${FIREBASE_APP_ID}\"" \
+ -c "Add :expires_at integer ${EXPIRES_AT}" \
+ -c "Add :expiration_date date $(TZ=GMT date -jf %s ${EXPIRES_AT})" \
+ "${TOK_PLIST}"
+
+ if ! fcr_verify_tok_plist; then
+ ((VERBOSE)) && /usr/libexec/PlistBuddy -c 'Print' "${TOK_PLIST}"
+
+ echo '{}' >|"${TOK_PLIST}"
+ xcwarning "Token returned is not valid."
+ xcnote "If this error persists, download a fresh certificate."
+
+ return 2
+ fi
+ else
+ xcdebug "Token still valid."
+ EXPIRES_AT="$(tok_property expires_at)"
+ fi
+
+ xcdebug "Token will expire on $(date -jf %s "${EXPIRES_AT}")."
+ xcdebug "Using service account with key $(svc_property private_key_id)."
+
+ BEARER_TOKEN="$(tok_property access_token)"
+
+ if [[ ! "${BEARER_TOKEN}" ]]; then
+ if ((VERBOSE)); then
+ xcwarning "Current malformed token cache:"
+ tok_property | while read; do xcnote "${REPLY}"; done
+ fi
+ xcerror "Unable to retrieve authentication token from server."
+ return 2
+ fi
+
+ return 0
+}
+
+# Upload the files to the server.
+#
+# Arguments: Names of files to upload.
+
+fcr_upload_files() {
+ fcr_authenticate || return $?
+
+ : "${FCR_PROD_VERS:?}"
+ : "${FCR_BUNDLE_ID:?}"
+ : "${FIREBASE_APP_ID:?}"
+ : "${FIREBASE_API_KEY:?}"
+ : "${FCR_BASE_URL:=https://mobilecrashreporting.googleapis.com}"
+
+ fcr_mktemp FILE_UPLOAD_LOCATION_PLIST META_UPLOAD_RESULT_PLIST
+
+ if ((VERBOSE > 2)); then
+ CURLOPT='--trace-ascii /dev/fd/2'
+ elif ((VERBOSE > 1)); then
+ CURLOPT='--verbose'
+ else
+ CURLOPT=''
+ fi
+
+ for FILE; do
+ xcdebug "Get signed URL for uploading."
+
+ URL="${FCR_BASE_URL}/v1/apps/${FIREBASE_APP_ID}"
+
+ HTTP_STATUS="$(curl ${CURLOPT} -o "${FILE_UPLOAD_LOCATION_PLIST}" -sL -H "X-Ios-Bundle-Identifier: ${FCR_BUNDLE_ID}" -H "Authorization: Bearer ${BEARER_TOKEN}" -X POST -d '' -w '%{http_code}' "${URL}/symbolFileUploadLocation?key=${FIREBASE_API_KEY}")"
+ STATUS=$?
+
+ if [[ "${STATUS}" == 22 && "${HTTP_STATUS}" == 403 ]]; then
+ xcerror "Unable to access resource. Token invalid."
+ xcnote "Please verify the service account file."
+ return 2
+ elif [[ "${STATUS}" != 0 ]]; then
+ xcerror "curl exited with non-zero status ${STATUS}."
+ ((STATUS == 22)) && xcerror "HTTP response code is ${HTTP_STATUS}."
+ return 2
+ fi
+
+ /usr/bin/plutil -convert binary1 "${FILE_UPLOAD_LOCATION_PLIST}" || return 1
+
+ UPLOAD_KEY="$(property uploadKey "${FILE_UPLOAD_LOCATION_PLIST}")"
+ UPLOAD_URL="$(property uploadUrl "${FILE_UPLOAD_LOCATION_PLIST}")"
+ ERRMSG="$(property error:message "${FILE_UPLOAD_LOCATION_PLIST}")"
+
+ if [[ "${ERRMSG}" ]]; then
+ if ((VERBOSE)); then
+ xcnote "Server response:"
+ /usr/bin/plutil -p "${FILE_UPLOAD_LOCATION_PLIST}" >&2
+ fi
+ xcerror "symbolFileUploadLocation: ${ERRMSG}"
+ xcnote "symbolFileUploadLocation: Failed to get upload location."
+ return 1
+ fi
+
+ xcdebug "Upload symbol file."
+
+ HTTP_STATUS=$(curl ${CURLOPT} -sfL -H 'Content-Type: text/plain' -H "Authorization: Bearer ${BEARER_TOKEN}" -w '%{http_code}' -T "${FILE}" "${UPLOAD_URL}")
+ STATUS=$?
+
+ if ((STATUS == 22)); then # exit code 22 is a non-successful HTTP response
+ xcerror "upload: Unable to upload symbol file (HTTP Status ${HTTP_STATUS})."
+ return 1
+ elif ((STATUS != 0)); then
+ xcerror "upload: Unable to upload symbol file (reason unknown)."
+ return 1
+ fi
+
+ xcdebug "Upload metadata information."
+
+ curl ${CURLOPT} -sL -H 'Content-Type: application/json' -H "X-Ios-Bundle-Identifier: ${FCR_BUNDLE_ID}" -H "Authorization: Bearer ${BEARER_TOKEN}" -X POST -d '{"upload_key":"'"${UPLOAD_KEY}"'","symbol_file_mapping":{"symbol_type":2,"app_version":"'"${FCR_PROD_VERS}"'"}}' "${URL}/symbolFileMappings:upsert?key=${FIREBASE_API_KEY}" >|"${META_UPLOAD_RESULT_PLIST}" || return 1
+ /usr/bin/plutil -convert binary1 "${META_UPLOAD_RESULT_PLIST}" || return 1
+
+ ERRMSG="$(property error:message "${META_UPLOAD_RESULT_PLIST}")"
+
+ if [[ "${ERRMSG}" ]]; then
+ xcerror "symbolFileMappings:upsert: ${ERRMSG}"
+ xcnote "symbolFileMappings:upsert: The metadata for the symbol file failed to update."
+ return 1
+ fi
+ done
+}
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym.sh b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym.sh
new file mode 100755
index 00000000..c0a34e38
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Crash/upload-sym.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+echo "$0:0: error: $0 has been removed. Please use upload-sym instead."
+exit 1
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Firebase.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Firebase.h
new file mode 100644
index 00000000..90798a6a
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Firebase.h
@@ -0,0 +1,52 @@
+#import <FirebaseAnalytics/FirebaseAnalytics.h>
+#import <FirebaseCore/FirebaseCore.h>
+
+#if !defined(__has_include)
+ #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \
+ import the headers individually."
+#else
+ #if __has_include(<FirebaseAppIndexing/FirebaseAppIndexing.h>)
+ #import <FirebaseAppIndexing/FirebaseAppIndexing.h>
+ #endif
+
+ #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
+ #import <FirebaseAuth/FirebaseAuth.h>
+ #endif
+
+ #if __has_include(<FirebaseCrash/FirebaseCrash.h>)
+ #import <FirebaseCrash/FirebaseCrash.h>
+ #endif
+
+ #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>)
+ #import <FirebaseDatabase/FirebaseDatabase.h>
+ #endif
+
+ #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>)
+ #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h>
+ #endif
+
+ #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>)
+ #import <FirebaseInstanceID/FirebaseInstanceID.h>
+ #endif
+
+ #if __has_include(<FirebaseInvites/FirebaseInvites.h>)
+ #import <FirebaseInvites/FirebaseInvites.h>
+ #endif
+
+ #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>)
+ #import <FirebaseMessaging/FirebaseMessaging.h>
+ #endif
+
+ #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>)
+ #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
+ #endif
+
+ #if __has_include(<FirebaseStorage/FirebaseStorage.h>)
+ #import <FirebaseStorage/FirebaseStorage.h>
+ #endif
+
+ #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>)
+ #import <GoogleMobileAds/GoogleMobileAds.h>
+ #endif
+
+#endif // defined(__has_include)
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/FirebaseMessaging b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/FirebaseMessaging
new file mode 100755
index 00000000..a0573d06
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/FirebaseMessaging
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FIRMessaging.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FIRMessaging.h
new file mode 100755
index 00000000..a0ae2e90
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FIRMessaging.h
@@ -0,0 +1,227 @@
+#import <Foundation/Foundation.h>
+
+/**
+ * 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,
+
+ /// FIRMessaging couldn't validate request from this client.
+ FIRMessagingErrorAuthentication = 1,
+
+ /// InstanceID service cannot be accessed.
+ FIRMessagingErrorNoAccess = 2,
+
+ /// Request to InstanceID backend timed out.
+ FIRMessagingErrorTimeout = 3,
+
+ /// No network available to reach the servers.
+ FIRMessagingErrorNetwork = 4,
+
+ /// Another similar operation in progress, bailing this one.
+ FIRMessagingErrorOperationInProgress = 5,
+
+ /// Some parameters of the request were invalid.
+ FIRMessagingErrorInvalidRequest = 7,
+};
+
+/// Status for the downstream message received by the app.
+typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {
+ /// Unknown status.
+ FIRMessagingMessageStatusUnknown,
+ /// New downstream message received by the app.
+ FIRMessagingMessageStatusNew,
+};
+
+/// Information about a downstream message received by the app.
+@interface FIRMessagingMessageInfo : NSObject
+
+/// The status of the downstream message
+@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 <NSObject>
+
+/// The callback to handle data message received via FCM for devices running iOS 10 or above.
+- (void)applicationReceivedRemoteMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage;
+
+@end
+
+/**
+ * Firebase Messaging lets you reliably deliver messages at no cost.
+ *
+ * To send or receive messages, the app must get a
+ * registration token from FIRInstanceID. This token authorizes an
+ * app server to send messages to an app instance.
+ *
+ * In order to receive FIRMessaging messages, declare `application:didReceiveRemoteNotification:`.
+ *
+ *
+ */
+@interface FIRMessaging : NSObject
+
+/**
+ * Delegate to handle remote data messages received via FCM for devices running iOS 10 or above.
+ */
+@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> 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
+ * sent 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.
+ *
+ *
+ * @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 from 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 is queued if we don't have an active connection.
+ * You can only use the upstream feature if your FCM implementation
+ * uses the XMPP server protocol.
+ *
+ * @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 FCM
+ * 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
+
+/**
+ * Use this to track message delivery and analytics for messages, typically
+ * when you receive a notification in `application:didReceiveRemoteNotification:`.
+ * However, you only need to call this if you set the `FirebaseAppDelegateProxyEnabled`
+ * flag to NO in your Info.plist. If `FirebaseAppDelegateProxyEnabled` is either missing
+ * or set to YES in your Info.plist, the library will call this automatically.
+ *
+ * @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/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FirebaseMessaging.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
new file mode 100755
index 00000000..ef49e7ff
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Headers/FirebaseMessaging.h
@@ -0,0 +1 @@
+#import "FIRMessaging.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Modules/module.modulemap
new file mode 100755
index 00000000..80bc59c1
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/FirebaseMessaging.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module FirebaseMessaging {
+ umbrella header "FirebaseMessaging.h"
+ export *
+ module * { export *}
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "SystemConfiguration"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/Protobuf.framework/Protobuf b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/Protobuf.framework/Protobuf
new file mode 100644
index 00000000..546e02ec
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/Messaging/Protobuf.framework/Protobuf
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/FirebaseRemoteConfig b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/FirebaseRemoteConfig
new file mode 100755
index 00000000..45637862
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/FirebaseRemoteConfig
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h
new file mode 100755
index 00000000..395020ca
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FIRRemoteConfig.h
@@ -0,0 +1,224 @@
+//
+// FIRRemoteConfig.h
+// Firebase Remote Config service SDK
+// Copyright 2016 Google Inc. All rights reserved.
+//
+#import <Foundation/Foundation.h>
+
+/// The Firebase Remote Config service default namespace, to be used if the API method does not
+/// specify a different namespace. Use the default namespace if configuring from the Google Firebase
+/// service.
+extern NSString *const __nonnull FIRNamespaceGoogleMobilePlatform;
+
+/// Key used to manage throttling in NSError user info when the refreshing of Remote Config
+/// parameter values (data) is throttled. The value of this key is the elapsed time since 1970,
+/// measured in seconds.
+extern NSString *const __nonnull FIRRemoteConfigThrottledEndTimeInSecondsKey;
+
+/// Indicates whether updated data was successfully fetched.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigFetchStatus) {
+ /// Config has never been fetched.
+ FIRRemoteConfigFetchStatusNoFetchYet,
+ /// Config fetch succeeded.
+ FIRRemoteConfigFetchStatusSuccess,
+ /// Config fetch failed.
+ FIRRemoteConfigFetchStatusFailure,
+ /// Config fetch was throttled.
+ FIRRemoteConfigFetchStatusThrottled,
+};
+
+/// Remote Config error domain that handles errors when fetching data from the service.
+extern NSString *const __nonnull FIRRemoteConfigErrorDomain;
+/// Firebase Remote Config service fetch error.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigError) {
+ /// Unknown or no error.
+ FIRRemoteConfigErrorUnknown = 8001,
+ /// Frequency of fetch requests exceeds throttled limit.
+ FIRRemoteConfigErrorThrottled = 8002,
+ /// Internal error that covers all internal HTTP errors.
+ FIRRemoteConfigErrorInternalError = 8003,
+};
+
+/// Enumerated value that indicates the source of Remote Config data. Data can come from
+/// the Remote Config service, the DefaultConfig that is available when the app is first installed,
+/// or a static initialized value if data is not available from the service or DefaultConfig.
+typedef NS_ENUM(NSInteger, FIRRemoteConfigSource) {
+ FIRRemoteConfigSourceRemote, ///< The data source is the Remote Config service.
+ FIRRemoteConfigSourceDefault, ///< The data source is the DefaultConfig defined for this app.
+ FIRRemoteConfigSourceStatic, ///< The data doesn't exist, return a static initialized value.
+};
+
+/// Completion handler invoked by fetch methods when they get a response from the server.
+///
+/// @param status Config fetching status.
+/// @param error Error message on failure.
+typedef void (^FIRRemoteConfigFetchCompletion)(FIRRemoteConfigFetchStatus status,
+ NSError *__nullable error);
+
+#pragma mark - FIRRemoteConfigValue
+/// This class provides a wrapper for Remote Config parameter values, with methods to get parameter
+/// values as different data types.
+@interface FIRRemoteConfigValue : NSObject<NSCopying>
+/// Gets the value as a string.
+@property(nonatomic, readonly, nullable) NSString *stringValue;
+/// Gets the value as a number value.
+@property(nonatomic, readonly, nullable) NSNumber *numberValue;
+/// Gets the value as a NSData object.
+@property(nonatomic, readonly, nonnull) NSData *dataValue;
+/// Gets the value as a boolean.
+@property(nonatomic, readonly) BOOL boolValue;
+/// Identifies the source of the fetched value.
+@property(nonatomic, readonly) FIRRemoteConfigSource source;
+@end
+
+#pragma mark - FIRRemoteConfigSettings
+/// Firebase Remote Config settings.
+@interface FIRRemoteConfigSettings : NSObject
+/// Indicates whether Developer Mode is enabled.
+@property(nonatomic, readonly) BOOL isDeveloperModeEnabled;
+/// Initializes FIRRemoteConfigSettings, which is used to set properties for custom settings. To
+/// make custom settings take effect, pass the FIRRemoteConfigSettings instance to the
+/// configSettings property of FIRRemoteConfig.
+- (nullable FIRRemoteConfigSettings *)initWithDeveloperModeEnabled:(BOOL)developerModeEnabled
+ NS_DESIGNATED_INITIALIZER;
+@end
+
+#pragma mark - FIRRemoteConfig
+/// Firebase Remote Config class. The shared instance method +remoteConfig can be created and used
+/// to fetch, activate and read config results and set default config results.
+@interface FIRRemoteConfig : NSObject<NSFastEnumeration>
+/// Last successful fetch completion time.
+@property(nonatomic, readonly, strong, nullable) NSDate *lastFetchTime;
+/// Last fetch status. The status can be any enumerated value from FIRRemoteConfigFetchStatus.
+@property(nonatomic, readonly, assign) FIRRemoteConfigFetchStatus lastFetchStatus;
+/// Config settings are custom settings.
+@property(nonatomic, readwrite, strong, nonnull) FIRRemoteConfigSettings *configSettings;
+
+/// Returns the FIRRemoteConfig instance shared throughout your app. This singleton object contains
+/// the complete set of Remote Config parameter values available to the app, including the Active
+/// Config and Default Config. This object also caches values fetched from the Remote Config Server
+/// until they are copied to the Active Config by calling activateFetched.
+/// When you fetch values from the Remote Config Server using the default Firebase namespace
+/// service, you should use this class method to create a shared instance of the FIRRemoteConfig
+/// object to ensure that your app will function properly with the Remote Config Server and the
+/// Firebase service.
++ (nonnull FIRRemoteConfig *)remoteConfig NS_SWIFT_NAME(remoteConfig());
+
+/// Unavailable. Use +remoteConfig instead.
+- (nonnull instancetype)init __attribute__((unavailable("Use +remoteConfig instead.")));
+
+#pragma mark - Fetch
+/// Fetches Remote Config data with a callback. Call activateFetched to make fetched data available
+/// to your app.
+/// @param completionHandler Fetch operation callback.
+- (void)fetchWithCompletionHandler:(nullable FIRRemoteConfigFetchCompletion)completionHandler;
+
+/// Fetches Remote Config data and sets a duration that specifies how long config data lasts.
+/// Call activateFetched to make fetched data available to your app.
+/// @param expirationDuration Duration that defines how long fetched config data is available, in
+/// seconds. When the config data expires, a new fetch is required.
+/// @param completionHandler Fetch operation callback.
+- (void)fetchWithExpirationDuration:(NSTimeInterval)expirationDuration
+ completionHandler:(nullable FIRRemoteConfigFetchCompletion)completionHandler;
+
+#pragma mark - Apply
+/// Applies Fetched Config data to the Active Config, causing updates to the behavior and appearance
+/// of the app to take effect (depending on how config data is used in the app).
+/// Returns true if there was a Fetched Config, and it was activated.
+/// Returns false if no Fetched Config was found, or the Fetched Config was already activated.
+- (BOOL)activateFetched;
+
+#pragma mark - Get Config
+/// Enables access to configuration values by using object subscripting syntax.
+/// This is used to get the config value of the default namespace.
+/// <pre>
+/// // Example:
+/// FIRRemoteConfig *config = [FIRRemoteConfig remoteConfig];
+/// FIRRemoteConfigValue *value = config[@"yourKey"];
+/// BOOL b = value.boolValue;
+/// NSNumber *number = config[@"yourKey"].numberValue;
+/// </pre>
+- (nonnull FIRRemoteConfigValue *)objectForKeyedSubscript:(nonnull NSString *)key;
+
+/// Gets the config value of the default namespace.
+/// @param key Config key.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key;
+
+/// Gets the config value of a given namespace.
+/// @param key Config key.
+/// @param aNamespace Config results under a given namespace.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace;
+
+/// Gets the config value of a given namespace and a given source.
+/// @param key Config key.
+/// @param aNamespace Config results under a given namespace.
+/// @param source Config value source.
+- (nonnull FIRRemoteConfigValue *)configValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace
+ source:(FIRRemoteConfigSource)source;
+
+/// Gets all the parameter keys from a given source and a given namespace.
+///
+/// @param source The config data source.
+/// @param aNamespace The config data namespace.
+/// @return An array of keys under the given source and namespace.
+- (nonnull NSArray<NSString *> *)allKeysFromSource:(FIRRemoteConfigSource)source
+ namespace:(nullable NSString *)aNamespace;
+
+/// Returns the set of parameter keys that start with the given prefix, from the default namespace
+/// in the active config.
+///
+/// @param prefix The key prefix to look for. If prefix is nil or empty, returns all the
+/// keys.
+/// @return The set of parameter keys that start with the specified prefix.
+- (nonnull NSSet<NSString *> *)keysWithPrefix:(nullable NSString *)prefix;
+
+/// Returns the set of parameter keys that start with the given prefix, from the given namespace in
+/// the active config.
+///
+/// @param prefix The key prefix to look for. If prefix is nil or empty, returns all the
+/// keys in the given namespace.
+/// @param aNamespace The namespace in which to look up the keys. If the namespace is invalid,
+/// returns an empty set.
+/// @return The set of parameter keys that start with the specified prefix.
+- (nonnull NSSet<NSString *> *)keysWithPrefix:(nullable NSString *)prefix
+ namespace:(nullable NSString *)aNamespace;
+
+#pragma mark - Defaults
+/// Sets config defaults for parameter keys and values in the default namespace config.
+///
+/// @param defaultConfig A dictionary mapping a NSString * key to a NSObject * value.
+- (void)setDefaults:(nullable NSDictionary<NSString *, NSObject *> *)defaults;
+
+/// Sets config defaults for parameter keys and values in the default namespace config.
+///
+/// @param defaultConfig A dictionary mapping a NSString * key to a NSObject * value.
+/// @param aNamespace Config under a given namespace.
+- (void)setDefaults:(nullable NSDictionary<NSString *, NSObject *> *)defaultConfig
+ namespace:(nullable NSString *)aNamespace;
+
+/// Sets default configs from plist for default namespace;
+/// @param fileName The plist file name, with no file name extension. For example, if the plist file
+/// is defaultSamples.plist, call:
+/// [[FIRRemoteConfig remoteConfig] setDefaultsFromPlistFileName:@"defaultSamples"];
+- (void)setDefaultsFromPlistFileName:(nullable NSString *)fileName;
+
+/// Sets default configs from plist for a given namespace;
+/// @param fileName The plist file name, with no file name extension. For example, if the plist file
+/// is defaultSamples.plist, call:
+/// [[FIRRemoteConfig remoteConfig] setDefaultsFromPlistFileName:@"defaultSamples"];
+/// @param aNamespace The namespace where the default config is set.
+- (void)setDefaultsFromPlistFileName:(nullable NSString *)fileName
+ namespace:(nullable NSString *)aNamespace;
+
+/// Returns the default value of a given key and a given namespace from the default config.
+///
+/// @param key The parameter key of default config.
+/// @param aNamespace The namespace of default config.
+/// @return Returns the default value of the specified key and namespace. Returns
+/// nil if the key or namespace doesn't exist in the default config.
+- (nullable FIRRemoteConfigValue *)defaultValueForKey:(nullable NSString *)key
+ namespace:(nullable NSString *)aNamespace;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h
new file mode 100755
index 00000000..eedc4fce
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Headers/FirebaseRemoteConfig.h
@@ -0,0 +1 @@
+#import "FIRRemoteConfig.h"
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Modules/module.modulemap b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Modules/module.modulemap
new file mode 100755
index 00000000..a6627f5e
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/FirebaseRemoteConfig.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module FirebaseRemoteConfig {
+ umbrella header "FirebaseRemoteConfig.h"
+ export *
+ module * { export *}
+ link "c++"
+ link "sqlite3"
+ link "z"
+ link framework "CoreGraphics"
+ link framework "Foundation"
+ link framework "UIKit"
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/Protobuf.framework/Protobuf b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/Protobuf.framework/Protobuf
new file mode 100644
index 00000000..546e02ec
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/Firebase/RemoteConfig/Protobuf.framework/Protobuf
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.h b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.h
new file mode 100755
index 00000000..93542737
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.h
@@ -0,0 +1,30 @@
+#import <Cordova/CDV.h>
+#import "AppDelegate.h"
+
+@interface FirebasePlugin : CDVPlugin
++ (FirebasePlugin *) firebasePlugin;
+- (void)getInstanceId:(CDVInvokedUrlCommand*)command;
+- (void)getToken:(CDVInvokedUrlCommand*)command;
+- (void)grantPermission:(CDVInvokedUrlCommand*)command;
+- (void)hasPermission:(CDVInvokedUrlCommand*)command;
+- (void)setBadgeNumber:(CDVInvokedUrlCommand*)command;
+- (void)getBadgeNumber:(CDVInvokedUrlCommand*)command;
+- (void)subscribe:(CDVInvokedUrlCommand*)command;
+- (void)unsubscribe:(CDVInvokedUrlCommand*)command;
+- (void)unregister:(CDVInvokedUrlCommand*)command;
+- (void)onNotificationOpen:(CDVInvokedUrlCommand*)command;
+- (void)onTokenRefresh:(CDVInvokedUrlCommand*)command;
+- (void)sendNotification:(NSDictionary*)userInfo;
+- (void)sendToken:(NSString*)token;
+- (void)logEvent:(CDVInvokedUrlCommand*)command;
+- (void)setScreenName:(CDVInvokedUrlCommand*)command;
+- (void)setUserId:(CDVInvokedUrlCommand*)command;
+- (void)setUserProperty:(CDVInvokedUrlCommand*)command;
+- (void)fetch:(CDVInvokedUrlCommand*)command;
+- (void)activateFetched:(CDVInvokedUrlCommand*)command;
+- (void)getValue:(CDVInvokedUrlCommand*)command;
+@property (nonatomic, copy) NSString *notificationCallbackId;
+@property (nonatomic, copy) NSString *tokenRefreshCallbackId;
+@property (nonatomic, retain) NSMutableArray *notificationStack;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.m b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.m
new file mode 100644
index 00000000..580fb760
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/FirebasePlugin.m
@@ -0,0 +1,331 @@
+#import "FirebasePlugin.h"
+#import <Cordova/CDV.h>
+#import "AppDelegate.h"
+#import "Firebase.h"
+@import FirebaseInstanceID;
+@import FirebaseMessaging;
+@import FirebaseAnalytics;
+@import FirebaseRemoteConfig;
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+@import UserNotifications;
+#endif
+
+#ifndef NSFoundationVersionNumber_iOS_9_x_Max
+#define NSFoundationVersionNumber_iOS_9_x_Max 1299
+#endif
+
+@implementation FirebasePlugin
+
+@synthesize notificationCallbackId;
+@synthesize tokenRefreshCallbackId;
+@synthesize notificationStack;
+
+static NSInteger const kNotificationStackSize = 10;
+static FirebasePlugin *firebasePlugin;
+
++ (FirebasePlugin *) firebasePlugin {
+ return firebasePlugin;
+}
+
+- (void)pluginInitialize {
+ NSLog(@"Starting Firebase plugin");
+ firebasePlugin = self;
+}
+
+// DEPRECATED - alias of getToken
+- (void)getInstanceId:(CDVInvokedUrlCommand *)command {
+ CDVPluginResult *pluginResult;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:
+ [[FIRInstanceID instanceID] token]];
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)getToken:(CDVInvokedUrlCommand *)command {
+ CDVPluginResult *pluginResult;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:
+ [[FIRInstanceID instanceID] token]];
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+- (void)hasPermission:(CDVInvokedUrlCommand *)command
+{
+ BOOL enabled = NO;
+ UIApplication *application = [UIApplication sharedApplication];
+ if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
+ enabled = application.currentUserNotificationSettings.types != UIUserNotificationTypeNone;
+ } else {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ enabled = application.enabledRemoteNotificationTypes != UIRemoteNotificationTypeNone;
+#pragma GCC diagnostic pop
+ }
+
+ NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1];
+ [message setObject:[NSNumber numberWithBool:enabled] forKey:@"isEnabled"];
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
+}
+- (void)grantPermission:(CDVInvokedUrlCommand *)command {
+ if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
+ if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) {
+ UIUserNotificationType notificationTypes =
+ (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
+ UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
+ [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ } else {
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
+ #pragma GCC diagnostic pop
+ }
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+
+
+ #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+ BOOL isIOS10 = TRUE;
+ #else
+ BOOL isIOS10 = FALSE;
+ #endif
+
+
+ if ( !isIOS10 ) {
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+
+
+ // IOS 10
+ UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge;
+ [[UNUserNotificationCenter currentNotificationCenter]
+ requestAuthorizationWithOptions:authOptions
+ completionHandler:^(BOOL granted, NSError * _Nullable error) {
+
+ if ( ![NSThread isMainThread] ) {
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
+ [[FIRMessaging messaging] setRemoteMessageDelegate:self];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus: granted ? CDVCommandStatus_OK : CDVCommandStatus_ERROR];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ });
+ }
+ else {
+ [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
+ [[FIRMessaging messaging] setRemoteMessageDelegate:self];
+ [[UIApplication sharedApplication] registerForRemoteNotifications];
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }
+ ];
+
+ return;
+}
+
+- (void)setBadgeNumber:(CDVInvokedUrlCommand *)command {
+ int number = [[command.arguments objectAtIndex:0] intValue];
+
+ [self.commandDelegate runInBackground:^{
+ [[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)getBadgeNumber:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ long badge = [[UIApplication sharedApplication] applicationIconBadgeNumber];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:badge];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)subscribe:(CDVInvokedUrlCommand *)command {
+ NSString* topic = [NSString stringWithFormat:@"/topics/%@", [command.arguments objectAtIndex:0]];
+
+ [[FIRMessaging messaging] subscribeToTopic: topic];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)unsubscribe:(CDVInvokedUrlCommand *)command {
+ NSString* topic = [NSString stringWithFormat:@"/topics/%@", [command.arguments objectAtIndex:0]];
+
+ [[FIRMessaging messaging] unsubscribeFromTopic: topic];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)unregister:(CDVInvokedUrlCommand *)command {
+ [[FIRInstanceID instanceID] deleteIDWithHandler:^void(NSError *_Nullable error){
+ if (error) {
+ NSLog(@"Unable to delete instance");
+ } else {
+ NSString* currentToken = [[FIRInstanceID instanceID] token];
+ if (currentToken != nil) {
+ [self sendToken:currentToken];
+ }
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+}
+
+- (void)onNotificationOpen:(CDVInvokedUrlCommand *)command {
+ self.notificationCallbackId = command.callbackId;
+
+ if (self.notificationStack != nil && [self.notificationStack count]) {
+ for (NSDictionary *userInfo in self.notificationStack) {
+ [self sendNotification:userInfo];
+ }
+ [self.notificationStack removeAllObjects];
+ }
+}
+
+- (void)onTokenRefresh:(CDVInvokedUrlCommand *)command {
+ self.tokenRefreshCallbackId = command.callbackId;
+ NSString* currentToken = [[FIRInstanceID instanceID] token];
+ if (currentToken != nil) {
+ [self sendToken:currentToken];
+ }
+}
+
+- (void)sendNotification:(NSDictionary *)userInfo {
+ if (self.notificationCallbackId != nil) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:userInfo];
+ [pluginResult setKeepCallbackAsBool:YES];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.notificationCallbackId];
+ } else {
+ if (!self.notificationStack) {
+ self.notificationStack = [[NSMutableArray alloc] init];
+ }
+
+ // stack notifications until a callback has been registered
+ [self.notificationStack addObject:userInfo];
+
+ if ([self.notificationStack count] >= kNotificationStackSize) {
+ [self.notificationStack removeLastObject];
+ }
+ }
+}
+
+- (void)sendToken:(NSString *)token {
+ if (self.tokenRefreshCallbackId != nil) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:token];
+ [pluginResult setKeepCallbackAsBool:YES];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:self.tokenRefreshCallbackId];
+ }
+}
+
+- (void)logEvent:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* name = [command.arguments objectAtIndex:0];
+ NSDictionary* parameters = [command.arguments objectAtIndex:1];
+
+ [FIRAnalytics logEventWithName:name parameters:parameters];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)setScreenName:(CDVInvokedUrlCommand *)command {
+ NSString* name = [command.arguments objectAtIndex:0];
+
+ [FIRAnalytics setScreenName:name screenClass:NULL];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void)setUserId:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* id = [command.arguments objectAtIndex:0];
+
+ [FIRAnalytics setUserID:id];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)setUserProperty:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* name = [command.arguments objectAtIndex:0];
+ NSString* value = [command.arguments objectAtIndex:1];
+
+ [FIRAnalytics setUserPropertyString:value forName:name];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)fetch:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+
+ if ([command.arguments count] > 0){
+ int expirationDuration = [[command.arguments objectAtIndex:0] intValue];
+
+ [remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError * _Nullable error) {
+ if (status == FIRRemoteConfigFetchStatusSuccess) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+ } else {
+ [remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError * _Nullable error) {
+ if (status == FIRRemoteConfigFetchStatusSuccess) {
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }
+ }];
+ }
+ }];
+}
+
+- (void)activateFetched:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+ BOOL activated = [remoteConfig activateFetched];
+ CDVPluginResult *pluginResult;
+ if (activated) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ } else {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+ }
+
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)getValue:(CDVInvokedUrlCommand *)command {
+ [self.commandDelegate runInBackground:^{
+ NSString* key = [command.arguments objectAtIndex:0];
+ FIRRemoteConfig* remoteConfig = [FIRRemoteConfig remoteConfig];
+ NSString* value = remoteConfig[key].stringValue;
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:value];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/GoogleService-Info.plist b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/GoogleService-Info.plist
new file mode 100644
index 00000000..5516ebf3
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/GoogleService-Info.plist
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+</dict>
+</plist> \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/www/firebase-browser.js b/StoneIsland/plugins/cordova-plugin-firebase/www/firebase-browser.js
new file mode 100755
index 00000000..93e3936f
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/www/firebase-browser.js
@@ -0,0 +1,119 @@
+exports.getInstanceId = function(success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.getToken = function(success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.onNotificationOpen = function(success, error) {
+};
+
+exports.onTokenRefresh = function(success, error) {
+};
+
+exports.grantPermission = function(success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.getBadgeNumber = function(success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.subscribe = function(topic, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.logEvent = function(name, params, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.logError = function(message, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setScreenName = function(name, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setUserId = function(id, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.activateFetched = function (success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.getInfo = function (success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ if (typeof success === 'function') {
+ success();
+ }
+};
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/www/firebase.js b/StoneIsland/plugins/cordova-plugin-firebase/www/firebase.js
new file mode 100644
index 00000000..cf67c884
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/www/firebase.js
@@ -0,0 +1,121 @@
+var exec = require('cordova/exec');
+
+exports.getInstanceId = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getInstanceId", []);
+};
+
+exports.getToken = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getToken", []);
+};
+
+exports.onNotificationOpen = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onNotificationOpen", []);
+};
+
+exports.onTokenRefresh = function(success, error) {
+ exec(success, error, "FirebasePlugin", "onTokenRefresh", []);
+};
+
+exports.grantPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "grantPermission", []);
+};
+
+exports.hasPermission = function(success, error) {
+ exec(success, error, "FirebasePlugin", "hasPermission", []);
+};
+
+exports.setBadgeNumber = function(number, success, error) {
+ exec(success, error, "FirebasePlugin", "setBadgeNumber", [number]);
+};
+
+exports.getBadgeNumber = function(success, error) {
+ exec(success, error, "FirebasePlugin", "getBadgeNumber", []);
+};
+
+exports.subscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "subscribe", [topic]);
+};
+
+exports.unsubscribe = function(topic, success, error) {
+ exec(success, error, "FirebasePlugin", "unsubscribe", [topic]);
+};
+
+exports.unregister = function(success, error) {
+ exec(success, error, "FirebasePlugin", "unregister", []);
+};
+
+exports.logEvent = function(name, params, success, error) {
+ exec(success, error, "FirebasePlugin", "logEvent", [name, params]);
+};
+
+exports.logError = function(message, success, error) {
+ exec(success, error, "FirebasePlugin", "logError", [message]);
+};
+
+exports.setScreenName = function(name, success, error) {
+ exec(success, error, "FirebasePlugin", "setScreenName", [name]);
+};
+
+exports.setUserId = function(id, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserId", [id]);
+};
+
+exports.setUserProperty = function(name, value, success, error) {
+ exec(success, error, "FirebasePlugin", "setUserProperty", [name, value]);
+};
+
+exports.activateFetched = function (success, error) {
+ exec(success, error, "FirebasePlugin", "activateFetched", []);
+};
+
+exports.fetch = function (cacheExpirationSeconds, success, error) {
+ var args = [];
+ if (typeof cacheExpirationSeconds === 'number') {
+ args.push(cacheExpirationSeconds);
+ } else {
+ error = success;
+ success = cacheExpirationSeconds;
+ }
+ exec(success, error, "FirebasePlugin", "fetch", args);
+};
+
+exports.getByteArray = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getByteArray", args);
+};
+
+exports.getValue = function (key, namespace, success, error) {
+ var args = [key];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "getValue", args);
+};
+
+exports.getInfo = function (success, error) {
+ exec(success, error, "FirebasePlugin", "getInfo", []);
+};
+
+exports.setConfigSettings = function (settings, success, error) {
+ exec(success, error, "FirebasePlugin", "setConfigSettings", [settings]);
+};
+
+exports.setDefaults = function (defaults, namespace, success, error) {
+ var args = [defaults];
+ if (typeof namespace === 'string') {
+ args.push(namespace);
+ } else {
+ error = success;
+ success = namespace;
+ }
+ exec(success, error, "FirebasePlugin", "setDefaults", args);
+};
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE b/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE
deleted file mode 100644
index bb1eb977..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 danwilson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/README.md b/StoneIsland/plugins/cordova-plugin-google-analytics/README.md
deleted file mode 100644
index 52433004..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/README.md
+++ /dev/null
@@ -1,203 +0,0 @@
-google-analytics-plugin
-=======================
-[![npm](https://img.shields.io/npm/v/cordova-plugin-google-analytics.svg)](https://www.npmjs.com/package/cordova-plugin-google-analytics)
-[![npm](https://img.shields.io/npm/dt/cordova-plugin-google-analytics.svg?label=npm%20downloads)](https://www.npmjs.com/package/cordova-plugin-google-analytics)
-[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
-
-Cordova (PhoneGap) 3.0+ Plugin to connect to Google's native Universal Analytics SDK
-
-Prerequisites:
-* A Cordova 3.0+ project for iOS, Android, browser (PWA), and/or Windows Phone 8
-* A Mobile App property through the Google Analytics Admin Console
-* (Android) Google Play Services SDK installed via [Android SDK Manager](https://developer.android.com/sdk/installing/adding-packages.html)
-
-# Installing
-
-This plugin follows the Cordova 3.0+ plugin spec, so it can be installed through the Cordova CLI in your existing Cordova project:
-```bash
-cordova plugin add https://github.com/danwilson/google-analytics-plugin.git
-```
-
-This plugin is also available on npm if you are using Cordova 5.0+:
-```bash
-cordova plugin add cordova-plugin-google-analytics
-```
-
-... OR the Cordova Plugin Registry if you are using a version of Cordova before 5.0 (while it remains open, as it is planning to shut down soon due to the move to npm):
-```bash
-cordova plugin add com.danielcwilson.plugins.googleanalytics
-```
-
-*Important Note* If the latest versions (0.8.0+) of this plugin are not working for you with Android on Cordova 5.0+, please try the suggestions in [Issues 123](https://github.com/danwilson/google-analytics-plugin/issues/123#issuecomment-151145095). Google Play Services has been very confusing to integrate, but in recent months it has been simplified. This plugin uses the new simpler way (including it as a framework instead of bundling it which can conflict with other plugins bundling it), but if you previously installed this plugin some old files might still be lingering.
-
-The plugin.xml file will add the Google Analytics SDK files for Android, iOS, browser (PWA) and/or Windows Phone 8. Follow [Google's steps](#sdk-files) if you need to update these later. Also make sure to review the Google Analytics [terms](http://www.google.com/analytics/terms/us.html) and [SDK Policy](https://developers.google.com/analytics/devguides/collection/protocol/policy)
-
-If you are not using the CLI, follow the steps in the section [Installing Without the CLI](#nocli)
-
-Windows Phone users have to manually add the [Google Analytics SDK for Windows 8 and Windows Phone](https://googleanalyticssdk.codeplex.com/) to your solution. To do this, just open your Cordova solution in Visual Studio, and add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK). This plugin requires v1.3.0 or higher.
-
-# Release note
-
-v1.0.0 -- api change from ```window.analytics``` to ```window.ga```, 'analytics' is deprecated since 1.0.0 and you should use the new api 'ga',
-because in the next release we are removing the analytics.
-
-v1.7.x -- since this version there are new parameters in some of the old methods like `startTrackerWithId('UA-XXXX-YY', 30)`
-and this is causing errors for those who are using the ionic 2(ionic-native) or ionic 1 (ngCordova);
-these wrapper interfaces don't have the new parameters at the time we did the changes; so please update you ionic framework to the lastest version.
-
-v1.7.11 -- since this version there is back compatibility with the new and old parameters in the method `startTrackerWithId('UA-XXXX-YY', 30)` to avoid loading issues reported.
-
-
-# JavaScript Usage
-
-**All the following methods accept optional success and error callbacks after all other available parameters.**
-
-In your 'deviceready' handler, set up your Analytics tracker:
-* `window.ga.startTrackerWithId('UA-XXXX-YY', 30)` where UA-XXXX-YY is your Google Analytics Mobile App property and 30 is the dispatch period (optional)
-
-To track a Screen (PageView):
-* `window.ga.trackView('Screen Title')`
-
-To track a Screen (PageView) w/ campaign details:
-* `window.ga.trackView('Screen Title', 'my-scheme://content/1111?utm_source=google&utm_campaign=my-campaign')`
-
-To track a Screen (PageView) and create a new session:
-* `window.ga.trackView('Screen Title', '', true)`
-
-To track an Event:
-* `window.ga.trackEvent('Category', 'Action', 'Label', Value)` Label and Value are optional, Value is numeric
-
-To track an Event and create a new session:
-* `window.ga.trackEvent('Category', 'Action', 'Label', Value, true)` Label, Value and newSession are optional, Value is numeric, newSession is true/false
-
-To track custom metrics:
-* `window.ga.trackMetric('key', Value)` Value is optional
-
-To track an Exception:
-* `window.ga.trackException('Description', Fatal)` where Fatal is boolean
-
-To track User Timing (App Speed):
-* `window.ga.trackTiming('Category', IntervalInMilliseconds, 'Variable', 'Label')` where IntervalInMilliseconds is numeric
-
-To add a Transaction (Ecommerce)
-* `window.ga.addTransaction('ID', 'Affiliation', Revenue, Tax, Shipping, 'Currency Code')` where Revenue, Tax, and Shipping are numeric
-
-To add a Transaction Item (Ecommerce)
-* `window.ga.addTransactionItem('ID', 'Name', 'SKU', 'Category', Price, Quantity, 'Currency Code')` where Price and Quantity are numeric
-
-To add a Custom Dimension
-* `window.ga.addCustomDimension('Key', 'Value', success, error)`
-* Key should be integer index of the dimension i.e. send `1` instead of `dimension1` for the first custom dimension you are tracking.
-* e.g. `window.ga.addCustomDimension(1, 'Value', success, error)`
-
-To set a UserId:
-* `window.ga.setUserId('my-user-id')`
-
-To set a specific app version:
-* `window.ga.setAppVersion('1.33.7')`
-
-To get a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters:
-for example to get campaign name:
-* `window.ga.getVar('cn', function(result){ console.log(result);})`
-
-To set a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters:
-for example to set session control:
-* `window.ga.setVar('sc', 'end', function(result){ console.log(result);})`
-
-To manually dispatch any data (this is not implemented in browser platform):
-* `window.ga.dispatch()`
-
-To set a anonymize Ip address:
-* `window.ga.setAnonymizeIp(true)`
-
-To set Opt-out:
-* `window.ga.setOptOut(true)`
-
-To enabling Advertising Features in Google Analytics allows you to take advantage of Remarketing, Demographics & Interests reports, and more:
-* `window.ga.setAllowIDFACollection(true)`
-
-To enable verbose logging:
-* `window.ga.debugMode()`
-
-To enable/disable automatic reporting of uncaught exceptions
-* `window.ga.enableUncaughtExceptionReporting(Enable, success, error)` where Enable is boolean
-
-# Example use ionic 2 (Ionic Native)
-```shell
-npm i --save @ionic-native/google-analytics
-```
-```javascript
-import { GoogleAnalytics } from '@ionic-native/google-analytics';
-import { Platform } from 'ionic-angular';
-
-...
-
- constructor(private ga: GoogleAnalytics, private platform: Platform) { }
-
- initializeApp() {
- this.platform.ready().then(() => {
- this.ga.startTrackerWithId('UA-00000000-0')
- .then(() => {
- console.log('Google analytics is ready now');
- //the component is ready and you can call any method here
- this.ga.debugMode();
- this.ga.setAllowIDFACollection(true);
- })
- .catch(e => console.log('Error starting GoogleAnalytics', e));
- });
- }
-```
-
-# Installing Without the CLI <a name="nocli"></a>
-
-Copy the files manually into your project and add the following to your config.xml files:
-```xml
-<feature name="UniversalAnalytics">
- <param name="ios-package" value="UniversalAnalyticsPlugin" />
-</feature>
-```
-```xml
-<feature name="UniversalAnalytics">
- <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
-</feature>
-```
-```xml
-<feature name="UniversalAnalytics">
- <param name="wp-package" value="UniversalAnalyticsPlugin" />
-</feature>
-```
-<a name="sdk-files"></a>
-You also will need to manually add the Google Analytics SDK files:
-* Download the Google Analytics SDK 3.0 for [iOS](https://developers.google.com/analytics/devguides/collection/ios/) and/or [Android](https://developers.google.com/analytics/devguides/collection/android/)
-* For iOS, add the downloaded Google Analytics SDK header files and libraries according to the [Getting Started](https://developers.google.com/analytics/devguides/collection/ios/v3) documentation
-* For Android, add `libGoogleAnalyticsServices.jar` to your Cordova Android project's `/libs` directory and build path
-* For Windows Phone, add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK)
-
-# Integrating with Lavaca
-
-The `lavaca` directory includes a component that can be added to a <a href="http://getlavaca.com">Lavaca</a> project. It offers a way to use the web `analytics.js` when the app is running in the browser and not packaged as Cordova.
-
-* Copy `AnalyticsService.js` to your Lavaca project (I create a directory under `js/app` called `data`).
-* In your config files (`local.json`, `staging.json`, `production.js`) create properties called `google_analytics_id` (for the Mobile App UA property) and `google_analytics_web_id` (for the Web UA property) and set the appropriate IDs or leave blank as needed.
-* In any file you want to track screen views or events, require AnalyticsService and use the methods provided.
-
-```javascript
-var analyticsService = require('app/data/AnalyticsService');
-
-analyticsService.trackView('Home');
-```
-
-# Browser (PWA)
-
-For browser (PWA), people who want to use the plugin in a website that has already integrated google analytics needs
-to make sure that they remove the google analytics snippet from the head section of the page and change the global `ga`
-object name to something else. The plugin uses `nativeGa` instead. This can be changed by the following code.
-
-```js
-// insert this in your head
-<script>
-window['GoogleAnalyticsObject'] = 'fooGa';
-</script>
-```
-
-The plugin will pick up the new name.
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java b/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java
deleted file mode 100644
index 23c20023..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java
+++ /dev/null
@@ -1,469 +0,0 @@
-package com.danielcwilson.plugins.analytics;
-
-import com.google.android.gms.analytics.GoogleAnalytics;
-import com.google.android.gms.analytics.Logger.LogLevel;
-import com.google.android.gms.analytics.HitBuilders;
-import com.google.android.gms.analytics.Tracker;
-
-import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CallbackContext;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map.Entry;
-
-public class UniversalAnalyticsPlugin extends CordovaPlugin {
- public static final String START_TRACKER = "startTrackerWithId";
- public static final String TRACK_VIEW = "trackView";
- public static final String TRACK_EVENT = "trackEvent";
- public static final String TRACK_EXCEPTION = "trackException";
- public static final String TRACK_TIMING = "trackTiming";
- public static final String TRACK_METRIC = "trackMetric";
- public static final String ADD_DIMENSION = "addCustomDimension";
- public static final String ADD_TRANSACTION = "addTransaction";
- public static final String ADD_TRANSACTION_ITEM = "addTransactionItem";
-
- public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection";
- public static final String SET_USER_ID = "setUserId";
- public static final String SET_ANONYMIZE_IP = "setAnonymizeIp";
- public static final String SET_OPT_OUT = "setOptOut";
- public static final String SET_APP_VERSION = "setAppVersion";
- public static final String GET_VAR = "getVar";
- public static final String SET_VAR = "setVar";
- public static final String DISPATCH = "dispatch";
- public static final String DEBUG_MODE = "debugMode";
- public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting";
-
- public Boolean trackerStarted = false;
- public Boolean debugModeEnabled = false;
- public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>();
-
- public Tracker tracker;
-
- @Override
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (START_TRACKER.equals(action)) {
- String id = args.getString(0);
- int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30;
- this.startTracker(id, dispatchPeriod, callbackContext);
- return true;
- } else if (TRACK_VIEW.equals(action)) {
- int length = args.length();
- String screen = args.getString(0);
- this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext);
- return true;
- } else if (TRACK_EVENT.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackEvent(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getString(2) : "",
- length > 3 ? args.getLong(3) : 0,
- length > 4 ? args.getBoolean(4) : false,
- callbackContext);
- }
- return true;
- } else if (TRACK_EXCEPTION.equals(action)) {
- String description = args.getString(0);
- Boolean fatal = args.getBoolean(1);
- this.trackException(description, fatal, callbackContext);
- return true;
- } else if (TRACK_TIMING.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext);
- }
- return true;
- } else if (TRACK_METRIC.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext);
- }
- return true;
- } else if (ADD_DIMENSION.equals(action)) {
- Integer key = args.getInt(0);
- String value = args.getString(1);
- this.addCustomDimension(key, value, callbackContext);
- return true;
- } else if (ADD_TRANSACTION.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.addTransaction(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getDouble(2) : 0,
- length > 3 ? args.getDouble(3) : 0,
- length > 4 ? args.getDouble(4) : 0,
- length > 5 ? args.getString(5) : null,
- callbackContext);
- }
- return true;
- } else if (ADD_TRANSACTION_ITEM.equals(action)) {
- int length = args.length();
- if (length > 0) {
- this.addTransactionItem(
- args.getString(0),
- length > 1 ? args.getString(1) : "",
- length > 2 ? args.getString(2) : "",
- length > 3 ? args.getString(3) : "",
- length > 4 ? args.getDouble(4) : 0,
- length > 5 ? args.getLong(5) : 0,
- length > 6 ? args.getString(6) : null,
- callbackContext);
- }
- return true;
- } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) {
- this.setAllowIDFACollection(args.getBoolean(0), callbackContext);
- } else if (SET_USER_ID.equals(action)) {
- String userId = args.getString(0);
- this.setUserId(userId, callbackContext);
- } else if (SET_ANONYMIZE_IP.equals(action)) {
- boolean anonymize = args.getBoolean(0);
- this.setAnonymizeIp(anonymize, callbackContext);
- } else if (SET_OPT_OUT.equals(action)) {
- boolean optout = args.getBoolean(0);
- this.setOptOut(optout, callbackContext);
- } else if (SET_APP_VERSION.equals(action)) {
- String version = args.getString(0);
- this.setAppVersion(version, callbackContext);
- } else if (GET_VAR.equals(action)) {
- String variable = args.getString(0);
- this.getVar(variable, callbackContext);
- } else if (SET_VAR.equals(action)) {
- String variable = args.getString(0);
- String value = args.getString(1);
- this.setVar(variable, value, callbackContext);
- return true;
- } else if (DISPATCH.equals(action)) {
- this.dispatch(callbackContext);
- return true;
- } else if (DEBUG_MODE.equals(action)) {
- this.debugMode(callbackContext);
- } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) {
- Boolean enable = args.getBoolean(0);
- this.enableUncaughtExceptionReporting(enable, callbackContext);
- }
- return false;
- }
-
- private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) {
- if (null != id && id.length() > 0) {
- tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id);
- callbackContext.success("tracker started");
- trackerStarted = true;
- GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod);
- } else {
- callbackContext.error("tracker id is not valid");
- }
- }
-
- private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) {
- if (key <= 0) {
- callbackContext.error("Expected positive integer argument for key.");
- return;
- }
-
- if (null == value || value.length() == 0) {
- callbackContext.error("Expected non-empty string argument for value.");
- return;
- }
-
- customDimensions.put(key, value);
- callbackContext.success("custom dimension started");
- }
-
- private <T> void addCustomDimensionsToHitBuilder(T builder) {
- //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use
- //the common setCustomDimension (int index, String dimension) method
- try {
- Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class);
-
- for (Entry<Integer, String> entry : customDimensions.entrySet()) {
- Integer key = entry.getKey();
- String value = entry.getValue();
- try {
- builderMethod.invoke(builder, (key), value);
- } catch (IllegalArgumentException e) {
- } catch (IllegalAccessException e) {
- } catch (InvocationTargetException e) {
- }
- }
- } catch (SecurityException e) {
- } catch (NoSuchMethodException e) {
- }
- }
-
- private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) {
- if (! trackerStarted ) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != screenname && screenname.length() > 0) {
- tracker.setScreenName(screenname);
-
- HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- if(!campaignUrl.equals("")){
- hitBuilder.setCampaignParamsFromUrl(campaignUrl);
- }
-
- if(!newSession) {
- tracker.send(hitBuilder.build());
- } else {
- tracker.send(hitBuilder.setNewSession().build());
- }
-
- callbackContext.success("Track Screen: " + screenname);
- } else {
- callbackContext.error("Expected one non-empty string argument.");
- }
- }
-
- private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != category && category.length() > 0) {
- HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- if(!newSession){
- tracker.send(hitBuilder
- .setCategory(category)
- .setAction(action)
- .setLabel(label)
- .setValue(value)
- .build());
- } else {
- tracker.send(hitBuilder
- .setCategory(category)
- .setAction(action)
- .setLabel(label)
- .setValue(value)
- .setNewSession()
- .build());
- }
-
- callbackContext.success("Track Event: " + category);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void trackMetric(Integer key, String value, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (key >= 0) {
- HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
- tracker.send(hitBuilder
- .setCustomMetric(key, Float.parseFloat(value))
- .build()
- );
- callbackContext.success("Track Metric: " + key + ", value: " + value);
- } else {
- callbackContext.error("Expected integer key: " + key + ", and string value: " + value);
- }
- }
-
- private void trackException(String description, Boolean fatal, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != description && description.length() > 0) {
- HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setDescription(description)
- .setFatal(fatal)
- .build()
- );
- callbackContext.success("Track Exception: " + description);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != category && category.length() > 0) {
- HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setCategory(category)
- .setValue(intervalInMilliseconds)
- .setVariable(name)
- .setLabel(label)
- .build()
- );
- callbackContext.success("Track Timing: " + category);
- } else {
- callbackContext.error("Expected non-empty string arguments.");
- }
- }
-
- private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != id && id.length() > 0) {
- HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setTransactionId(id)
- .setAffiliation(affiliation)
- .setRevenue(revenue).setTax(tax)
- .setShipping(shipping)
- .setCurrencyCode(currencyCode)
- .build()
- ); //Deprecated
- callbackContext.success("Add Transaction: " + id);
- } else {
- callbackContext.error("Expected non-empty ID.");
- }
- }
-
- private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- if (null != id && id.length() > 0) {
- HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder();
- addCustomDimensionsToHitBuilder(hitBuilder);
-
- tracker.send(hitBuilder
- .setTransactionId(id)
- .setName(name)
- .setSku(sku)
- .setCategory(category)
- .setPrice(price)
- .setQuantity(quantity)
- .setCurrencyCode(currencyCode)
- .build()
- ); //Deprecated
- callbackContext.success("Add Transaction Item: " + id);
- } else {
- callbackContext.error("Expected non-empty ID.");
- }
- }
-
- private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.enableAdvertisingIdCollection(enable);
- callbackContext.success("Enable Advertising Id Collection: " + enable);
- }
-
- private void setVar(String variable, String value, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set(variable, value);
- callbackContext.success("Set variable " + variable + "to " + value);
- }
- private void dispatch(CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits();
- callbackContext.success("dispatch sent");
- }
-
- private void getVar(String variable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- String result = tracker.get(variable);
- callbackContext.success(result);
- }
-
- private void debugMode(CallbackContext callbackContext) {
- GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE);
-
- this.debugModeEnabled = true;
- callbackContext.success("debugMode enabled");
- }
-
- private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.setAnonymizeIp(anonymize);
- callbackContext.success("Set AnonymizeIp " + anonymize);
- }
-
- private void setOptOut(boolean optout, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout);
- callbackContext.success("Set Opt-Out " + optout);
- }
-
- private void setUserId(String userId, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set("&uid", userId);
- callbackContext.success("Set user id" + userId);
- }
-
- private void setAppVersion(String version, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.set("&av", version);
- callbackContext.success("Set app version: " + version);
- }
-
- private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) {
- if (!trackerStarted) {
- callbackContext.error("Tracker not started");
- return;
- }
-
- tracker.enableExceptionReporting(enable);
- callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting");
- }
-}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js b/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js
deleted file mode 100644
index a42eee39..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js
+++ /dev/null
@@ -1,253 +0,0 @@
-function UniversalAnalyticsProxy() {
- this._isDebug = false;
- this._isEcommerceRequired = false;
- this._trackingId = null;
-
- var namespace = window.GoogleAnalyticsObject || 'nativeGa';
- loadGoogleAnalytics.call(this, namespace);
-
- bindAll(this, [
- '_ensureEcommerce',
- '_uncaughtExceptionHandler',
- 'addCustomDimension',
- 'addTransaction',
- 'addTransactionItem',
- 'debugMode',
- 'enableUncaughtExceptionReporting',
- 'setAllowIDFACollection',
- 'setAnonymizeIp',
- 'setAppVersion',
- 'setOptOut',
- 'setUserId',
- 'getVar',
- 'setVar',
- 'startTrackerWithId',
- 'trackEvent',
- 'trackException',
- 'trackMetric',
- 'trackTiming',
- 'trackView'
- ]);
-}
-
-UniversalAnalyticsProxy.prototype = {
- startTrackerWithId: wrap(function (trackingId) {
- this._trackingId = trackingId;
-
- this._ga('create', {
- trackingId: trackingId,
- cookieDomain: 'auto'
- });
- this._ga('set', 'appName', document.title);
- }),
-
- setUserId: wrap(function (userId) {
- this._ga('set', 'userId', userId);
- }),
-
- setAnonymizeIp: wrap(function (anonymize) {
- this._ga('set', 'anonymizeIp', anonymize);
- }),
-
- setOptOut: wrap(function (optout) {
- if (!this._trackingId) {
- throw new Error('TrackingId not available');
- }
- window['ga-disable-' + this._trackingId] = optout;
- }),
-
- setAppVersion: wrap(function (version) {
- this._ga('set', 'appVersion', version);
- }),
-
- setAllowIDFACollection: wrap(function (enable) {
- // Not supported by browser platofrm
- }),
-
- getVar: function (param, success, error) {
- this._ga(function(tracker){
- success(tracker.get(param));
- });
- },
-
- setVar: wrap(function(param, value){
- this._ga('set', param, value);
- }),
-
- debugMode: wrap(function () {
- this._isDebug = true;
- }),
-
- addCustomDimension: wrap(function (key, value) {
- this._ga('set', 'dimension' + key, value);
- }),
-
- trackMetric: wrap(function (key, value) {
- this._ga('set', 'metric' + key, value);
- }),
-
- trackEvent: send(function (category, action, label, value, newSession) {
- return {
- hitType: 'event',
- eventCategory: category,
- eventAction: action,
- eventLabel: label,
- eventValue: value
- };
- }),
-
- trackView: send(function (screen) {
- return {
- hitType: 'screenview',
- screenName: screen
- };
- }),
-
- trackException: send(function (description, fatal) {
- return {
- hitType: 'exception',
- exDescription: description,
- exFatal: fatal
- };
- }),
-
- trackTiming: send(function (category, intervalInMilliseconds, name, label) {
- return {
- hitType: 'timing',
- timingCategory: category,
- timingVar: name,
- timingValue: intervalInMilliseconds,
- timingLabel: label
- };
- }),
-
- addTransaction: wrap(function (transactionId, affiliation, revenue, tax, shipping, currencyCode) {
- this._ensureEcommerce();
- this._ga('ecommerce:addTransaction', {
- id: transactionId,
- affiliation: affiliation,
- revenue: String(revenue),
- shipping: String(shipping),
- tax: String(tax),
- currency: currencyCode
- });
- }),
-
- addTransactionItem: wrap(function (transactionId, name, sku, category, price, quantity, currencyCode) {
- this._ensureEcommerce();
- this._ga('ecommerce:addItem', {
- id: transactionId,
- name: name,
- sku: sku,
- category: category,
- price: String(price),
- quantity: String(quantity),
- currency: currencyCode
- });
- }),
-
- enableUncaughtExceptionReporting: wrap(function (enable) {
- if (enable) {
- window.addEventListener('error', this._uncaughtExceptionHandler);
- } else {
- window.removeEventListener('error', this._uncaughtExceptionHandler);
- }
- }),
-
- _ga: function () {
- var args = Array.prototype.slice.call(arguments);
- if (this._isDebug) {
- console.debug('UniversalAnalyticsProxy', args);
- }
- this._nativeGa.apply(this._nativeGa, args);
- },
-
- _uncaughtExceptionHandler: function (err) {
- this._ga('send', {
- hitType: 'exception',
- exDescription: err.message,
- exFatal: true
- });
- },
-
- _ensureEcommerce: function() {
- if (this._isEcommerceRequired) return;
- this._ga('require', 'ecommerce');
- this._isEcommerceRequired = true;
- }
-};
-
-function send(fn) {
- return function (success, error, args) {
- var command = fn.apply(this, args);
- var timeout = setTimeout(function () {
- error(new Error('send timeout'));
- }, 3000);
-
- command.hitCallback = function hitCallback(result) {
- clearTimeout(timeout);
- success(result);
- };
-
- try {
- this._ga('send', command);
- } catch (err) {
- clearTimeout(timeout);
- defer(error, err);
- }
- };
-}
-
-function bindAll(that, names) {
- names.forEach(function(name) {
- if (typeof that[name] === 'function') {
- that[name] = that[name].bind(that);
- }
- });
-}
-
-/**
- * Proceed to the asynchronous loading of Google's analytics.js.
- * Initialize `this._nativeGa` once the script is loaded, using
- * the `onload` callback of the `script` DOM node.
- *
- * @param {string} name Reference (global namespace) of the GA object.
- */
-function loadGoogleAnalytics(name) {
- window.GoogleAnalyticsObject = name;
-
- window[name] = window[name] || function () {
- (window[name].q = window[name].q || []).push(arguments);
- };
- window[name].l = 1 * new Date();
- this._nativeGa = window[name];
-
- var script = document.createElement('script');
- var scripts = document.getElementsByTagName('script')[0];
- script.src = 'https://www.google-analytics.com/analytics.js';
- script.async = 1;
- scripts.parentNode.insertBefore(script, scripts);
-
- // analytics.js creates a new object once initialized, update our reference
- script.onload = (function() { this._nativeGa = window[name]; }).bind(this);
-}
-
-function wrap(fn) {
- return function (success, error, args) {
- try {
- fn.apply(this, args);
- setTimeout(success, 0);
- } catch (err) {
- defer(error, err);
- }
- };
-}
-
-function defer(fn) {
- var args = Array.prototype.slice.call(arguments, 1);
- setTimeout(function () {
- fn.apply(null, args);
- }, 0);
-}
-
-require('cordova/exec/proxy').add('UniversalAnalytics', new UniversalAnalyticsProxy());
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h
deleted file mode 100644
index 7f3f7029..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/*!
- @header GAI.h
- @abstract Google Analytics iOS SDK Header
- @version 3.14
- @copyright Copyright 2015 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "GAILogger.h"
-#import "GAITrackedViewController.h"
-#import "GAITracker.h"
-
-typedef NS_ENUM(NSUInteger, GAIDispatchResult) {
- kGAIDispatchNoData,
- kGAIDispatchGood,
- kGAIDispatchError
-};
-
-/*! Google Analytics product string. */
-extern NSString *const kGAIProduct;
-
-/*! Google Analytics version string. */
-extern NSString *const kGAIVersion;
-
-/*!
- NSError objects returned by the Google Analytics SDK may have this error domain
- to indicate that the error originated in the Google Analytics SDK.
- */
-extern NSString *const kGAIErrorDomain;
-
-/*! Google Analytics error codes. */
-typedef enum {
- // This error code indicates that there was no error. Never used.
- kGAINoError = 0,
-
- // This error code indicates that there was a database-related error.
- kGAIDatabaseError,
-
- // This error code indicates that there was a network-related error.
- kGAINetworkError,
-} GAIErrorCode;
-
-/*!
- Google Analytics iOS top-level class. Provides facilities to create trackers
- and set behaviorial flags.
- */
-@interface GAI : NSObject
-
-/*!
- For convenience, this class exposes a default tracker instance.
- This is initialized to `nil` and will be set to the first tracker that is
- instantiated in trackerWithTrackingId:. It may be overridden as desired.
-
- The GAITrackedViewController class will, by default, use this tracker instance.
- */
-@property(nonatomic, assign) id<GAITracker> defaultTracker;
-
-/*!
- The GAILogger to use.
- */
-@property(nonatomic, retain) id<GAILogger> logger;
-
-/*!
- When this is true, no tracking information will be gathered; tracking calls
- will effectively become no-ops. When set to true, all tracking information that
- has not yet been submitted. The value of this flag will be persisted
- automatically by the SDK. Developers can optionally use this flag to implement
- an opt-out setting in the app to allows users to opt out of Google Analytics
- tracking.
-
- This is set to `NO` the first time the Google Analytics SDK is used on a
- device, and is persisted thereafter.
- */
-@property(nonatomic, assign) BOOL optOut;
-
-/*!
- If this value is positive, tracking information will be automatically
- dispatched every dispatchInterval seconds. Otherwise, tracking information must
- be sent manually by calling dispatch.
-
- By default, this is set to `120`, which indicates tracking information should
- be dispatched automatically every 120 seconds.
- */
-@property(nonatomic, assign) NSTimeInterval dispatchInterval;
-
-/*!
- When set to true, the SDK will record the currently registered uncaught
- exception handler, and then register an uncaught exception handler which tracks
- the exceptions that occurred using defaultTracker. If defaultTracker is not
- `nil`, this function will track the exception on the tracker and attempt to
- dispatch any outstanding tracking information for 5 seconds. It will then call
- the previously registered exception handler, if any. When set back to false,
- the previously registered uncaught exception handler will be restored.
- */
-@property(nonatomic, assign) BOOL trackUncaughtExceptions;
-
-/*!
- When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
- */
-@property(nonatomic, assign) BOOL dryRun;
-
-/*! Get the shared instance of the Google Analytics for iOS class. */
-+ (GAI *)sharedInstance;
-
-/*!
- Creates or retrieves a GAITracker implementation with the specified name and
- tracking ID. If the tracker for the specified name does not already exist, then
- it will be created and returned; otherwise, the existing tracker will be
- returned. If the existing tracker for the respective name has a different
- tracking ID, that tracking ID is not changed by this method. If defaultTracker
- is not set, it will be set to the tracker instance returned here.
-
- @param name The name of this tracker. Must not be `nil` or empty.
-
- @param trackingId The tracking ID to use for this tracker. It should be of
- the form `UA-xxxxx-y`.
-
- @return A GAITracker associated with the specified name. The tracker
- can be used to send tracking data to Google Analytics. The first time this
- method is called with a particular name, the tracker for that name will be
- returned, and subsequent calls with the same name will return the same
- instance. It is not necessary to retain the tracker because the tracker will be
- retained internally by the library.
-
- If an error occurs or the name is not valid, this method will return
- `nil`.
- */
-- (id<GAITracker>)trackerWithName:(NSString *)name
- trackingId:(NSString *)trackingId;
-
-/*!
- Creates or retrieves a GAITracker implementation with name equal to
- the specified tracking ID. If the tracker for the respective name does not
- already exist, it is created, has it's tracking ID set to |trackingId|,
- and is returned; otherwise, the existing tracker is returned. If the existing
- tracker for the respective name has a different tracking ID, that tracking ID
- is not changed by this method. If defaultTracker is not set, it is set to the
- tracker instance returned here.
-
- @param trackingId The tracking ID to use for this tracker. It should be of
- the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
-
- @return A GAITracker associated with the specified trackingID. The tracker
- can be used to send tracking data to Google Analytics. The first time this
- method is called with a particular trackingID, the tracker for the respective
- name will be returned, and subsequent calls with the same trackingID
- will return the same instance. It is not necessary to retain the tracker
- because the tracker will be retained internally by the library.
-
- If an error occurs or the trackingId is not valid, this method will return
- `nil`.
- */
-- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
-
-/*!
- Remove a tracker from the trackers dictionary. If it is the default tracker,
- clears the default tracker as well.
-
- @param name The name of the tracker.
- */
-- (void)removeTrackerByName:(NSString *)name;
-
-/*!
- Dispatches any pending tracking information.
-
- Note that this does not have any effect on dispatchInterval, and can be used in
- conjunction with periodic dispatch. */
-- (void)dispatch;
-
-/*!
- Dispatches the next tracking beacon in the queue, calling completionHandler when
- the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted
- (returning kGAIDispatchError). If there is no network connection or there is no data to send,
- kGAIDispatchNoData is returned.
-
- Note that calling this method with a non-nil completionHandler disables periodic dispatch.
- Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when
- the app resumes from the background.
-
- Calling this method with a nil completionHandler is the same as calling the dispatch
- above.
-
- This method can be used for background data fetching in iOS 7.0 or later. It would be wise to
- call this when the application is exiting to initiate the submission of any unsubmitted
- tracking information.
-
- @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult
- param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch.
- */
-- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h
deleted file mode 100644
index b8c5fdab..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*!
- @header GAIDictionaryBuilder.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "GAIEcommerceProduct.h"
-#import "GAIEcommerceProductAction.h"
-#import "GAIEcommercePromotion.h"
-
-/*!
- * Helper class to build a dictionary of hit parameters and values.
- * <br>
- * Examples:
- * <code>
- * id<GAITracker> t = // get a tracker.
- * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
- * action:@"EventAction"
- * label:nil
- * value:nil]
- * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]];
- * </code>
- * This will send an event hit type with the specified parameters
- * and a custom dimension parameter.
- * <br>
- * If you want to send a parameter with all hits, set it on GAITracker directly.
- * <code>
- * [t set:kGAIScreenName value:@"Home"];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"PlusOne"
- * target:@"SOME_URL"] build]];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"Share"
- * target:@"SOME_POST"] build]];
- * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
- * action:@"HangOut"
- * target:@"SOME_CIRCLE"]
- * build]];
- * </code>
- * You can override a value set on the tracker by adding it to the dictionary.
- * <code>
- * [t set:kGAIScreenName value:@"Home"];
- * [t send:...];
- * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
- * action:@"popup"
- * label:nil
- * value:nil]
- * set:@"popup title" forKey:kGAIScreenName] build]];
- * </code>
- * The values set via [GAIDictionaryBuilder set] or
- * [GAIDictionaryBuilder setAll] will override any existing values in the
- * GAIDictionaryBuilder object (i.e. initialized by
- * [GAIDictionaryBuilder createXYZ]). e.g.
- * <code>
- * GAIDictionaryBuilder *m =
- * GAIDictionaryBuilder createTimingWithCategory:@"category"
- * interval:@0
- * name:@"name"
- * label:nil];
- * [t send:[m.set:@"10" forKey:kGAITimingVar] build];
- * [t send:[m.set:@"20" forKey:kGAITimingVar] build];
- * </code>
- */
-@interface GAIDictionaryBuilder : NSObject
-
-- (GAIDictionaryBuilder *)set:(NSString *)value
- forKey:(NSString *)key;
-
-/*!
- * Copies all the name-value pairs from params into this object, ignoring any
- * keys that are not NSString and any values that are neither NSString or
- * NSNull.
- */
-- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
-
-/*!
- * Returns the value for the input parameter paramName, or nil if paramName
- * is not present.
- */
-- (NSString *)get:(NSString *)paramName;
-
-/*!
- * Return an NSMutableDictionary object with all the parameters set in this
- */
-- (NSMutableDictionary *)build;
-
-/*!
- * Parses and translates utm campaign parameters to analytics campaign param
- * and returns them as a map.
- *
- * @param urlString url containing utm campaign parameters.
- *
- * Valid campaign parameters are:
- * <ul>
- * <li>utm_id</li>
- * <li>utm_campaign</li>
- * <li>utm_content</li>
- * <li>utm_medium</li>
- * <li>utm_source</li>
- * <li>utm_term</li>
- * <li>dclid</li>
- * <li>gclid</li>
- * <li>gmob_t</li>
- * <li>aclid</li>
- * <li>anid</li>
- * </ul>
- * <p>
- * Example:
- * http://my.site.com/index.html?utm_campaign=wow&utm_source=source
- * utm_campaign=wow&utm_source=source.
- * <p>
- * For more information on auto-tagging, see
- * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
- * <p>
- * For more information on manual tagging, see
- * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
- */
-- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an appview
- hit.
-
- Note that using this method will not set the screen name for followon hits. To
- do that you need to call set:kGAIDescription value:<screenName> on the
- GAITracker instance.
-
- This method is deprecated. Use createScreenView instead.
- */
-+ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead.");
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a screenview
- hit.
-
- Note that using this method will not set the screen name for followon hits. To
- do that you need to call set:kGAIDescription value:<screenName> on the
- GAITracker instance.
- */
-+ (GAIDictionaryBuilder *)createScreenView;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
- */
-+ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
- action:(NSString *)action
- label:(NSString *)label
- value:(NSNumber *)value;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an exception
- hit.
- */
-+ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
- withFatal:(NSNumber *)fatal;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
- */
-+ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
- name:(NSString *)name
- sku:(NSString *)sku
- category:(NSString *)category
- price:(NSNumber *)price
- quantity:(NSNumber *)quantity
- currencyCode:(NSString *)currencyCode;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
- */
-+ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
- action:(NSString *)action
- target:(NSString *)target;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
- */
-+ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
- interval:(NSNumber *)intervalMillis
- name:(NSString *)name
- label:(NSString *)label;
-
-/*!
- Returns a GAIDictionaryBuilder object with parameters specific to a transaction
- hit.
- */
-+ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
- affiliation:(NSString *)affiliation
- revenue:(NSNumber *)revenue
- tax:(NSNumber *)tax
- shipping:(NSNumber *)shipping
- currencyCode:(NSString *)currencyCode;
-
-/*!
- Set the product action field for this hit.
- */
-- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction;
-
-/*!
- Adds a product to this hit.
- */
-- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product;
-
-/*!
- Add a product impression to this hit.
- */
-- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product
- impressionList:(NSString *)name
- impressionSource:(NSString *)source;
-
-/*!
- Add a promotion to this hit.
- */
-- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h
deleted file mode 100644
index b3ba60ae..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*!
- @header GAIEcommerceFields.h
- @abstract Google Analytics iOS SDK Ecommerce Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- This class provides several fields and methods useful as wire format parameters for
- Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details
- on how to use the Enhanced Ecommerce features.
- */
-
-// Enhanced Ecommerce Product fields
-extern NSString *const kGAIProductId;
-extern NSString *const kGAIProductName;
-extern NSString *const kGAIProductBrand;
-extern NSString *const kGAIProductCategory;
-extern NSString *const kGAIProductVariant;
-extern NSString *const kGAIProductPrice;
-extern NSString *const kGAIProductQuantity;
-extern NSString *const kGAIProductCouponCode;
-extern NSString *const kGAIProductPosition;
-
-extern NSString *const kGAIProductAction;
-
-// product action values
-extern NSString *const kGAIPADetail;
-extern NSString *const kGAIPAClick;
-extern NSString *const kGAIPAAdd;
-extern NSString *const kGAIPARemove;
-extern NSString *const kGAIPACheckout;
-extern NSString *const kGAIPACheckoutOption;
-extern NSString *const kGAIPAPurchase;
-extern NSString *const kGAIPARefund;
-
-// product action fields
-// used for 'purchase' and 'refund' actions
-extern NSString *const kGAIPATransactionId;
-extern NSString *const kGAIPAAffiliation;
-extern NSString *const kGAIPARevenue;
-extern NSString *const kGAIPATax;
-extern NSString *const kGAIPAShipping;
-extern NSString *const kGAIPACouponCode;
-// used for 'checkout' action
-extern NSString *const kGAICheckoutStep;
-extern NSString *const kGAICheckoutOption;
-// used for 'detail' and 'click' actions
-extern NSString *const kGAIProductActionList;
-extern NSString *const kGAIProductListSource;
-
-// Enhanced Ecommerce Impressions fields
-extern NSString *const kGAIImpressionName;
-extern NSString *const kGAIImpressionListSource;
-extern NSString *const kGAIImpressionProduct;
-extern NSString *const kGAIImpressionProductId;
-extern NSString *const kGAIImpressionProductName;
-extern NSString *const kGAIImpressionProductBrand;
-extern NSString *const kGAIImpressionProductCategory;
-extern NSString *const kGAIImpressionProductVariant;
-extern NSString *const kGAIImpressionProductPosition;
-extern NSString *const kGAIImpressionProductPrice;
-
-// Enhanced Ecommerce Promotions fields
-extern NSString *const kGAIPromotionId;
-extern NSString *const kGAIPromotionName;
-extern NSString *const kGAIPromotionCreative;
-extern NSString *const kGAIPromotionPosition;
-
-// Promotion actions
-extern NSString *const kGAIPromotionAction;
-extern NSString *const kGAIPromotionView;
-extern NSString *const kGAIPromotionClick;
-
-@interface GAIEcommerceFields : NSObject
-
-/*!
- Generates an enhanced ecommerce product field. Note that field names generated by
- customDimensionForIndex and customMetricForIndex can be used as suffixes.
-
- @param index the index of the product
- @param suffix the product field suffix (such as kGAIProductPrice).
-
- @return an NSString representing the product field parameter
- */
-+ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix;
-
-/*!
- Genrates an enhanced ecommerce impression list field name with an index. The return value of
- this method should also be used as input to the productImpressionForList method below.
-
- @param index the index of the impression list
-
- @return an NSString representing the impression list parameter
- */
-+ (NSString *)impressionListForIndex:(NSUInteger)index;
-
-/*!
- Generates an enhanced ecommerce product impression field with the impression list, product index
- and product suffix as parameters. The output of the method impressionListForIndex above should be
- used as the input list for this method. The output of customDimensionForIndex and
- customMetricForIndex can be used as suffixes.
-
- @param list the impression list for this product impression
- @param index the index of this product in the impression list
- @param suffix the product impression suffix for this field
-
- @return an NSString representing this product impression field parameter
- */
-+ (NSString *)productImpressionForList:(NSString *)list
- index:(NSUInteger)index
- suffix:(NSString *)Suffix;
-
-/*!
- Generates an enhanced ecommerce promotion field with an index and suffix.
-
- @param index the index of the promotion
- @param suffix the promotion suffix (such as kGAIPromotionId)
-
- @return an NSString representing this promotion field paramter
- */
-+ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h
deleted file mode 100644
index 029f7638..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*!
- @header GAIEcommerceProduct.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct product related information for a Google Analytics beacon. Use this class to
- * report information about products sold by merchants or impressions of products seen by users.
- * Instances of this class can be associated with both Product Actions and Product
- * Impression Lists.
- * <br>
- * Typical usage:
- * <code>
- * [tracker set:kGAIScreenName value:@"MyScreen"];
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
- * [product setId:@""PID-1234""];
- * [product setName:@"Space Monkeys!"];
- * [product setPrice:@100];
- * [product setQuantity:@2];
- * [builder addProductImpression:product impressionList:@"listName"];
- * [tracker send:[builder build]];
- * </code>
- */
-@interface GAIEcommerceProduct : NSObject
-
-/*!
- Sets the id that is used to identify a product in GA reports.
- */
-- (GAIEcommerceProduct *)setId:(NSString *)productId;
-
-/*!
- Sets the name that is used to indentify the product in GA reports.
- */
-- (GAIEcommerceProduct *)setName:(NSString *)productName;
-
-/*!
- Sets the brand associated with the product in GA reports.
- */
-- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand;
-
-/*!
- Sets the category associated with the product in GA reports.
- */
-- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory;
-
-/*!
- Sets the variant of the product.
- */
-- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant;
-
-/*!
- Sets the price of the product.
- */
-- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice;
-
-/*!
- Sets the quantity of the product. This field is usually not used with product impressions.
- */
-- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity;
-
-/*!
- Sets the coupon code associated with the product. This field is usually not used with product
- impressions.
- */
-- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode;
-
-/*!
- Sets the position of the product on the screen/product impression list, etc.
- */
-- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition;
-
-/*!
- Sets the custom dimension associated with this product.
- */
-- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value;
-
-/*!
- Sets the custom metric associated with this product.
- */
-- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value;
-
-/*!
- Builds an NSDictionary of fields stored in this instance suitable for a product action. The
- index parameter is the index of this product in the product action list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithIndex:(NSUInteger)index;
-
-/*!
- Builds an NSDictionary of fields stored in this instance suitable for an impression list. The
- lIndex parameter is the index of the product impression list while the index parameter is the
- index of this product in that impression list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h
deleted file mode 100644
index e3da1c15..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*!
- @header GAIProductAction.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct transaction/checkout or other product interaction related information for a
- * Google Analytics hit. Use this class to report information about products sold, viewed or
- * refunded. This class is intended to be used with GAIDictionaryBuilder.
- * <br>
- * Typical usage:
- * <code>
- * [tracker set:kGAIScreenName value:@"MyScreen"];
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init];
- * [action setAction:kGAIPAPurchase];
- * [action setTransactionId:@"TT-1234"];
- * [action setRevenue:@3.14];
- * [action setCouponCode:@"EXTRA100"];
- * [builder setProductAction:action];
- * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
- * [product setId:@""PID-1234""];
- * [product setName:@"Space Monkeys!"];
- * [product setPrice:@100];
- * [product setQuantity:@2];
- * [builder addProduct:product];
- * [tracker send:[builder build]];
- * </code>
- */
-@interface GAIEcommerceProductAction : NSObject
-
-/*!
- Sets the product action field for this product action. Valid values can be found in
- GAIEcommerceFields.h under "product action values".
- */
-- (GAIEcommerceProductAction *)setAction:(NSString *)productAction;
-
-/*!
- The unique id associated with the transaction. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId;
-
-/*!
- Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation;
-
-/*!
- Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund
- product actions.
- */
-- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue;
-
-/*!
- Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund
- product actions.
- */
-- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax;
-
-/*!
- Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping;
-
-/*!
- Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and
- kGAIPARefund product actions.
- */
-- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode;
-
-/*!
- Sets the checkout process's progress. This value is used for kGAICheckout and
- kGAICheckoutOptions product actions.
- */
-- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep;
-
-/*!
- Sets the option associated with the checkout. This value is used for kGAICheckout and
- kGAICheckoutOptions product actions.
- */
-- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption;
-
-/*!
- Sets the list name associated with the products in Google Analytics beacons. This value is
- used in kGAIPADetail and kGAIPAClick product actions.
- */
-- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList;
-
-/*!
- Sets the list source name associated with the products in Google Analytics beacons. This value
- is used in kGAIPADetail and kGAIPAClick product actions.
- */
-- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource;
-
-/*!
- Builds an NSDictionary of fields stored in this instance representing this product action.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)build;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h
deleted file mode 100644
index c7bf25af..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- @header GAIEcommercePromotion.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2014 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- * Class to construct promotion related fields for Google Analytics hits. The fields from this class
- * can be used to represent internal promotions that run within an app, such as banners, banner ads
- * etc.
- *
- * Typical usage:
- * <code>
- * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
- * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init];
- * [promotion setId:@"PROMO-ID1234"];
- * [promotion setName:@"Home screen banner"];
- * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction];
- * [builder addPromotion:promotion];
- * [tracker send:builder.build]];
- * </code>
- */
-@interface GAIEcommercePromotion : NSObject
-
-/*!
- Sets the id that is used to identify a promotion in GA reports.
- */
-- (GAIEcommercePromotion *)setId:(NSString *)pid;
-
-/*!
- Sets the name that is used to identify a promotion in GA reports.
- */
-- (GAIEcommercePromotion *)setName:(NSString *)name;
-
-/*!
- Sets the name of the creative associated with the promotion.
- */
-- (GAIEcommercePromotion *)setCreative:(NSString *)creative;
-
-/*!
- Sets the position of the promotion.
- */
-- (GAIEcommercePromotion *)setPosition:(NSString *)position;
-
-/*!
- Builds an NSDictionary of fields stored in this instance. The index parameter is the
- index of this promotion in that promotion list.
- <br>
- Normally, users will have no need to call this method.
- */
-- (NSDictionary *)buildWithIndex:(NSUInteger)index;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h
deleted file mode 100644
index e54cef03..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*!
- @header GAIFields.h
- @abstract Google Analytics iOS SDK Hit Format Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-/*!
- These fields can be used for the wire format parameter names required by
- the |GAITracker| get, set and send methods as well as the set methods in the
- |GAIDictionaryBuilder| class.
- */
-extern NSString *const kGAIUseSecure;
-
-extern NSString *const kGAIHitType;
-extern NSString *const kGAITrackingId;
-extern NSString *const kGAIClientId;
-extern NSString *const kGAIDataSource;
-extern NSString *const kGAIAnonymizeIp;
-extern NSString *const kGAISessionControl;
-extern NSString *const kGAIDeviceModelVersion;
-extern NSString *const kGAIScreenResolution;
-extern NSString *const kGAIViewportSize;
-extern NSString *const kGAIEncoding;
-extern NSString *const kGAIScreenColors;
-extern NSString *const kGAILanguage;
-extern NSString *const kGAIJavaEnabled;
-extern NSString *const kGAIFlashVersion;
-extern NSString *const kGAINonInteraction;
-extern NSString *const kGAIReferrer;
-extern NSString *const kGAILocation;
-extern NSString *const kGAIHostname;
-extern NSString *const kGAIPage;
-extern NSString *const kGAIDescription; // synonym for kGAIScreenName
-extern NSString *const kGAIScreenName; // synonym for kGAIDescription
-extern NSString *const kGAITitle;
-extern NSString *const kGAIAdMobHitId;
-extern NSString *const kGAIAppName;
-extern NSString *const kGAIAppVersion;
-extern NSString *const kGAIAppId;
-extern NSString *const kGAIAppInstallerId;
-extern NSString *const kGAIUserId;
-
-extern NSString *const kGAIEventCategory;
-extern NSString *const kGAIEventAction;
-extern NSString *const kGAIEventLabel;
-extern NSString *const kGAIEventValue;
-
-extern NSString *const kGAISocialNetwork;
-extern NSString *const kGAISocialAction;
-extern NSString *const kGAISocialTarget;
-
-extern NSString *const kGAITransactionId;
-extern NSString *const kGAITransactionAffiliation;
-extern NSString *const kGAITransactionRevenue;
-extern NSString *const kGAITransactionShipping;
-extern NSString *const kGAITransactionTax;
-extern NSString *const kGAICurrencyCode;
-
-extern NSString *const kGAIItemPrice;
-extern NSString *const kGAIItemQuantity;
-extern NSString *const kGAIItemSku;
-extern NSString *const kGAIItemName;
-extern NSString *const kGAIItemCategory;
-
-extern NSString *const kGAICampaignSource;
-extern NSString *const kGAICampaignMedium;
-extern NSString *const kGAICampaignName;
-extern NSString *const kGAICampaignKeyword;
-extern NSString *const kGAICampaignContent;
-extern NSString *const kGAICampaignId;
-extern NSString *const kGAICampaignAdNetworkClickId;
-extern NSString *const kGAICampaignAdNetworkId;
-
-extern NSString *const kGAITimingCategory;
-extern NSString *const kGAITimingVar;
-extern NSString *const kGAITimingValue;
-extern NSString *const kGAITimingLabel;
-
-extern NSString *const kGAIExDescription;
-extern NSString *const kGAIExFatal;
-
-extern NSString *const kGAISampleRate;
-
-extern NSString *const kGAIIdfa;
-extern NSString *const kGAIAdTargetingEnabled;
-
-// hit types
-extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead.");
-extern NSString *const kGAIScreenView;
-extern NSString *const kGAIEvent;
-extern NSString *const kGAISocial;
-extern NSString *const kGAITransaction;
-extern NSString *const kGAIItem;
-extern NSString *const kGAIException;
-extern NSString *const kGAITiming;
-
-/*!
- This class provides several fields and methods useful as wire format parameter
- names. The methods are used for wire format parameter names that are indexed.
- */
-
-@interface GAIFields : NSObject
-
-/*!
- Generates the correct parameter name for a content group with an index.
-
- @param index the index of the content group.
-
- @return an NSString representing the content group parameter for the index.
- */
-+ (NSString *)contentGroupForIndex:(NSUInteger)index;
-
-/*!
- Generates the correct parameter name for a custon dimension with an index.
-
- @param index the index of the custom dimension.
-
- @return an NSString representing the custom dimension parameter for the index.
- */
-+ (NSString *)customDimensionForIndex:(NSUInteger)index;
-
-/*!
- Generates the correct parameter name for a custom metric with an index.
-
- @param index the index of the custom metric.
-
- @return an NSString representing the custom metric parameter for the index.
- */
-+ (NSString *)customMetricForIndex:(NSUInteger)index;
-
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h
deleted file mode 100644
index 06291f2c..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
- @header GAILogger.h
- @abstract Google Analytics iOS SDK Source
- @copyright Copyright 2011 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-
-typedef NS_ENUM(NSUInteger, GAILogLevel) {
- kGAILogLevelNone = 0,
- kGAILogLevelError = 1,
- kGAILogLevelWarning = 2,
- kGAILogLevelInfo = 3,
- kGAILogLevelVerbose = 4
-};
-
-/*!
- Protocol to be used for logging debug and informational messages from the SDK.
- Implementations of this protocol can be provided to the |GAI| class,
- to be used as the logger by the SDK. See the |logger| property in GAI.h.
- */
-@protocol GAILogger<NSObject>
-@required
-
-/*!
- Only messages of |logLevel| and below are logged.
- */
-@property (nonatomic, assign) GAILogLevel logLevel;
-
-/*!
- Logs message with log level |kGAILogLevelVerbose|.
- */
-- (void)verbose:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelInfo|.
- */
-- (void)info:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelWarning|.
- */
-- (void)warning:(NSString *)message;
-
-/*!
- Logs message with log level |kGAILogLevelError|.
- */
-- (void)error:(NSString *)message;
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h
deleted file mode 100644
index de19def0..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
- @header GAITrackedViewController.h
- @abstract Google Analytics for iOS Tracked View Controller Header
- @copyright Copyright 2012 Google Inc. All rights reserved.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@protocol GAITracker;
-
-/*!
- Extends UIViewController to generate Google Analytics screenview calls
- whenever the view appears; this is done by overriding the `viewDidAppear:`
- method. The screen name must be set for any tracking calls to be made.
-
- By default, this will use [GAI defaultTracker] for tracking calls, but one can
- override this by setting the tracker property.
- */
-@interface GAITrackedViewController : UIViewController
-
-/*!
- The tracker on which view tracking calls are be made, or `nil`, in which case
- [GAI defaultTracker] will be used.
- */
-@property(nonatomic, assign) id<GAITracker> tracker;
-/*!
- The screen name, for purposes of Google Analytics tracking. If this is `nil`,
- no tracking calls will be made.
- */
-@property(nonatomic, copy) NSString *screenName;
-
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h
deleted file mode 100644
index fdc5c5df..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
- @header GAITracker.h
- @abstract Google Analytics iOS SDK Tracker Header
- @copyright Copyright 2013 Google Inc. All rights reserved.
-*/
-
-#import <Foundation/Foundation.h>
-
-/*!
- Google Analytics tracking interface. Obtain instances of this interface from
- [GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
- and exceptions. The implementation of this interface is thread-safe, and no
- calls are expected to block or take a long time. All network and disk activity
- will take place in the background.
- */
-@protocol GAITracker<NSObject>
-
-/*!
- Name of this tracker.
- */
-@property(nonatomic, readonly) NSString *name;
-
-/*!
- Allow collection of IDFA and related fields if set to true. Default is false.
- */
-@property(nonatomic) BOOL allowIDFACollection;
-
-/*!
- Set a tracking parameter.
-
- @param parameterName The parameter name.
-
- @param value The value to set for the parameter. If this is nil, the
- value for the parameter will be cleared.
- */
-- (void)set:(NSString *)parameterName
- value:(NSString *)value;
-
-/*!
- Get a tracking parameter.
-
- @param parameterName The parameter name.
-
- @returns The parameter value, or nil if no value for the given parameter is
- set.
- */
-- (NSString *)get:(NSString *)parameterName;
-
-/*!
- Queue tracking information with the given parameter values.
-
- @param parameters A map from parameter names to parameter values which will be
- set just for this piece of tracking information, or nil for none.
- */
-- (void)send:(NSDictionary *)parameters;
-
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h
deleted file mode 100644
index dde480ac..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//UniversalAnalyticsPlugin.h
-//Created by Daniel Wilson 2013-09-19
-
-#import <Foundation/Foundation.h>
-#import <Cordova/CDV.h>
-#import "GAI.h"
-
-@interface UniversalAnalyticsPlugin : CDVPlugin {
- bool _trackerStarted;
- bool _debugMode;
- NSMutableDictionary *_customDimensions;
-}
-
-- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command;
-- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command;
-- (void) setUserId: (CDVInvokedUrlCommand*)command;
-- (void) setAppVersion: (CDVInvokedUrlCommand*)command;
-- (void) getVar: (CDVInvokedUrlCommand*)command;
-- (void) setVar: (CDVInvokedUrlCommand*)command;
-- (void) dispatch: (CDVInvokedUrlCommand*)command;
-- (void) debugMode: (CDVInvokedUrlCommand*)command;
-- (void) setOptOut: (CDVInvokedUrlCommand*)command;
-- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command;
-- (void) addCustomDimension: (CDVInvokedUrlCommand*)command;
-- (void) trackEvent: (CDVInvokedUrlCommand*)command;
-- (void) trackMetric: (CDVInvokedUrlCommand*)command;
-- (void) trackTiming: (CDVInvokedUrlCommand*)command;
-- (void) trackView: (CDVInvokedUrlCommand*)command;
-- (void) trackException: (CDVInvokedUrlCommand*)command;
-- (void) addTransaction: (CDVInvokedUrlCommand*)command;
-- (void) addTransactionItem: (CDVInvokedUrlCommand*)command;
-
-@end
-
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
deleted file mode 100644
index 12355da6..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
+++ /dev/null
@@ -1,543 +0,0 @@
-//UniversalAnalyticsPlugin.m
-//Created by Daniel Wilson 2013-09-19
-
-#import "UniversalAnalyticsPlugin.h"
-#import "GAI.h"
-#import "GAIDictionaryBuilder.h"
-#import "GAIFields.h"
-
-@implementation UniversalAnalyticsPlugin
-
-- (void) pluginInitialize
-{
- _debugMode = false;
- _trackerStarted = false;
- _customDimensions = nil;
-}
-
-- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString* accountId = [command.arguments objectAtIndex:0];
- NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1];
-
- if ([dispatchPeriod isKindOfClass:[NSNumber class]])
- [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue];
- else
- [GAI sharedInstance].dispatchInterval = 30;
-
- [[GAI sharedInstance] trackerWithTrackingId:accountId];
-
- _trackerStarted = true;
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
- /* NSLog(@"successfully started GAI tracker"); */
-}
-
-- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command
-{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue];
-}
-
-- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker
-{
- if (_customDimensions) {
- for (NSString *key in _customDimensions.allKeys) {
- NSString *value = [_customDimensions objectForKey:key];
-
- NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
- f.numberStyle = NSNumberFormatterDecimalStyle;
- NSNumber *myKey = [f numberFromString:key];
-
- /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */
- [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue]
- value:value];
- }
- }
-}
-
-- (void) getVar: (CDVInvokedUrlCommand*) command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- NSString* parameterName = [command.arguments objectAtIndex:0];
- NSString* result = [tracker get:parameterName];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) setVar: (CDVInvokedUrlCommand*) command
-{
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- NSString* parameterName = [command.arguments objectAtIndex:0];
- NSString* parameter = [command.arguments objectAtIndex:1];
- [tracker set:parameterName value:parameter];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) dispatch: (CDVInvokedUrlCommand*) command
-{
- [[GAI sharedInstance] dispatch];
-}
-
-- (void) debugMode: (CDVInvokedUrlCommand*) command
-{
- _debugMode = true;
- [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
-}
-
-- (void) setUserId: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* userId = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:@"&uid" value: userId];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* anonymize = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:kGAIAnonymizeIp value:anonymize];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setOptOut: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- bool optout = [[command.arguments objectAtIndex:0] boolValue];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [[GAI sharedInstance] setOptOut:optout];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) setAppVersion: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSString* version = [command.arguments objectAtIndex:0];
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [tracker set:@"&av" value: version];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- bool enabled = [[command.arguments objectAtIndex:0] boolValue];
- [[GAI sharedInstance] setTrackUncaughtExceptions:enabled];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) addCustomDimension: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
- NSNumber* key = [command.arguments objectAtIndex:0];
- NSString* value = [command.arguments objectAtIndex:1];
-
- if ( ! _customDimensions) {
- _customDimensions = [[NSMutableDictionary alloc] init];
- }
-
- _customDimensions[key.stringValue] = value;
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-}
-
-- (void) trackMetric: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSNumber *key = nil;
- NSString *value = nil;
-
- if ([command.arguments count] > 0)
- key = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- value = [command.arguments objectAtIndex:1];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value];
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackEvent: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString *category = nil;
- NSString *action = nil;
- NSString *label = nil;
- NSNumber *value = nil;
-
- if ([command.arguments count] > 0)
- category = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- action = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- label = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- value = [command.arguments objectAtIndex:3];
-
- bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- GAIDictionaryBuilder *builder = [GAIDictionaryBuilder
- createEventWithCategory: category //required
- action: action //required
- label: label
- value: value];
- if(newSession){
- [builder set:@"start" forKey:kGAISessionControl];
- }
- [tracker send:[builder build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
-
- }];
-
-}
-
-- (void) trackException: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString *description = nil;
- NSNumber *fatal = nil;
-
- if ([command.arguments count] > 0)
- description = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- fatal = [command.arguments objectAtIndex:1];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
-
- [tracker send:[[GAIDictionaryBuilder
- createExceptionWithDescription: description
- withFatal: fatal] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackView: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
- NSString* screenName = [command.arguments objectAtIndex:0];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
- [self addCustomDimensionsToTracker:tracker];
-
- NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
- GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];
-
- if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) {
- [[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
- }
-
- bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue];
- if(newSession){
- [openParams set:@"start" forKey:kGAISessionControl];
- }
-
- NSDictionary *hitParamsDict = [openParams build];
-
- [tracker set:kGAIScreenName value:screenName];
- [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) trackTiming: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
-
- NSString *category = nil;
- NSNumber *intervalInMilliseconds = nil;
- NSString *name = nil;
- NSString *label = nil;
-
- if ([command.arguments count] > 0)
- category = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- intervalInMilliseconds = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- name = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- label = [command.arguments objectAtIndex:3];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
- [self addCustomDimensionsToTracker:tracker];
-
- [tracker send:[[GAIDictionaryBuilder
- createTimingWithCategory: category //required
- interval: intervalInMilliseconds //required
- name: name
- label: label] build]];
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-- (void) addTransaction: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
- CDVPluginResult* pluginResult = nil;
-
- NSString *transactionId = nil;
- NSString *affiliation = nil;
- NSNumber *revenue = nil;
- NSNumber *tax = nil;
- NSNumber *shipping = nil;
- NSString *currencyCode = nil;
-
-
- if ([command.arguments count] > 0)
- transactionId = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- affiliation = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- revenue = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- tax = [command.arguments objectAtIndex:3];
-
- if ([command.arguments count] > 4)
- shipping = [command.arguments objectAtIndex:4];
-
- if ([command.arguments count] > 5)
- currencyCode = [command.arguments objectAtIndex:5];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
-
- [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID
- affiliation:affiliation // (NSString) Affiliation
- revenue:revenue // (NSNumber) Order revenue (including tax and shipping)
- tax:tax // (NSNumber) Tax
- shipping:shipping // (NSNumber) Shipping
- currencyCode:currencyCode] build]]; // (NSString) Currency code
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-
-
-- (void) addTransactionItem: (CDVInvokedUrlCommand*)command
-{
- CDVPluginResult* pluginResult = nil;
-
- if ( ! _trackerStarted) {
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- return;
- }
-
- [self.commandDelegate runInBackground:^{
-
- CDVPluginResult* pluginResult = nil;
- NSString *transactionId = nil;
- NSString *name = nil;
- NSString *sku = nil;
- NSString *category = nil;
- NSNumber *price = nil;
- NSNumber *quantity = nil;
- NSString *currencyCode = nil;
-
-
- if ([command.arguments count] > 0)
- transactionId = [command.arguments objectAtIndex:0];
-
- if ([command.arguments count] > 1)
- name = [command.arguments objectAtIndex:1];
-
- if ([command.arguments count] > 2)
- sku = [command.arguments objectAtIndex:2];
-
- if ([command.arguments count] > 3)
- category = [command.arguments objectAtIndex:3];
-
- if ([command.arguments count] > 4)
- price = [command.arguments objectAtIndex:4];
-
- if ([command.arguments count] > 5)
- quantity = [command.arguments objectAtIndex:5];
-
- if ([command.arguments count] > 6)
- currencyCode = [command.arguments objectAtIndex:6];
-
- id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
-
-
- [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID
- name:name // (NSString) Product Name
- sku:sku // (NSString) Product SKU
- category:category // (NSString) Product category
- price:price // (NSNumber) Product price
- quantity:quantity // (NSNumber) Product quantity
- currencyCode:currencyCode] build]]; // (NSString) Currency code
-
-
- pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }];
-}
-
-@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a
deleted file mode 100644
index 9813beaf..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a
deleted file mode 100644
index 45ca87e8..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js
deleted file mode 100644
index 6b789895..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js
+++ /dev/null
@@ -1,121 +0,0 @@
-define(function(require) {
-
- var Disposable = require('lavaca/util/Disposable');
- var Config = require('lavaca/util/Config');
- var Device = require('lavaca/env/Device');
- var ga = require('google-analytics');
-
- var AnalyticsService = Disposable.extend(function AnalyticsService() {
- Disposable.call(this);
- this.appId = Config.get('google_analytics_id');
- this.webId = Config.get('google_analytics_web_id');
- this.isWeb = this.webId.length;
-
- if (!Device.isCordova() && this.isWeb) {
- ga('create', this.webId);
- }
-
- document.addEventListener('deviceready', this.init.bind(this), false);
- }, {
- ready: false,
- queue: [],
- isWeb: false,
- //isApp: false, //TODO need to research when Device.isCordova() is valid in Lavaca load flow
- init: function() {
- if (Device.isCordova() && analytics) {
- this.ready = true;
- analytics.startTrackerWithId(this.appId);
- this.processQueue();
- this.isWeb = false;
- }
- },
- trackView: function(screen) {
- if (Device.isCordova()) {
- if (this.ready) {
- analytics.trackView(screen);
- } else {
- this.queue.push({
- action: 'trackView',
- params: [screen]
- });
- }
- } else if (this.isWeb) {
- ga('send', 'pageview', {
- 'title': screen
- });
- }
- },
- setUserId: function() {
- throw 'setUserId is not implemented for Lavaca';
- },
- setAnonymizeIp: function() {
- throw 'setAnonymizeIp is not implemented for Lavaca';
- },
- setOptOut: function() {
- throw 'setOptOut is not implemented for Lavaca';
- },
- setAppVersion: function() {
- throw 'setAppVersion is not implemented for Lavaca';
- },
- debugMode: function() {
- throw 'debugMode is not implemented for Lavaca';
- },
- trackEvent: function(category, action, label, value) {
- action = action || '';
- label = label || '';
- value = value || 0;
- if (Device.isCordova()) {
- if (this.ready) {
- analytics.trackEvent(category, action, label, value);
- } else {
- this.queue.push({
- action: 'trackEvent',
- params: [category, action, label, value]
- });
- }
- } else if (this.isWeb) {
- ga('send', {
- 'hitType': 'event',
- 'eventCategory': category,
- 'eventAction': action,
- 'eventLabel': label,
- 'eventValue': value
- });
- }
- },
- trackTiming: function(category, intervalInMilliseconds, name, label) {
- action = action || '';
- label = label || '';
- value = value || 0;
- if (Device.isCordova()) {
- if (this.ready) {
- analytics.trackTiming(category, intervalInMilliseconds, name, label);
- } else {
- this.queue.push({
- action: 'trackTiming',
- params: [category, intervalInMilliseconds, name, label]
- });
- }
- } else if (this.isWeb) {
- ga('send', {
- 'hitType': 'timing',
- 'timingCategory': category,
- 'timingValue': intervalInMilliseconds,
- 'timingVar': name,
- 'timingLabel': label
- });
- }
- },
- processQueue: function() {
- if (this.queue) {
- var emptyFunction = function() {};
- for (var i = 0; i < this.queue.length; ++i) {
- cordova.exec(emptyFunction, emptyFunction,
- 'UniversalAnalytics', this.queue[i].action, this.queue[i].params);
- }
- }
- }
- });
-
- return new AnalyticsService();
-});
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/package.json b/StoneIsland/plugins/cordova-plugin-google-analytics/package.json
deleted file mode 100644
index 548de86b..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "cordova-plugin-google-analytics",
- "version": "1.8.3",
- "description": "Google Universal Analytics Plugin",
- "cordova": {
- "id": "cordova-plugin-google-analytics",
- "platforms": [
- "android",
- "ios"
- ]
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/danwilson/google-analytics-plugin.git"
- },
- "keywords": [
- "cordova",
- "googleanalytics",
- "ecosystem:cordova",
- "cordova-android",
- "cordova-ios",
- "analytics",
- "google",
- "universal",
- "universalanalytics"
- ],
- "author": "Dan Wilson",
- "license": "MIT"
-}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml b/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml
deleted file mode 100644
index 55a8db9d..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android"
- id="cordova-plugin-google-analytics"
- version="1.8.3">
- <engines>
- <engine name="cordova" version=">=3.0.0" />
- </engines>
- <name>Google Universal Analytics Plugin</name>
- <description>Simple tracking (screens/events) for Google Analytics SDK 3.14 (iOS), SDK 4.0 (Android), Browsers and WP8</description>
- <author>Daniel C. Wilson</author>
- <license>MIT License</license>
- <js-module src="www/analytics.js" name="UniversalAnalytics">
- <!-- 'analytics' is deprecated, but supported to ease the transition -->
- <clobbers target="analytics" />
- <clobbers target="ga" />
- </js-module>
-
- <platform name="browser">
- <js-module src="browser/UniversalAnalyticsProxy.js" name="UniversalAnalyticsProxy">
- <runs />
- </js-module>
- </platform>
-
- <platform name="ios">
- <config-file target="config.xml" parent="/*">
- <feature name="UniversalAnalytics">
- <param name="ios-package" value="UniversalAnalyticsPlugin" />
- </feature>
- </config-file>
-
- <header-file src="ios/UniversalAnalyticsPlugin.h" />
- <source-file src="ios/UniversalAnalyticsPlugin.m" />
- <source-file src="ios/libGoogleAnalyticsServices.a" framework="true" />
- <source-file src="ios/libAdIdAccess.a" framework="true" />
- <header-file src="ios/GAIDictionaryBuilder.h" />
- <header-file src="ios/GAIFields.h" />
- <header-file src="ios/GAILogger.h" />
- <header-file src="ios/GAITrackedViewController.h" />
- <header-file src="ios/GAI.h" />
- <header-file src="ios/GAITracker.h" />
- <header-file src="ios/GAIEcommerceFields.h" />
- <header-file src="ios/GAIEcommerceProduct.h" />
- <header-file src="ios/GAIEcommerceProductAction.h" />
- <header-file src="ios/GAIEcommercePromotion.h" />
-
- <framework src="SystemConfiguration.framework" />
- <framework src="CoreData.framework" />
- <framework src="AdSupport.framework" />
- <framework src="libz.dylib" />
- <framework src="libsqlite3.dylib" />
- </platform>
-
- <platform name="android">
- <framework src="com.google.android.gms:play-services-analytics:+" />
-
- <config-file target="res/xml/config.xml" parent="/*">
- <feature name="UniversalAnalytics">
- <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
- </feature>
- </config-file>
- <config-file target="AndroidManifest.xml" parent="/*">
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- </config-file>
- <!-- Add support for devices without Google Play Services installed. -->
- <config-file target="AndroidManifest.xml" parent="/manifest/application">
- <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver" android:enabled="true">
- <intent-filter>
- <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
- </intent-filter>
- </receiver>
- <service android:name="com.google.android.gms.analytics.AnalyticsService" android:enabled="true" android:exported="false"/>
- <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:enabled="true" android:exported="true">
- <intent-filter>
- <action android:name="com.android.vending.INSTALL_REFERRER" />
- </intent-filter>
- </receiver>
- <service android:name="com.google.android.gms.analytics.CampaignTrackingService" android:enabled="true" android:exported="false"/>
- </config-file>
- <source-file src="android/UniversalAnalyticsPlugin.java" target-dir="src/com/danielcwilson/plugins/analytics" />
- </platform>
-
- <platform name="wp8">
- <config-file target="config.xml" parent="/*">
- <feature name="UniversalAnalytics">
- <param name="wp-package" value="UniversalAnalyticsPlugin" />
- </feature>
- </config-file>
-
- <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
- <Capability Name="ID_CAP_NETWORKING" />
- </config-file>
-
- <source-file src="wp8/UniversalAnalytics.cs" />
- <source-file src="wp8/PhoneHelpers.cs" />
- <source-file src="wp8/PhoneNameResolver.cs" />
- <source-file src="wp8/PlatformInfoProvider.WP.cs" />
- </platform>
-</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts b/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts
deleted file mode 100644
index d361ead8..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-declare class UniversalAnalyticsPlugin {
-
- /** In your 'deviceready' handler, call this to set up your Analytics tracker,
- where id is your Google Analytics Mobile App property */
- public startTrackerWithId(id:String, dispatchPeriod?:Number, successCallback?:Function, errorCallback?:Function):void;
-
- /** Sets a UserId */
- public setUserId(id:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Sets a setAnonymizeIp */
- public setAnonymizeIp(anonymize:Boolean, successCallback?:Function, errorCallback?:Function):void;
-
- /** Sets a setOptOut */
- public setOptOut(optout:Boolean, successCallback?:Function, errorCallback?:Function): void;
-
- /** Sets a setAllowIDFACollection */
- public setAllowIDFACollection(enable:Boolean, successCallback?:Function, errorCallback?:Function):void;
-
- /** Sets a AppVersion */
- public setAppVersion(version:string, successCallback?:Function, errorCallback?:Function):void;
-
- /** Gets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */
- public getVar(variable:string, successCallback?:Function, errorCallback?:Function):void;
-
- /** Sets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */
- public setVar(variable:string, value:string, successCallback?:Function, errorCallback?:Function):void;
-
- /** To manually dispatch any data */
- public dispatch(successCallback?:Function, errorCallback?:Function);
-
- /** Enables verbose logging */
- public debugMode(successCallback?:Function, errorCallback?:Function):void;
-
- /** Track a Custom Metric */
- public trackMetric(key:number, value:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Track a Screen (PageView) */
- public trackView(screen:String, campaignUrl?:string, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void;
-
- /** Add a Custom Dimension */
- public addCustomDimension(key:number, value:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Track an Event */
- public trackEvent(category:String, action:String, label?:String, value?:Number, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void;
-
- /** Track an Exception
- https://developers.google.com/analytics/devguides/collection/android/v3/exceptions */
- public trackException(description:String, fatal:Boolean, successCallback?:Function, errorCallback?:Function):void;
-
- /** Track User Timing (App Speed) */
- public trackTiming(category:String, intervalInMilliseconds?:Number, name?:String, label?:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Add a Transaction (Google Analytics e-Ccommerce Tracking)
- https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
- public addTransaction(transactionId:String, affiliation:String, revenue:Number, tax:Number, shipping:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Add a Transaction Item (Ecommerce) */
- public addTransactionItem(transactionId:String, name:String, sku:String, category:String, price:Number, quantity:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void;
-
- /** Enable/disable automatic reporting of uncaught exceptions */
- public enableUncaughtExceptionReporting(enable:Boolean, successCallback?:Function, errorCallback?:Function):void;
-}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs
deleted file mode 100644
index 4bf4f895..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Xml;
-
-namespace UniversalAnalyticsPlugin
-{
- internal static class Helpers
- {
- public static string GetAppAttribute(string attributeName)
- {
- try
- {
- XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
- xmlReaderSettings.XmlResolver = new XmlXapResolver();
- using (XmlReader xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings))
- {
- xmlReader.ReadToDescendant("App");
- if (!xmlReader.IsStartElement())
- {
- throw new FormatException("WMAppManifest.xml is missing");
- }
- return xmlReader.GetAttribute(attributeName);
- }
- }
- catch
- {
- return null;
- }
- }
- }
-}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs
deleted file mode 100644
index 261739d0..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * Copyright (c) 2013 by Alan Mendelevich
- *
- * Licensed under MIT license.
- *
- * See license.txt for details.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace UniversalAnalyticsPlugin
-{
- public static class PhoneNameResolver
- {
- public static CanonicalPhoneName Resolve(string manufacturer, string model)
- {
- var manufacturerNormalized = manufacturer.Trim().ToUpper();
-
- switch (manufacturerNormalized)
- {
- case "NOKIA":
- case "MICROSOFT":
- case "MICROSOFTMDG":
- return ResolveNokia(manufacturer, model);
- case "HTC":
- return ResolveHtc(manufacturer, model);
- case "SAMSUNG":
- return ResolveSamsung(manufacturer, model);
- case "LG":
- return ResolveLg(manufacturer, model);
- case "HUAWEI":
- return ResolveHuawei(manufacturer, model);
- default:
- return new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = manufacturer,
- CanonicalModel = model,
- IsResolved = false
- };
- }
- }
-
- private static CanonicalPhoneName ResolveHuawei(string manufacturer, string model)
- {
- var modelNormalized = model.Trim().ToUpper();
-
- var result = new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = "HUAWEI",
- CanonicalModel = model,
- IsResolved = false
- };
-
- var lookupValue = modelNormalized;
-
- if (lookupValue.StartsWith("HUAWEI H883G"))
- {
- lookupValue = "HUAWEI H883G";
- }
-
- if (lookupValue.StartsWith("HUAWEI W1"))
- {
- lookupValue = "HUAWEI W1";
- }
-
- if (modelNormalized.StartsWith("HUAWEI W2"))
- {
- lookupValue = "HUAWEI W2";
- }
-
- if (huaweiLookupTable.ContainsKey(lookupValue))
- {
- var modelMetadata = huaweiLookupTable[lookupValue];
- result.CanonicalModel = modelMetadata.CanonicalModel;
- result.Comments = modelMetadata.Comments;
- result.IsResolved = true;
- }
-
- return result;
- }
-
- private static CanonicalPhoneName ResolveLg(string manufacturer, string model)
- {
- var modelNormalized = model.Trim().ToUpper();
-
- var result = new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = "LG",
- CanonicalModel = model,
- IsResolved = false
- };
-
- var lookupValue = modelNormalized;
-
- if (lookupValue.StartsWith("LG-C900"))
- {
- lookupValue = "LG-C900";
- }
-
- if (lookupValue.StartsWith("LG-E900"))
- {
- lookupValue = "LG-E900";
- }
-
- if (lgLookupTable.ContainsKey(lookupValue))
- {
- var modelMetadata = lgLookupTable[lookupValue];
- result.CanonicalModel = modelMetadata.CanonicalModel;
- result.Comments = modelMetadata.Comments;
- result.IsResolved = true;
- }
-
- return result;
- }
-
- private static CanonicalPhoneName ResolveSamsung(string manufacturer, string model)
- {
- var modelNormalized = model.Trim().ToUpper();
-
- var result = new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = "SAMSUNG",
- CanonicalModel = model,
- IsResolved = false
- };
-
- var lookupValue = modelNormalized;
-
- if (lookupValue.StartsWith("GT-S7530"))
- {
- lookupValue = "GT-S7530";
- }
-
- if (lookupValue.StartsWith("SGH-I917"))
- {
- lookupValue = "SGH-I917";
- }
-
- if (samsungLookupTable.ContainsKey(lookupValue))
- {
- var modelMetadata = samsungLookupTable[lookupValue];
- result.CanonicalModel = modelMetadata.CanonicalModel;
- result.Comments = modelMetadata.Comments;
- result.IsResolved = true;
- }
-
- return result;
- }
-
- private static CanonicalPhoneName ResolveHtc(string manufacturer, string model)
- {
- var modelNormalized = model.Trim().ToUpper();
-
- var result = new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = "HTC",
- CanonicalModel = model,
- IsResolved = false
- };
-
- var lookupValue = modelNormalized;
-
- if (lookupValue.StartsWith("A620"))
- {
- lookupValue = "A620";
- }
-
- if (lookupValue.StartsWith("C625"))
- {
- lookupValue = "C625";
- }
-
- if (lookupValue.StartsWith("C620"))
- {
- lookupValue = "C620";
- }
-
- if (htcLookupTable.ContainsKey(lookupValue))
- {
- var modelMetadata = htcLookupTable[lookupValue];
- result.CanonicalModel = modelMetadata.CanonicalModel;
- result.Comments = modelMetadata.Comments;
- result.IsResolved = true;
- }
-
- return result;
- }
-
- private static CanonicalPhoneName ResolveNokia(string manufacturer, string model)
- {
- var modelNormalized = model.Trim().ToUpper();
-
- var result = new CanonicalPhoneName()
- {
- ReportedManufacturer = manufacturer,
- ReportedModel = model,
- CanonicalManufacturer = "NOKIA",
- CanonicalModel = model,
- IsResolved = false
- };
-
- var lookupValue = modelNormalized;
- if (modelNormalized.StartsWith("RM-"))
- {
- var rms = Regex.Match(modelNormalized, "(RM-)([0-9]+)");
- lookupValue = rms.Value;
- }
-
- if (nokiaLookupTable.ContainsKey(lookupValue))
- {
- var modelMetadata = nokiaLookupTable[lookupValue];
-
- if (!string.IsNullOrEmpty(modelMetadata.CanonicalManufacturer))
- {
- result.CanonicalManufacturer = modelMetadata.CanonicalManufacturer;
- }
- result.CanonicalModel = modelMetadata.CanonicalModel;
- result.Comments = modelMetadata.Comments;
- result.IsResolved = true;
- }
-
- return result;
- }
-
-
- private static Dictionary<string, CanonicalPhoneName> huaweiLookupTable = new Dictionary<string, CanonicalPhoneName>()
- {
- // Huawei W1
- { "HUAWEI H883G", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } },
- { "HUAWEI W1", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } },
-
- // Huawei Ascend W2
- { "HUAWEI W2", new CanonicalPhoneName() { CanonicalModel = "Ascend W2" } },
- };
-
- private static Dictionary<string, CanonicalPhoneName> lgLookupTable = new Dictionary<string, CanonicalPhoneName>()
- {
- // Optimus 7Q/Quantum
- { "LG-C900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7Q/Quantum" } },
-
- // Optimus 7
- { "LG-E900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7" } },
-
- // Jil Sander
- { "LG-E906", new CanonicalPhoneName() { CanonicalModel = "Jil Sander" } },
-
- // Lancet
- { "LGVW820", new CanonicalPhoneName() { CanonicalModel = "Lancet" } },
- };
-
- private static Dictionary<string, CanonicalPhoneName> samsungLookupTable = new Dictionary<string, CanonicalPhoneName>()
- {
- // OMNIA W
- { "GT-I8350", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
- { "GT-I8350T", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
- { "OMNIA W", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
-
- // OMNIA 7
- { "GT-I8700", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
- { "OMNIA7", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
-
- // OMNIA M
- { "GT-S7530", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
-
- // Focus
- { "I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } },
- { "SGH-I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } },
-
- // Focus 2
- { "SGH-I667", new CanonicalPhoneName() { CanonicalModel = "Focus 2" } },
-
- // Focus Flash
- { "SGH-I677", new CanonicalPhoneName() { CanonicalModel = "Focus Flash" } },
-
- // Focus S
- { "HADEN", new CanonicalPhoneName() { CanonicalModel = "Focus S" } },
- { "SGH-I937", new CanonicalPhoneName() { CanonicalModel = "Focus S" } },
-
- // ATIV S
- { "GT-I8750", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } },
- { "SGH-T899M", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } },
-
- // ATIV Odyssey
- { "SCH-I930", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey" } },
- { "SCH-R860U", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey", Comments="US Cellular" } },
-
- // ATIV S Neo
- { "SPH-I800", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="Sprint" } },
- { "SGH-I187", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="AT&T" } },
- { "GT-I8675", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo" } },
-
- // ATIV SE
- { "SM-W750V", new CanonicalPhoneName() { CanonicalModel = "ATIV SE", Comments="Verizon" } },
- };
-
- private static Dictionary<string, CanonicalPhoneName> htcLookupTable = new Dictionary<string, CanonicalPhoneName>()
- {
- // Surround
- { "7 MONDRIAN T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
- { "T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
- { "SURROUND", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
- { "SURROUND T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
-
- // Mozart
- { "7 MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "HTC MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "MERSAD 7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "PD67100", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
- { "T8697", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
-
- // Pro
- { "7 PRO T7576", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
- { "MWP6885", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
- { "USCCHTC-PC93100", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
-
- // Arrive
- { "PC93100", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } },
- { "T7575", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } },
-
- // HD2
- { "HD2", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
- { "HD2 LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
- { "LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
-
- // HD7
- { "7 SCHUBERT T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "GOLD", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "HD7 T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "MONDRIAN", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "SCHUBERT", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "Schubert T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
- { "T9296", new CanonicalPhoneName() { CanonicalModel = "HD7", Comments = "Telstra, AU" } },
- { "TOUCH-IT HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
-
- // HD7S
- { "T9295", new CanonicalPhoneName() { CanonicalModel = "HD7S" } },
-
- // Trophy
- { "7 TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
- { "7 TROPHY T8686", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
- { "PC40100", new CanonicalPhoneName() { CanonicalModel = "Trophy", Comments = "Verizon" } },
- { "SPARK", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
- { "TOUCH-IT TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
- { "MWP6985", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
-
- // 8S
- { "A620", new CanonicalPhoneName() { CanonicalModel = "8S" } },
- { "WINDOWS PHONE 8S BY HTC", new CanonicalPhoneName() { CanonicalModel = "8S" } },
-
- // 8X
- { "C620", new CanonicalPhoneName() { CanonicalModel = "8X" } },
- { "C625", new CanonicalPhoneName() { CanonicalModel = "8X" } },
- { "HTC6990LVW", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="Verizon" } },
- { "PM23300", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="AT&T" } },
- { "WINDOWS PHONE 8X BY HTC", new CanonicalPhoneName() { CanonicalModel = "8X" } },
-
- // 8XT
- { "HTCPO881", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
- { "HTCPO881 SPRINT", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
- { "HTCPO881 HTC", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
-
- // Titan
- { "ETERNITY", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "China" } },
- { "PI39100", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "AT&T" } },
- { "TITAN X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
- { "ULTIMATE", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
- { "X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
- { "X310E TITAN", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
-
- // Titan II
- { "PI86100", new CanonicalPhoneName() { CanonicalModel = "Titan II", Comments = "AT&T" } },
- { "RADIANT", new CanonicalPhoneName() { CanonicalModel = "Titan II" } },
-
- // Radar
- { "RADAR", new CanonicalPhoneName() { CanonicalModel = "Radar" } },
- { "RADAR 4G", new CanonicalPhoneName() { CanonicalModel = "Radar", Comments = "T-Mobile USA" } },
- { "RADAR C110E", new CanonicalPhoneName() { CanonicalModel = "Radar" } },
-
- // One M8
- { "HTC6995LVW", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Verizon" } },
- { "0P6B180", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="AT&T" } },
- { "0P6B140", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Dual SIM?" } },
- };
-
- private static Dictionary<string, CanonicalPhoneName> nokiaLookupTable = new Dictionary<string, CanonicalPhoneName>()
- {
- // Lumia 505
- { "LUMIA 505", new CanonicalPhoneName() { CanonicalModel = "Lumia 505" } },
- // Lumia 510
- { "LUMIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } },
- { "NOKIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } },
- // Lumia 610
- { "LUMIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
- { "LUMIA 610 NFC", new CanonicalPhoneName() { CanonicalModel = "Lumia 610", Comments = "NFC" } },
- { "NOKIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
- { "NOKIA 610C", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
- // Lumia 620
- { "LUMIA 620", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } },
- { "RM-846", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } },
- // Lumia 710
- { "LUMIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } },
- { "NOKIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } },
- // Lumia 800
- { "LUMIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
- { "LUMIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
- { "NOKIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
- { "NOKIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800", Comments = "China" } },
- // Lumia 810
- { "RM-878", new CanonicalPhoneName() { CanonicalModel = "Lumia 810" } },
- // Lumia 820
- { "RM-824", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
- { "RM-825", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
- { "RM-826", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
- // Lumia 822
- { "RM-845", new CanonicalPhoneName() { CanonicalModel = "Lumia 822", Comments = "Verizon" } },
- // Lumia 900
- { "LUMIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } },
- { "NOKIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } },
- // Lumia 920
- { "RM-820", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
- { "RM-821", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
- { "RM-822", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
- { "RM-867", new CanonicalPhoneName() { CanonicalModel = "Lumia 920", Comments = "920T" } },
- { "NOKIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
- { "LUMIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
- // Lumia 520
- { "RM-914", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } },
- { "RM-915", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } },
- { "RM-913", new CanonicalPhoneName() { CanonicalModel = "Lumia 520", Comments="520T" } },
- // Lumia 521?
- { "RM-917", new CanonicalPhoneName() { CanonicalModel = "Lumia 521", Comments="T-Mobile 520" } },
- // Lumia 720
- { "RM-885", new CanonicalPhoneName() { CanonicalModel = "Lumia 720" } },
- { "RM-887", new CanonicalPhoneName() { CanonicalModel = "Lumia 720", Comments="China 720T" } },
- // Lumia 928
- { "RM-860", new CanonicalPhoneName() { CanonicalModel = "Lumia 928" } },
- // Lumia 925
- { "RM-892", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
- { "RM-893", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
- { "RM-910", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
- { "RM-955", new CanonicalPhoneName() { CanonicalModel = "Lumia 925", Comments="China 925T" } },
- // Lumia 1020
- { "RM-875", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
- { "RM-876", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
- { "RM-877", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
- // Lumia 625
- { "RM-941", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
- { "RM-942", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
- { "RM-943", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
- // Lumia 1520
- { "RM-937", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } },
- { "RM-938", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } },
- { "RM-939", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } },
- { "RM-940", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } },
- // Lumia 525
- { "RM-998", new CanonicalPhoneName() { CanonicalModel = "Lumia 525" } },
- // Lumia 1320
- { "RM-994", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
- { "RM-995", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
- { "RM-996", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
- // Lumia Icon
- { "RM-927", new CanonicalPhoneName() { CanonicalModel = "Lumia Icon", Comments="Verizon" } },
- // Lumia 630
- { "RM-976", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
- { "RM-977", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
- { "RM-978", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
- { "RM-979", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
- // Lumia 635
- { "RM-974", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } },
- { "RM-975", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } },
- { "RM-1078", new CanonicalPhoneName() { CanonicalModel = "Lumia 635", Comments="Sprint" } },
- // Lumia 526
- { "RM-997", new CanonicalPhoneName() { CanonicalModel = "Lumia 526", Comments="China Mobile" } },
- // Lumia 930
- { "RM-1045", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } },
- { "RM-1087", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } },
- // Lumia 636
- { "RM-1027", new CanonicalPhoneName() { CanonicalModel = "Lumia 636", Comments="China" } },
- // Lumia 638
- { "RM-1010", new CanonicalPhoneName() { CanonicalModel = "Lumia 638", Comments="China" } },
- // Lumia 530
- { "RM-1017", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } },
- { "RM-1018", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } },
- { "RM-1019", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } },
- { "RM-1020", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } },
- // Lumia 730
- { "RM-1040", new CanonicalPhoneName() { CanonicalModel = "Lumia 730", Comments="Dual SIM" } },
- // Lumia 735
- { "RM-1038", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } },
- { "RM-1039", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } },
- { "RM-1041", new CanonicalPhoneName() { CanonicalModel = "Lumia 735", Comments="Verizon" } },
- // Lumia 830
- { "RM-983", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
- { "RM-984", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
- { "RM-985", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
- { "RM-1049", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
- // Lumia 535
- { "RM-1089", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
- { "RM-1090", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
- { "RM-1091", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
- { "RM-1092", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
- // Lumia 435
- { "RM-1068", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
- { "RM-1069", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
- { "RM-1070", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
- { "RM-1071", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
- { "RM-1114", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
- // Lumia 532
- { "RM-1031", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
- { "RM-1032", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
- { "RM-1034", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
- { "RM-1115", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
- // Lumia 640
- { "RM-1072", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1073", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1074", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1075", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1077", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1109", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- { "RM-1113", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
- // Lumia 640XL
- { "RM-1062", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1063", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1064", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1065", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1066", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1067", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- { "RM-1096", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
- // Lumia 540
- { "RM-1140", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } },
- { "RM-1141", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } },
- // Lumia 430
- { "RM-1099", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 430", Comments="DS" } },
- // Lumia 950
- { "RM-1104", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
- { "RM-1105", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
- { "RM-1118", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
- // Lumia 950 XL
- { "RM-1085", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL" } },
- { "RM-1116", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL", Comments="DS" } },
- // Lumia 550
- { "RM-1127", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 550" } },
- };
- }
-
- public class CanonicalPhoneName
- {
- public string ReportedManufacturer { get; set; }
- public string ReportedModel { get; set; }
- public string CanonicalManufacturer { get; set; }
- public string CanonicalModel { get; set; }
- public string Comments { get; set; }
- public bool IsResolved { get; set; }
-
- public string FullCanonicalName
- {
- get { return CanonicalManufacturer + " " + CanonicalModel; }
- }
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs
deleted file mode 100644
index 4e1257f9..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-// PlatformInfoProvider.WP.cs
-
-using GoogleAnalytics.Core;
-using System;
-using System.IO.IsolatedStorage;
-using System.Threading.Tasks;
-using System.Windows;
-
-namespace UniversalAnalyticsPlugin
-{
- public sealed class PlatformInfoProvider : IPlatformInfoProvider
- {
- const string Key_AnonymousClientId = "GoogleAnaltyics.AnonymousClientId";
- string anonymousClientId;
- Dimensions _screenResolution = new Dimensions(0,0);
-
-#pragma warning disable 0067
- public event EventHandler ViewPortResolutionChanged;
-
- public event EventHandler ScreenResolutionChanged;
-#pragma warning restore 0067
-
- public PlatformInfoProvider()
- {
- Deployment.Current.Dispatcher.BeginInvoke(() => {
- double scale = (double)Application.Current.Host.Content.ScaleFactor / 100;
- int h = (int)Math.Ceiling(Application.Current.Host.Content.ActualHeight * scale);
- int w = (int)Math.Ceiling(Application.Current.Host.Content.ActualWidth * scale);
- _screenResolution = new Dimensions(h, w);
- });
- }
-
- public string AnonymousClientId
- {
- get
- {
- if (anonymousClientId == null)
- {
- var appSettings = IsolatedStorageSettings.ApplicationSettings;
- if (!appSettings.Contains(Key_AnonymousClientId))
- {
- anonymousClientId = Guid.NewGuid().ToString();
- appSettings.Add(Key_AnonymousClientId, anonymousClientId);
- appSettings.Save();
- }
- else
- {
- anonymousClientId = (string)appSettings[Key_AnonymousClientId];
- }
- }
- return anonymousClientId;
- }
- set { anonymousClientId = value; }
- }
-
- public Dimensions ScreenResolution
- {
- get
- {
- return _screenResolution;
- }
- }
-
- public Dimensions ViewPortResolution
- {
- get { return ScreenResolution; }
- }
-
- public string UserLanguage
- {
- get { return System.Globalization.CultureInfo.CurrentUICulture.Name; }
- }
-
- public int? ScreenColorDepthBits
- {
- get { return null; }
- }
-
- public void OnTracking()
- { }
-
- public string GetUserAgent()
- {
- var sysInfo = UniversalAnalyticsPlugin.PhoneNameResolver.Resolve(Microsoft.Phone.Info.DeviceStatus.DeviceManufacturer, Microsoft.Phone.Info.DeviceStatus.DeviceName);
- Version osVer = Environment.OSVersion.Version;
- string uaMask;
-
- if (osVer.Minor == 10)
- {
- // Windows Phone 8.1
- uaMask = "Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv11.0; IEMobile/11.0; {1}; {2}) like Gecko";
- }
- else
- {
- // Windows Phone 8.0
- uaMask = "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone OS {0}; Trident/6.0; IEMobile/10.0; ARM; Touch; {1}; {2})";
- }
-
- //var userAgentMask = "Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]";
- return string.Format(uaMask, Environment.OSVersion.Version, sysInfo.CanonicalManufacturer, sysInfo.CanonicalModel);
- }
- }
-}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs
deleted file mode 100644
index b4307922..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (c) 2016 Dan Polivy
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-using System;
-using GoogleAnalytics.Core;
-using WPCordovaClassLib.Cordova;
-using WPCordovaClassLib.Cordova.Commands;
-using WPCordovaClassLib.Cordova.JSON;
-using System.Collections.Generic;
-using System.Windows;
-using System.Diagnostics;
-using System.Threading.Tasks;
-using Microsoft.Phone.Shell;
-
-namespace Cordova.Extension.Commands
-{
- /// <summary>
- /// UniversalAnalytics plugin class containing methods called from JavaScript
- /// </summary>
- public class UniversalAnalytics : BaseCommand
- {
- private TrackerManager _trackerManager = new TrackerManager(new UniversalAnalyticsPlugin.PlatformInfoProvider());
- private Tracker _tracker;
- private bool _trackerStarted = false;
- DateTime? _suspended;
- private IDictionary<int, string> _customDimensions = new Dictionary<int, string>();
-
- public UniversalAnalytics()
- {
- this.AutoAppLifetimeTracking = false;
- this.SessionTimeout = 30;
- }
-
- /// <summary>
- /// Session timeout length, in seconds.
- /// </summary>
- public int? SessionTimeout {
- get;
- set;
- }
-
- /// <summary>
- /// Determines whether events are automatically sent for app lifetime tracking.
- /// </summary>
- public bool AutoAppLifetimeTracking { get; set; }
-
- public void startTrackerWithId(string options)
- {
- // If the tracker is already started, don't start it again
- if (_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker is already started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (!_trackerStarted && args.Length > 0 && args[0].Length > 0)
- {
- _tracker = _trackerManager.GetTracker(args[0]);
-
- // Set additional Tracker parameters here
- _tracker.SetStartSession(true);
- _tracker.IsUseSecure = true;
- _tracker.AppName = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Title");
- _tracker.AppVersion = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Version");
-
- _trackerStarted = true;
-
- Deployment.Current.Dispatcher.BeginInvoke(() =>
- {
- Application.Current.UnhandledException += Analytics_UnhandledException;
- TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
- });
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Tracker started"));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker id is not valid"));
- }
- }
-
- public override void OnResume(object sender, ActivatedEventArgs e)
- {
- if (_suspended.HasValue && SessionTimeout.HasValue)
- {
- var suspendedAgo = DateTime.UtcNow.Subtract(_suspended.Value);
- if (suspendedAgo > TimeSpan.FromSeconds((double)SessionTimeout))
- {
- _tracker.SetStartSession(true);
- }
- }
-
- if (_trackerStarted && AutoAppLifetimeTracking)
- {
- _tracker.SendEvent("app", "resume", !e.IsApplicationInstancePreserved ? "tombstoned" : null, 0);
- }
- }
-
- public override void OnPause(object sender, DeactivatedEventArgs e)
- {
- if (_trackerStarted && AutoAppLifetimeTracking)
- {
- _tracker.SendEvent("app", "suspend", e.Reason.ToString(), 0);
- }
-
- _suspended = DateTime.UtcNow;
- }
-
- private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
- {
- var ex = e.Exception.InnerException ?? e.Exception; // inner exception contains better info for unobserved tasks
- _tracker.SendException(ex.ToString(), false);
- }
-
- private void Analytics_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
- {
- _tracker.SendException(e.ExceptionObject.ToString(), true);
-
- if (Debugger.IsAttached)
- {
- // An unhandled exception has occurred; break into the debugger
- Debugger.Break();
- }
- }
-
- public void setUserId(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
- string userId = null;
-
- if (args.Length > 0) userId = args[0];
-
- _tracker.UserId = userId;
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Set user id: " + args[0]));
- }
-
- public void debugMode(string options)
- {
- _trackerManager.IsDebugEnabled = true;
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "debugMode enabled"));
- }
-
- public void trackView(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (args.Length > 0 && args[0] != null && args[0].Length > 0)
- {
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendView(args[0]);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Screen: " + args[0]));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected one non-empty string argument"));
- }
- }
-
- public void addCustomDimension(string options)
- {
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- int index = 0;
- bool hasIndex = false;
- string value = null;
-
- if (args.Length > 0) hasIndex = int.TryParse(args[0], out index);
- if (args.Length > 1) value = args[1];
-
- if (hasIndex && value != null)
- {
- // Remove the key if it already exists
- _customDimensions.Remove(index);
- _customDimensions.Add(index, value);
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Custom Dimension: " + index));
- }
- else
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty integer, string arguments"));
- }
- }
-
- public void trackEvent(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- // Default values
- string category = null, action = null, label = null;
- long value = 0;
-
- if (args.Length > 0) category = args[0];
- if (args.Length > 1) action = args[1];
- if (args.Length > 2) label = args[2];
- if (args.Length > 3) long.TryParse(args[3], out value);
-
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendEvent(category, action, label, value);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Event: " + category));
- }
-
- public void trackException(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (args.Length == 0 || args[0] == null || args[0].Length == 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments."));
- return;
- }
-
- // Default values
- string description = null;
- bool isFatal = false;
-
- if (args.Length > 0) description = args[0];
- if (args.Length > 1) bool.TryParse(args[1], out isFatal);
-
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendException(description, isFatal);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Exception: " + description));
- }
-
- public void trackTiming(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (args.Length == 0 || args[0] == null || args[0].Length == 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments."));
- return;
- }
-
- // Default values
- string category = null, variable = null, label = null;
- long intervalInMs = 0;
-
- if (args.Length > 0) category = args[0];
- if (args.Length > 1) long.TryParse(args[1], out intervalInMs);
- if (args.Length > 2) variable = args[2];
- if (args.Length > 3) label = args[3];
-
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendTiming(TimeSpan.FromMilliseconds(intervalInMs), category, variable, label);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Timing: " + category));
- }
-
- public void addTransaction(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (args.Length == 0 || args[0] == null || args[0].Length == 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID."));
- return;
- }
-
- Transaction transaction = new Transaction();
-
- // Default values
- double revenue = 0, tax = 0, shipping = 0;
-
- if (args.Length > 0) transaction.TransactionId = args[0];
- if (args.Length > 1) transaction.Affiliation = args[1];
- if (args.Length > 2)
- {
- double.TryParse(args[2], out revenue);
- transaction.TotalCostInMicros = (long)(revenue * 1000000);
- }
- if (args.Length > 3)
- {
- double.TryParse(args[3], out tax);
- transaction.TotalTaxInMicros = (long)(tax * 1000000);
- }
- if (args.Length > 4)
- {
- double.TryParse(args[4], out shipping);
- transaction.ShippingCostInMicros = (long)(shipping * 1000000);
- }
- if (args.Length > 5) transaction.CurrencyCode = args[5];
-
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendTransaction(transaction);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction: " + transaction.TransactionId));
- }
-
- public void addTransactionItem(string options)
- {
- if (!_trackerStarted)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
- return;
- }
-
- string[] args = JsonHelper.Deserialize<string[]>(options);
-
- if (args.Length == 0 || args[0] == null || args[0].Length == 0)
- {
- DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID."));
- return;
- }
-
- TransactionItem transactionItem = new TransactionItem();
-
- // Default values
- double price = 0;
- long quantity = 0;
-
- if (args.Length > 0) transactionItem.TransactionId = args[0];
- if (args.Length > 1) transactionItem.Name = args[1];
- if (args.Length > 2) transactionItem.SKU = args[2];
- if (args.Length > 3) transactionItem.Category = args[3];
- if (args.Length > 4)
- {
- double.TryParse(args[4], out price);
- transactionItem.PriceInMicros = (long)(price * 1000000);
- }
- if (args.Length > 5)
- {
- long.TryParse(args[5], out quantity);
- transactionItem.Quantity = quantity;
- }
- if (args.Length > 6) transactionItem.CurrencyCode = args[6];
-
- addCustomDimensionsToTracker(_tracker);
- _tracker.SendTransactionItem(transactionItem);
-
- DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction Item: " + transactionItem.TransactionId));
- }
-
- private void addCustomDimensionsToTracker(Tracker tracker)
- {
- foreach (KeyValuePair<int, string> dimension in _customDimensions)
- {
- tracker.SetCustomDimension(dimension.Key, dimension.Value);
- }
- }
- }
-} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js
deleted file mode 100644
index 03b4a9d4..00000000
--- a/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js
+++ /dev/null
@@ -1,127 +0,0 @@
-function UniversalAnalyticsPlugin() {}
-
-UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
- if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
- dispatchPeriod = 30;
- } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
- // Called without dispatchPeriod but with a callback.
- // Looks like the original API was used so shift parameters over to remain compatible.
- error = success;
- success = dispatchPeriod;
- dispatchPeriod = 30;
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
-};
-
-UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
-};
-
-UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
-};
-
-UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
-};
-
-UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
-};
-
-/* enables verbose logging */
-UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
-};
-
-UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
- if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
- campaignUrl = '';
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
-};
-
-UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
- if (typeof key !== "number") {
- throw Error("key must be a valid integer not '" + typeof key + "'");
- }
- cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
- if (typeof value === 'undefined' || value === null) {
- value = 0;
- }
-
- if (typeof newSession === 'undefined' || newSession === null) {
- newSession = false;
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
-};
-
-/**
- * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
- */
-UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
-};
-
-UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
- if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
- intervalInMilliseconds = 0;
- }
- if (typeof name === 'undefined' || name === null) {
- name = '';
- }
- if (typeof label === 'undefined' || label === null) {
- label = '';
- }
-
- cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
-};
-
-/* Google Analytics e-Commerce Tracking */
-/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
-UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
-};
-
-UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
-};
-
-/* automatic uncaught exception tracking */
-UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
- cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
-};
-
-module.exports = new UniversalAnalyticsPlugin();
diff --git a/StoneIsland/plugins/fetch.json b/StoneIsland/plugins/fetch.json
index 0b9fe237..e1f47bbb 100755
--- a/StoneIsland/plugins/fetch.json
+++ b/StoneIsland/plugins/fetch.json
@@ -107,18 +107,18 @@
"SENDER_ID": "XXXXXXX"
}
},
- "cordova-plugin-google-analytics": {
+ "cordova-plugin-statusbar": {
"source": {
"type": "registry",
- "id": "cordova-plugin-google-analytics"
+ "id": "cordova-plugin-statusbar@2.2.3"
},
"is_top_level": true,
"variables": {}
},
- "cordova-plugin-statusbar": {
+ "cordova-plugin-firebase": {
"source": {
"type": "registry",
- "id": "cordova-plugin-statusbar@2.2.3"
+ "id": "cordova-plugin-firebase@0.1.24"
},
"is_top_level": true,
"variables": {}
diff --git a/StoneIsland/plugins/ios.json b/StoneIsland/plugins/ios.json
index 62926bf3..ad839f95 100644
--- a/StoneIsland/plugins/ios.json
+++ b/StoneIsland/plugins/ios.json
@@ -45,10 +45,10 @@
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-google-analytics": {
+ "cordova-plugin-statusbar": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
},
- "cordova-plugin-statusbar": {
+ "cordova-plugin-firebase": {
"PACKAGE_NAME": "us.okfoc.stoneisland"
}
},