From b4cf9a64bd60d2eb32006f6dd7af360763a302bf Mon Sep 17 00:00:00 2001 From: Andrew Bennet Date: Sat, 16 Mar 2019 10:58:10 +0000 Subject: [PATCH] Add some usage analytics --- ReadingList/Data/UserEngagement.swift | 30 +++++++++---------- .../Lists/AddToExistingLists.swift | 1 + .../ViewControllers/Lists/ListBookTable.swift | 1 + .../Lists/RemoveFromExistingLists.swift | 1 + .../ViewControllers/Main/BookTable.swift | 1 + .../ViewControllers/Settings/General.swift | 3 ++ 6 files changed, 22 insertions(+), 15 deletions(-) diff --git a/ReadingList/Data/UserEngagement.swift b/ReadingList/Data/UserEngagement.swift index be83afc5..eb7280df 100644 --- a/ReadingList/Data/UserEngagement.swift +++ b/ReadingList/Data/UserEngagement.swift @@ -7,27 +7,24 @@ class UserEngagement { // Note: TestFlight users are automatically enrolled in analytics and crash reporting. This should be reflected // on the corresponding Settings page. static var sendAnalytics: Bool { - #if DEBUG - return false - #else return BuildInfo.appConfiguration == .testFlight || UserDefaults.standard[.sendAnalytics] - #endif } static var sendCrashReports: Bool { - #if DEBUG - return false - #else return BuildInfo.appConfiguration == .testFlight || UserDefaults.standard[.sendCrashReports] - #endif } static func initialiseUserAnalytics() { - #if RELEASE - // We need to configure the firebase app in order to send crash reports - if sendAnalytics || sendCrashReports { FirebaseApp.configure() } - if sendCrashReports { Fabric.with([Crashlytics.self]) } - #endif + guard sendAnalytics || sendCrashReports else { return } + // We need to configure the firebase app in order to send crash reports + if FirebaseApp.app() == nil { + FirebaseApp.configure() + } + if sendCrashReports { + #if RELEASE + Fabric.with([Crashlytics.self]) + #endif + } } static func onReviewTrigger() { @@ -60,6 +57,7 @@ class UserEngagement { case bulkDeleteBook = "Bulk_Delete_Book" case editBook = "Edit_Book" case editReadState = "Edit_Read_State" + case changeSortOrder = "Change_Sort" // Lists case createList = "Create_List" @@ -68,7 +66,7 @@ class UserEngagement { case removeBookFromList = "Remove_Book_From_List" case reorederList = "Reorder_List" case deleteList = "Delete_List" - case setListOrder = "Set_List_Order" + case changeListSortOrder = "Change_List_Sort_Order" case renameList = "Rename_List" // Quick actions @@ -81,7 +79,7 @@ class UserEngagement { case disableCrashReports = "Disable_Crash_Reports" case enableCrashReports = "Enable_Crash_Reports" case changeTheme = "Change_Theme" - case changeSortOrder = "Change_Sort" + case changeSearchOnlineLanguage = "Change_Search_Online_Language" // Other case viewOnAmazon = "View_On_Amazon" @@ -90,7 +88,9 @@ class UserEngagement { static func logEvent(_ event: Event) { guard sendAnalytics else { return } + #if RELEASE Analytics.logEvent(event.rawValue, parameters: nil) + #endif } static func logError(_ error: Error) { diff --git a/ReadingList/ViewControllers/Lists/AddToExistingLists.swift b/ReadingList/ViewControllers/Lists/AddToExistingLists.swift index 1a9582b4..fb2f54d9 100644 --- a/ReadingList/ViewControllers/Lists/AddToExistingLists.swift +++ b/ReadingList/ViewControllers/Lists/AddToExistingLists.swift @@ -63,5 +63,6 @@ class AddToExistingLists: UITableViewController { list.addBooks(NSOrderedSet(set: self.books)) } navigationController?.dismiss(animated: true, completion: onComplete) + UserEngagement.logEvent(.addBookToList) } } diff --git a/ReadingList/ViewControllers/Lists/ListBookTable.swift b/ReadingList/ViewControllers/Lists/ListBookTable.swift index ba95a61a..cd98904b 100644 --- a/ReadingList/ViewControllers/Lists/ListBookTable.swift +++ b/ReadingList/ViewControllers/Lists/ListBookTable.swift @@ -202,6 +202,7 @@ class ListBookTable: UITableViewController { // Put the top row at the "middle", so that the top row is not right up at the top of the table tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .middle, animated: false) + UserEngagement.logEvent(.changeListSortOrder) } @objc private func objectContextChanged(_ notification: Notification) { diff --git a/ReadingList/ViewControllers/Lists/RemoveFromExistingLists.swift b/ReadingList/ViewControllers/Lists/RemoveFromExistingLists.swift index 4f57fbe9..430ca07e 100644 --- a/ReadingList/ViewControllers/Lists/RemoveFromExistingLists.swift +++ b/ReadingList/ViewControllers/Lists/RemoveFromExistingLists.swift @@ -43,6 +43,7 @@ class RemoveFromExistingLists: UITableViewController { let list = self.resultsController.object(at: indexPath) list.removeBooks(NSSet(object: self.book)) list.managedObjectContext!.saveAndLogIfErrored() + UserEngagement.logEvent(.removeBookFromList) }] } } diff --git a/ReadingList/ViewControllers/Main/BookTable.swift b/ReadingList/ViewControllers/Main/BookTable.swift index 660ca8f1..f68844ba 100644 --- a/ReadingList/ViewControllers/Main/BookTable.swift +++ b/ReadingList/ViewControllers/Main/BookTable.swift @@ -70,6 +70,7 @@ class BookTable: UITableViewController { //swiftlint:disable:this type_body_leng header.onSortChanged = { [unowned self] in self.buildResultsController() self.tableView.reloadData() + UserEngagement.logEvent(.changeSortOrder) } configureHeader(header, at: section) return header diff --git a/ReadingList/ViewControllers/Settings/General.swift b/ReadingList/ViewControllers/Settings/General.swift index b26e96ee..016d0a4f 100644 --- a/ReadingList/ViewControllers/Settings/General.swift +++ b/ReadingList/ViewControllers/Settings/General.swift @@ -40,6 +40,7 @@ class General: FormViewController { } else { UserDefaults.standard[.searchLanguageRestriction] = nil } + UserEngagement.logEvent(.changeSearchOnlineLanguage) } } @@ -81,6 +82,7 @@ class General: FormViewController { guard let switchValue = sender.value else { return } if switchValue { UserDefaults.standard[.sendCrashReports] = true + UserEngagement.initialiseUserAnalytics() UserEngagement.logEvent(.enableCrashReports) } else { // If this is being turned off, let's try to persuade them to turn it back on @@ -104,6 +106,7 @@ class General: FormViewController { guard let switchValue = sender.value else { return } if switchValue { UserDefaults.standard[.sendAnalytics] = true + UserEngagement.initialiseUserAnalytics() UserEngagement.logEvent(.enableAnalytics) } else { // If this is being turned off, let's try to persuade them to turn it back on