diff --git a/config.xml b/config.xml
index 709171a1..67795765 100644
--- a/config.xml
+++ b/config.xml
@@ -113,6 +113,8 @@
+
+
+
-
diff --git a/package.json b/package.json
index 1a434391..29156884 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"@ionic-native/core": "4.8.0",
"@ionic-native/deeplinks": "^4.12.2",
"@ionic-native/facebook": "^4.11.0",
+ "@ionic-native/firebase-analytics": "^4.16.0",
"@ionic-native/google-plus": "^4.11.0",
"@ionic-native/in-app-browser": "^4.11.0",
"@ionic-native/safari-view-controller": "^4.12.2",
@@ -58,6 +59,7 @@
"cordova-ios": "4.5.5",
"cordova-plugin-device": "2.0.2",
"cordova-plugin-facebook4": "~2.2.0",
+ "cordova-plugin-firebase-analytics": "^1.0.1",
"cordova-plugin-googleplus": "^5.3.0",
"cordova-plugin-inappbrowser": "^3.0.0",
"cordova-plugin-ionic-keyboard": "2.0.5",
@@ -65,6 +67,8 @@
"cordova-plugin-screen-orientation": "^3.0.1",
"cordova-plugin-splashscreen": "5.0.2",
"cordova-plugin-whitelist": "1.3.3",
+ "cordova-support-android-plugin": "^1.0.1",
+ "cordova-support-google-services": "^1.2.1",
"core-js": "2.5.3",
"es6-promise-plugin": "^4.2.2",
"firebase": "4.12.1",
@@ -131,8 +135,7 @@
},
"cordova": {
"platforms": [
- "android",
- "ios"
+ "android"
],
"plugins": {
"cordova-plugin-googleplus": {
@@ -162,6 +165,9 @@
"ionic-plugin-deeplinks": {
"URL_SCHEME": "juntoscope",
"DEEPLINK_HOST": "juntoscope.com"
+ },
+ "cordova-plugin-firebase-analytics": {
+ "FIREBASE_CORE_VERSION": "16.0.+"
}
}
}
diff --git a/resources/ios/icon/icon-1024.png b/resources/ios/icon/icon-1024.png
index bb2afb2e..86ccc04e 100644
Binary files a/resources/ios/icon/icon-1024.png and b/resources/ios/icon/icon-1024.png differ
diff --git a/resources/ios/icon/icon-40.png b/resources/ios/icon/icon-40.png
index eada30cb..1e41cfdc 100644
Binary files a/resources/ios/icon/icon-40.png and b/resources/ios/icon/icon-40.png differ
diff --git a/resources/ios/icon/icon-40@2x.png b/resources/ios/icon/icon-40@2x.png
index e182fe66..43dae844 100644
Binary files a/resources/ios/icon/icon-40@2x.png and b/resources/ios/icon/icon-40@2x.png differ
diff --git a/resources/ios/icon/icon-40@3x.png b/resources/ios/icon/icon-40@3x.png
index 32ed16d8..02b2a55a 100644
Binary files a/resources/ios/icon/icon-40@3x.png and b/resources/ios/icon/icon-40@3x.png differ
diff --git a/resources/ios/icon/icon-50.png b/resources/ios/icon/icon-50.png
index 977efa81..a9fa3713 100644
Binary files a/resources/ios/icon/icon-50.png and b/resources/ios/icon/icon-50.png differ
diff --git a/resources/ios/icon/icon-50@2x.png b/resources/ios/icon/icon-50@2x.png
index 949c9fcd..b43ee5bf 100644
Binary files a/resources/ios/icon/icon-50@2x.png and b/resources/ios/icon/icon-50@2x.png differ
diff --git a/resources/ios/icon/icon-60.png b/resources/ios/icon/icon-60.png
index ada2a46a..c045caf1 100644
Binary files a/resources/ios/icon/icon-60.png and b/resources/ios/icon/icon-60.png differ
diff --git a/resources/ios/icon/icon-60@2x.png b/resources/ios/icon/icon-60@2x.png
index 2808ea23..02b2a55a 100644
Binary files a/resources/ios/icon/icon-60@2x.png and b/resources/ios/icon/icon-60@2x.png differ
diff --git a/resources/ios/icon/icon-60@3x.png b/resources/ios/icon/icon-60@3x.png
index 1e6421ad..97cf5fa9 100644
Binary files a/resources/ios/icon/icon-60@3x.png and b/resources/ios/icon/icon-60@3x.png differ
diff --git a/resources/ios/icon/icon-72.png b/resources/ios/icon/icon-72.png
index 856d2581..652d13b0 100644
Binary files a/resources/ios/icon/icon-72.png and b/resources/ios/icon/icon-72.png differ
diff --git a/resources/ios/icon/icon-72@2x.png b/resources/ios/icon/icon-72@2x.png
index 97a04693..801e12e5 100644
Binary files a/resources/ios/icon/icon-72@2x.png and b/resources/ios/icon/icon-72@2x.png differ
diff --git a/resources/ios/icon/icon-76.png b/resources/ios/icon/icon-76.png
index ff5174a9..8217b3f5 100644
Binary files a/resources/ios/icon/icon-76.png and b/resources/ios/icon/icon-76.png differ
diff --git a/resources/ios/icon/icon-76@2x.png b/resources/ios/icon/icon-76@2x.png
index 43913f5e..279120f5 100644
Binary files a/resources/ios/icon/icon-76@2x.png and b/resources/ios/icon/icon-76@2x.png differ
diff --git a/resources/ios/icon/icon-83.5@2x.png b/resources/ios/icon/icon-83.5@2x.png
index 861ed62e..868b87b7 100644
Binary files a/resources/ios/icon/icon-83.5@2x.png and b/resources/ios/icon/icon-83.5@2x.png differ
diff --git a/resources/ios/icon/icon-small.png b/resources/ios/icon/icon-small.png
index 1b5ff1c9..324c16eb 100644
Binary files a/resources/ios/icon/icon-small.png and b/resources/ios/icon/icon-small.png differ
diff --git a/resources/ios/icon/icon-small@2x.png b/resources/ios/icon/icon-small@2x.png
index 81775724..1f2104af 100644
Binary files a/resources/ios/icon/icon-small@2x.png and b/resources/ios/icon/icon-small@2x.png differ
diff --git a/resources/ios/icon/icon-small@3x.png b/resources/ios/icon/icon-small@3x.png
index 93cd1ffb..723bd2b4 100644
Binary files a/resources/ios/icon/icon-small@3x.png and b/resources/ios/icon/icon-small@3x.png differ
diff --git a/resources/ios/icon/icon.png b/resources/ios/icon/icon.png
index 3592977f..70e1dc59 100644
Binary files a/resources/ios/icon/icon.png and b/resources/ios/icon/icon.png differ
diff --git a/resources/ios/icon/icon@2x.png b/resources/ios/icon/icon@2x.png
index 946e2264..d10ba5ce 100644
Binary files a/resources/ios/icon/icon@2x.png and b/resources/ios/icon/icon@2x.png differ
diff --git a/resources/ios/splash/Default-568h@2x~iphone.png b/resources/ios/splash/Default-568h@2x~iphone.png
index 42626f06..50fba738 100644
Binary files a/resources/ios/splash/Default-568h@2x~iphone.png and b/resources/ios/splash/Default-568h@2x~iphone.png differ
diff --git a/resources/ios/splash/Default-667h.png b/resources/ios/splash/Default-667h.png
index d17a8f6d..e72d94be 100644
Binary files a/resources/ios/splash/Default-667h.png and b/resources/ios/splash/Default-667h.png differ
diff --git a/resources/ios/splash/Default-736h.png b/resources/ios/splash/Default-736h.png
index 098acad5..fc35182e 100644
Binary files a/resources/ios/splash/Default-736h.png and b/resources/ios/splash/Default-736h.png differ
diff --git a/resources/ios/splash/Default-Landscape-736h.png b/resources/ios/splash/Default-Landscape-736h.png
index e34ec22c..6cce6620 100644
Binary files a/resources/ios/splash/Default-Landscape-736h.png and b/resources/ios/splash/Default-Landscape-736h.png differ
diff --git a/resources/ios/splash/Default-Landscape@2x~ipad.png b/resources/ios/splash/Default-Landscape@2x~ipad.png
index d9b0c36f..13b49980 100644
Binary files a/resources/ios/splash/Default-Landscape@2x~ipad.png and b/resources/ios/splash/Default-Landscape@2x~ipad.png differ
diff --git a/resources/ios/splash/Default-Landscape@~ipadpro.png b/resources/ios/splash/Default-Landscape@~ipadpro.png
index f26229c4..daa9bd5b 100644
Binary files a/resources/ios/splash/Default-Landscape@~ipadpro.png and b/resources/ios/splash/Default-Landscape@~ipadpro.png differ
diff --git a/resources/ios/splash/Default-Landscape~ipad.png b/resources/ios/splash/Default-Landscape~ipad.png
index d05078e2..a1932294 100644
Binary files a/resources/ios/splash/Default-Landscape~ipad.png and b/resources/ios/splash/Default-Landscape~ipad.png differ
diff --git a/resources/ios/splash/Default-Portrait@2x~ipad.png b/resources/ios/splash/Default-Portrait@2x~ipad.png
index a753616d..a97df943 100644
Binary files a/resources/ios/splash/Default-Portrait@2x~ipad.png and b/resources/ios/splash/Default-Portrait@2x~ipad.png differ
diff --git a/resources/ios/splash/Default-Portrait@~ipadpro.png b/resources/ios/splash/Default-Portrait@~ipadpro.png
index 34ce4341..e20d05a9 100644
Binary files a/resources/ios/splash/Default-Portrait@~ipadpro.png and b/resources/ios/splash/Default-Portrait@~ipadpro.png differ
diff --git a/resources/ios/splash/Default-Portrait~ipad.png b/resources/ios/splash/Default-Portrait~ipad.png
index acf8fea6..48d741ae 100644
Binary files a/resources/ios/splash/Default-Portrait~ipad.png and b/resources/ios/splash/Default-Portrait~ipad.png differ
diff --git a/resources/ios/splash/Default@2x~iphone.png b/resources/ios/splash/Default@2x~iphone.png
index bc0dab4e..6ee5a715 100644
Binary files a/resources/ios/splash/Default@2x~iphone.png and b/resources/ios/splash/Default@2x~iphone.png differ
diff --git a/resources/ios/splash/Default@2x~universal~anyany.png b/resources/ios/splash/Default@2x~universal~anyany.png
index 9a078f15..2c53130d 100644
Binary files a/resources/ios/splash/Default@2x~universal~anyany.png and b/resources/ios/splash/Default@2x~universal~anyany.png differ
diff --git a/resources/ios/splash/Default~iphone.png b/resources/ios/splash/Default~iphone.png
index 30ef5044..2f8201d8 100644
Binary files a/resources/ios/splash/Default~iphone.png and b/resources/ios/splash/Default~iphone.png differ
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 3af494eb..52bd42bd 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -34,6 +34,7 @@ import { ConnectionsModule } from "../features/connections/connections.module";
import { ScopingModule } from "../features/scoping/scoping.module";
import { SettingsModule } from "../features/settings/settings.module";
import { Deeplinks } from "@ionic-native/deeplinks";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@NgModule({
declarations: [JuntoScopeComponent, NotFoundComponent],
@@ -72,6 +73,7 @@ import { Deeplinks } from "@ionic-native/deeplinks";
InAppBrowser,
SafariViewController,
Deeplinks,
+ FirebaseAnalytics,
{ provide: ErrorHandler, useClass: IonicErrorHandler }
]
})
diff --git a/src/features/authentication/pages/login/login.component.ts b/src/features/authentication/pages/login/login.component.ts
index 9b6c96b8..d9eee43a 100644
--- a/src/features/authentication/pages/login/login.component.ts
+++ b/src/features/authentication/pages/login/login.component.ts
@@ -1,5 +1,6 @@
import { Component, OnInit, OnDestroy } from "@angular/core";
import { IonicPage, NavController, NavParams } from "ionic-angular";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
import { FormGroup, FormBuilder, Validators } from "@angular/forms";
@@ -38,7 +39,8 @@ export class LoginPage implements OnInit, OnDestroy {
private actions$: Actions,
private popupSvc: PopupService,
private loadingSrv: LoadingService,
- private iab: InAppBrowser
+ private iab: InAppBrowser,
+ private firebaseAnalytics: FirebaseAnalytics
) {
this.redirectSubs = this.actions$
.ofType(AuthActionTypes.AUTHENTICATED)
@@ -67,6 +69,7 @@ export class LoginPage implements OnInit, OnDestroy {
}
ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", { page: "LoginPage" });
this.createForm();
// this.loadingSrv.initialize();
}
diff --git a/src/features/connections/pages/add-connection/add-connection.component.ts b/src/features/connections/pages/add-connection/add-connection.component.ts
index 4f91a78e..eb6d39a5 100644
--- a/src/features/connections/pages/add-connection/add-connection.component.ts
+++ b/src/features/connections/pages/add-connection/add-connection.component.ts
@@ -10,6 +10,7 @@ import { PopupService } from "../../../../shared/popup.service";
import { ConnectionFacade } from "../../store/connection.facade";
import { LoadingService } from "../../../../shared/loading.service";
import { SafariViewController } from "@ionic-native/safari-view-controller";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@IonicPage({
segment: "AddConnectionPage",
@@ -32,7 +33,8 @@ export class AddConnectionPage implements OnInit {
private actions$: Actions,
private popupSvc: PopupService,
private loadingSvc: LoadingService,
- private svc: SafariViewController
+ private svc: SafariViewController,
+ private firebaseAnalytics: FirebaseAnalytics
) {
this.redirectSubs = this.actions$
.ofType(ConnectionActionTypes.ADD_SUCCESS)
@@ -51,7 +53,9 @@ export class AddConnectionPage implements OnInit {
});
}
- ngOnInit() {}
+ ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", { page: "AddConnectionPage" });
+ }
ngOnDestroy() {
this.errorSubscription.unsubscribe();
diff --git a/src/features/connections/pages/connection-details/connection-details.component.ts b/src/features/connections/pages/connection-details/connection-details.component.ts
index 1e266568..4f345717 100644
--- a/src/features/connections/pages/connection-details/connection-details.component.ts
+++ b/src/features/connections/pages/connection-details/connection-details.component.ts
@@ -7,6 +7,7 @@ import { TakeUntilDestroy } from "ngx-take-until-destroy";
import { Connection } from "../../../../models/connection";
import { ConnectionFacade } from "../../store/connection.facade";
import { PopupService } from "../../../../shared/popup.service";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@TakeUntilDestroy()
@IonicPage({
@@ -26,10 +27,14 @@ export class ConnectionDetailsPage implements OnInit, OnDestroy {
private connectionFacade: ConnectionFacade,
private navParams: NavParams,
private navCtrl: NavController,
- private popupSvc: PopupService
+ private popupSvc: PopupService,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", {
+ page: "ConnectionDetailsPage"
+ });
this.connectionFacade.getConnections();
this.connectionSub = this.connectionFacade.connections$.subscribe(
diff --git a/src/features/connections/pages/select-project/select-project.component.ts b/src/features/connections/pages/select-project/select-project.component.ts
index 657b589a..0a842be0 100644
--- a/src/features/connections/pages/select-project/select-project.component.ts
+++ b/src/features/connections/pages/select-project/select-project.component.ts
@@ -4,6 +4,7 @@ import { ConnectionFacade } from "../../store/connection.facade";
import { Project } from "../../../../models/project";
import { Connection } from "../../../../models/connection";
import { NavController, NavParams, IonicPage } from "ionic-angular";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@IonicPage({
segment: "SelectProjectPage",
@@ -36,10 +37,12 @@ export class SelectProjectPage implements OnInit {
constructor(
private connectionFacade: ConnectionFacade,
private navCtrl: NavController,
- private navParams: NavParams
+ private navParams: NavParams,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnInit(): void {
+ this.firebaseAnalytics.logEvent("page_view", { page: "SelectProjectPage" });
this.connectionId = this.navParams.get("connectionId");
console.log("Connection id: ", this.connectionId);
this.connectionFacade.selectConnection(this.connectionId);
diff --git a/src/features/connections/pages/select-task-list/select-task-list.component.ts b/src/features/connections/pages/select-task-list/select-task-list.component.ts
index 936f5b19..742778e4 100644
--- a/src/features/connections/pages/select-task-list/select-task-list.component.ts
+++ b/src/features/connections/pages/select-task-list/select-task-list.component.ts
@@ -6,6 +6,7 @@ import { TaskList } from "../../../../models/task-list";
import { Connection } from "../../../../models/connection";
import { NavParams, IonicPage } from "ionic-angular";
import { LoadingService } from "../../../../shared/loading.service";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@IonicPage({
segment: "SelectTaskListPage",
@@ -43,10 +44,14 @@ export class SelectTaskListPage implements OnInit {
constructor(
private connectionFacade: ConnectionFacade,
private loadingSrv: LoadingService,
- private navParams: NavParams
+ private navParams: NavParams,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnInit(): void {
+ this.firebaseAnalytics.logEvent("page_view", {
+ page: "SelectTaskListPage"
+ });
this.connectionId = this.navParams.get("connectionId");
this.projectId = this.navParams.get("projectId");
this.projectName = this.navParams.get("projectName");
diff --git a/src/features/dashboard/pages/dashboard/dashboard.component.ts b/src/features/dashboard/pages/dashboard/dashboard.component.ts
index e7de1794..bf188ce6 100644
--- a/src/features/dashboard/pages/dashboard/dashboard.component.ts
+++ b/src/features/dashboard/pages/dashboard/dashboard.component.ts
@@ -18,6 +18,7 @@ import { PopupService } from "../../../../shared/popup.service";
import { SessionDetailModalComponent } from "../../components/session-detail-modal/session-detail-modal.component";
import { DashboardUiState } from "../../store/dashboard.reducer";
import { ScopingFacade } from "../../../scoping/store/scoping.facade";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@TakeUntilDestroy()
@IonicPage({
@@ -49,10 +50,12 @@ export class DashboardPage implements OnInit, OnDestroy {
private connectionFacade: ConnectionFacade,
private navCtrl: NavController,
private scopingFacade: ScopingFacade,
- private viewCtrl: ViewController
+ private viewCtrl: ViewController,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", { page: "DashboardPage" });
this.dashboardFacade.getHistory();
this.connectionFacade.getConnections();
}
diff --git a/src/features/scoping/pages/session-results/session-results.component.ts b/src/features/scoping/pages/session-results/session-results.component.ts
index ca3e9422..66ee7138 100644
--- a/src/features/scoping/pages/session-results/session-results.component.ts
+++ b/src/features/scoping/pages/session-results/session-results.component.ts
@@ -1,8 +1,9 @@
-import { Component } from "@angular/core";
+import { Component, OnInit } from "@angular/core";
import { ScopingFacade } from "../../store/scoping.facade";
import { NavController, IonicPage } from "ionic-angular";
import { ScopingSession } from "../../../../models/scoping-session";
import { Subscription } from "rxjs";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@IonicPage({
segment: "SessionResultsPage",
@@ -12,20 +13,27 @@ import { Subscription } from "rxjs";
selector: "app-session-results",
templateUrl: "./session-results.component.html"
})
-export class SessionResultsPage {
+export class SessionResultsPage implements OnInit {
session: ScopingSession;
sessionCode: string;
sessionSub: Subscription;
constructor(
private scopingFacade: ScopingFacade,
- private navCtrl: NavController
+ private navCtrl: NavController,
+ private firebaseAnalytics: FirebaseAnalytics
) {
this.sessionSub = this.scopingFacade.session$.subscribe(session => {
this.session = session;
});
}
+ ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", {
+ page: "SessionResultsPage"
+ });
+ }
+
ionViewWillLeave() {
if (this.sessionSub) {
this.sessionSub.unsubscribe();
diff --git a/src/features/scoping/pages/session-scoping/session-scoping.component.ts b/src/features/scoping/pages/session-scoping/session-scoping.component.ts
index 468903ba..510286fc 100644
--- a/src/features/scoping/pages/session-scoping/session-scoping.component.ts
+++ b/src/features/scoping/pages/session-scoping/session-scoping.component.ts
@@ -21,6 +21,7 @@ import {
import { Subject, Subscription } from "rxjs";
import { HistoryService } from "../../../dashboard/services/history.service";
import { OnDestroy } from "../../../../../node_modules/ngx-take-until-destroy";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@IonicPage({
segment: "SessionScopingPage",
@@ -73,10 +74,14 @@ export class SessionScopingPage implements OnInit, OnDestroy {
private scopingFacade: ScopingFacade,
private navParams: NavParams,
private navCtrl: NavController,
- private historySvc: HistoryService
+ private historySvc: HistoryService,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", {
+ page: "SessionScopingPage"
+ });
this.user$ = this.store.pipe(select(AuthQuery.selectUser));
this.user$.subscribe(user => {
this.user = user;
diff --git a/src/features/settings/pages/settings/settings.ts b/src/features/settings/pages/settings/settings.ts
index 57e80117..b6215ca3 100644
--- a/src/features/settings/pages/settings/settings.ts
+++ b/src/features/settings/pages/settings/settings.ts
@@ -8,6 +8,7 @@ import { ConnectionFacade } from "../../../connections/store/connection.facade";
import { LoginPage } from "../../../authentication/pages/login/login.component";
import { Subscription } from "rxjs";
import { SettingsService } from "../../service/settings.service";
+import { FirebaseAnalytics } from "@ionic-native/firebase-analytics";
@TakeUntilDestroy()
@IonicPage({
@@ -33,7 +34,8 @@ export class SettingsPage implements OnInit, OnDestroy {
private navCtrl: NavController,
private connectionFacade: ConnectionFacade,
private authFacade: AuthFacade,
- private settingsSvc: SettingsService
+ private settingsSvc: SettingsService,
+ private firebaseAnalytics: FirebaseAnalytics
) {}
ngOnDestroy() {
@@ -41,6 +43,7 @@ export class SettingsPage implements OnInit, OnDestroy {
}
ngOnInit() {
+ this.firebaseAnalytics.logEvent("page_view", { page: "SettingsPage" });
this.connectionFacade.getConnections();
this.faqsSub = this.settingsSvc.getFaqs().subscribe(faqs => {
if (faqs) {