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) {