Commit e819d489 by Demid Merzlyakov

IOS-107: ATT prompt + instrumentation.

parent fa184468
......@@ -420,5 +420,7 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSUserTrackingUsageDescription</key>
<string>This will be used to deliver personalized ads to you.</string>
</dict>
</plist>
......@@ -9,6 +9,7 @@ import UIKit
import PSMLocationSDK
import OneWeatherCore
import OneWeatherAnalytics
import AppTrackingTransparency
protocol TodayViewModelDelegate: ViewModelDelegate {
func showOnboarding(viewModel: TodayViewModel)
......@@ -97,7 +98,28 @@ class TodayViewModel: ViewModelProtocol {
self.delegate?.showPrivacyNotice(viewModel: self)
}
else {
self.onboardingFlowCompleted()
if #available(iOS 14.5, *) {
if !CCPAHelper.shared.isNewUser && ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization { result in
self.onboardingFlowCompleted()
if result == .authorized {
analytics(log: .ANALYTICS_ATT_ACCEPTED)
analytics(set: .att, to: true)
}
else if result == .denied {
analytics(log: .ANALYTICS_ATT_DENY)
analytics(set: .att, to: false)
}
}
analytics(log: .ANALYTICS_ATT_SHOWN)
}
else {
self.onboardingFlowCompleted()
}
}
else {
self.onboardingFlowCompleted()
}
}
}
}
......
......@@ -14,6 +14,7 @@ public enum AnalyticsAttribute {
case lastSeenFipsCodeNonTracfone
/// True/False; Wether the splash screen has been shown to the user for the first time or not.
case splashFTUE
case att
/// Use this instead of rawValue, because we might have different attributes with the same string value.
public var attributeName: String {
......@@ -26,6 +27,8 @@ public enum AnalyticsAttribute {
return "LAST_SEEN_FIPS_CODE_NON_TRACFONE"
case .splashFTUE:
return "SPLASH_FTUE"
case .att:
return "ATT"
}
}
}
......@@ -99,4 +99,11 @@ public enum AnalyticsEvent: String {
/// Splash screen: Fired when a user sees the splash screen (for the first time)
case ANALYTICS_FTUE_SPLASH_SEEN = "FTUE_SPLASH_SEEN"
/// When the ATT prompt is shown to the user
case ANALYTICS_ATT_SHOWN = "ATT_SHOWN"
/// When the ATT prompt is accepted by the user
case ANALYTICS_ATT_ACCEPTED = "ATT_ACCEPTED"
/// When the ATT prompt is Denied by the user
case ANALYTICS_ATT_DENY = "ATT_DENY"
}
......@@ -10,7 +10,7 @@ import AppsFlyerLib
internal struct AppsFlyerAnalyticsService: AnalyticsService {
public let name: String = "AppsFlyer"
let eventsWhitelist: Set<AnalyticsEvent>? = [.ANALYTICS_APP_OPEN, .ANALYTICS_USER_QUALIFIED, .ANALYTICS_D3_RETAINED, .ANALYTICS_FIRST_OPEN]
let eventsWhitelist: Set<AnalyticsEvent>? = [.ANALYTICS_APP_OPEN, .ANALYTICS_USER_QUALIFIED, .ANALYTICS_D3_RETAINED, .ANALYTICS_FIRST_OPEN, .ANALYTICS_ATT_ACCEPTED]
let attributesWhitelist: Set<AnalyticsAttribute>? = [] // block all
func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment