MESSENGER-4101 matomo consent changes

This commit is contained in:
Frank Rotermund
2023-03-23 13:34:30 +01:00
parent 285bf4bdc0
commit d3958df0ed
9 changed files with 127 additions and 34 deletions
@@ -22,10 +22,21 @@ import Foundation
private struct AccountAnalytics: Codable {
enum CodingKeys: String, CodingKey {
case analyticsEnabled = "enabled"
case consent
case time
case platform
case appVersion = "app_version"
}
let consent: Bool
let time: Int
let platform: String
let appVersion: String
func toJsonDict() -> [String : Any] {
return [CodingKeys.consent.rawValue:consent, CodingKeys.time.rawValue:time, CodingKeys.platform.rawValue:platform, CodingKeys.appVersion.rawValue:appVersion]
}
let analyticsEnabled: Bool
}
private enum AccountDataTypes {
@@ -36,17 +47,32 @@ import Foundation
private lazy var serializationService: SerializationServiceType = SerializationService()
init(mxSession: MXSession) {
self.session = mxSession
session = mxSession
}
func needsToShowPromt() -> Bool {
guard let analyticsArray = session.accountData.accountData(forEventType: AccountDataTypes.analytics) as? [String: Any] else {
return true
}
guard analyticsArray[session.myDeviceId] is [String: Any] else {
return true
}
return false
}
func isEnabled() -> Bool {
guard let analyticsDict = session.accountData.accountData(forEventType: AccountDataTypes.analytics) as? [String: Any] else {
guard let analyticsArray = session.accountData.accountData(forEventType: AccountDataTypes.analytics) as? [String: Any] else {
return false
}
guard let deviceId = session.myDeviceId, let analyticsDict = analyticsArray[deviceId] as? [String: Any] else {
return false
}
do {
let analytics: AccountAnalytics = try serializationService.deserialize(analyticsDict)
return analytics.analyticsEnabled
return analytics.consent
} catch {
}
@@ -56,8 +82,11 @@ import Foundation
func setEnabled(_ enabled: Bool) {
var analyticsDict = session.accountData.accountData(forEventType: AccountDataTypes.analytics) ?? [:]
analyticsDict[AccountAnalytics.CodingKeys.analyticsEnabled.rawValue] = enabled
let currentConsent = AccountAnalytics(consent: enabled, time: Int(Date().timeIntervalSince1970*1000), platform: "ios", appVersion: AppInfo.current.appVersion?.bundleShortVersion ?? "")
analyticsDict[session.myDeviceId] = currentConsent.toJsonDict()
session.setAccountData(analyticsDict, forType: AccountDataTypes.analytics, success: nil, failure: nil)
}
}