Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NT-885] Landing page optimizely events #1112

Merged
merged 25 commits into from
Mar 19, 2020
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
1065729
Added LandingPageViewController
Scollaco Feb 24, 2020
d162bc8
Added LandingPageViewModel and assets
Scollaco Feb 24, 2020
37a5953
Fixed screen layout
Scollaco Feb 24, 2020
45df98b
Added LandingPageViewModelTests
Scollaco Feb 24, 2020
2a613a1
SwiftFormat
Scollaco Feb 24, 2020
8abfd0f
Fixed comment
Scollaco Feb 24, 2020
3250b6b
Feedback from Justin and Isabel
Scollaco Feb 25, 2020
9f65afb
Disabled rotation, feedback from Isabel
Scollaco Feb 26, 2020
a57573a
Swiftformat
Scollaco Feb 26, 2020
3b38bd8
Fixed dynamic type support
Scollaco Feb 26, 2020
3c4e879
SwiftFormat
Scollaco Feb 26, 2020
e3d8906
[NT-889] (1/3) Landing page ui (#1080)
Scollaco Feb 28, 2020
3748d2a
[NT-892, NT-893] (2/3) Landing page carousel (#1083)
Scollaco Feb 28, 2020
311c0da
[NT-871] (3/3) Landing page first session (#1085)
Scollaco Mar 2, 2020
f3379fb
Merge remote-tracking branch 'oss/NT-889-landing-page-UI' into featur…
Scollaco Mar 2, 2020
dac651b
Merge branch 'feature-landing-page' of https://github.com/kickstarter…
Scollaco Mar 2, 2020
9f1998d
Merge remote-tracking branch 'oss/master' into feature-landing-page
Scollaco Mar 3, 2020
5bc6617
Added logic to not activate deeplink if user is part of the experimen…
Scollaco Mar 10, 2020
b808a99
Merge remote-tracking branch 'oss/master' into feature-landing-page
Scollaco Mar 11, 2020
da558cf
Merge branch 'feature-landing-page' of https://github.com/kickstarter…
Scollaco Mar 11, 2020
6755afd
Added Get Started Button Clicked event
Scollaco Mar 11, 2020
91615b6
Added App Closed event
Scollaco Mar 18, 2020
ac715b9
SwiftFormat
Scollaco Mar 18, 2020
9bcae55
Merge remote-tracking branch 'oss/master' into NT-885-landing-page-op…
Scollaco Mar 18, 2020
d6f94ca
Merge branch 'master' into NT-885-landing-page-optimizely-events
Scollaco Mar 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions Kickstarter-iOS/ViewModels/AppDelegateViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,25 @@ public final class AppDelegateViewModel: AppDelegateViewModelType, AppDelegateVi
deepLinkFromNotification
.observeValues { _ in AppEnvironment.current.koala.trackNotificationOpened() }

// Optimizely tracking

self.applicationDidEnterBackgroundProperty.signal
.observeValues {
let (properties, eventTags) = optimizelyTrackingAttributesAndEventTags(
with: AppEnvironment.current.currentUser,
project: nil,
refTag: nil
)

try? AppEnvironment.current.optimizelyClient?
.track(
eventKey: "App Closed",
userId: deviceIdentifier(uuid: UUID()),
attributes: properties,
eventTags: eventTags
)
}

self.applicationIconBadgeNumber = Signal.merge(
self.applicationWillEnterForegroundProperty.signal,
self.applicationLaunchOptionsProperty.signal.ignoreValues()
Expand Down
8 changes: 8 additions & 0 deletions Kickstarter-iOS/ViewModels/AppDelegateViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,14 @@ final class AppDelegateViewModelTests: TestCase {
}
}

func testOptimizelyTracking() {
XCTAssertEqual(self.optimizelyClient.trackedEventKey, nil)

self.vm.inputs.applicationDidEnterBackground()

XCTAssertEqual(self.optimizelyClient.trackedEventKey, "App Closed")
}

// MARK: - AppCenter

func testConfigureAppCenter_AlphaApp_LoggedOut() {
Expand Down
10 changes: 5 additions & 5 deletions Library/OptimizelyClientType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,16 @@ extension OptimizelyClientType {

public func optimizelyTrackingAttributesAndEventTags(
with user: User?,
project: Project,
project: Project?,
refTag: RefTag?
) -> ([String: Any], [String: Any]) {
let properties = optimizelyUserAttributes(with: user, project: project, refTag: refTag)

let eventTags: [String: Any] = ([
"project_subcategory": project.category.name,
"project_category": project.category.parentName,
"project_country": project.location.country.lowercased(),
"project_user_has_watched": project.personalization.isStarred
"project_subcategory": project?.category.name,
"project_category": project?.category.parentName,
"project_country": project?.location.country.lowercased(),
"project_user_has_watched": project?.personalization.isStarred
] as [String: Any?]).compact()

return (properties, eventTags)
Expand Down
19 changes: 19 additions & 0 deletions Library/ViewModels/LandingPageViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,25 @@ public final class LandingPageViewModel: LandingPageViewModelType, LandingPageVi
.observeValues { _ in
AppEnvironment.current.userDefaults.hasSeenLandingPage = true
}

// Tracking

self.ctaButtonTappedSignal
.observeValues {
let (properties, eventTags) = optimizelyTrackingAttributesAndEventTags(
with: AppEnvironment.current.currentUser,
project: nil,
refTag: nil
)

try? AppEnvironment.current.optimizelyClient?
.track(
eventKey: "Get Started Button Clicked",
userId: deviceIdentifier(uuid: UUID()),
attributes: properties,
eventTags: eventTags
)
}
}

private let (ctaButtonTappedSignal, ctaButtonTappedObserver) = Signal<(), Never>.pipe()
Expand Down
8 changes: 8 additions & 0 deletions Library/ViewModels/LandingPageViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ internal final class LandingPageViewModelTests: TestCase {
self.dismissViewController.assertValueCount(1)
}

func testoptimizelyTracking_OnButtonTap() {
XCTAssertEqual(self.optimizelyClient.trackedEventKey, nil)

self.viewModel.inputs.ctaButtonTapped()

XCTAssertEqual(self.optimizelyClient.trackedEventKey, "Get Started Button Clicked")
}

func testUserDefaultsUpdates_OnViewDidLoad() {
let userDefaults = MockKeyValueStore()

Expand Down