Commit 7d64491a by Demid Merzlyakov

IOS-74: add AppsFlyer analytics service.

parent f1a7d6bc
...@@ -211,6 +211,7 @@ ...@@ -211,6 +211,7 @@
CE376C98261EE484000B1159 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE376C97261EE484000B1159 /* LaunchScreen.storyboard */; }; CE376C98261EE484000B1159 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE376C97261EE484000B1159 /* LaunchScreen.storyboard */; };
CE3A36C72638A77E002CACC3 /* BlendFIPSSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */; }; CE3A36C72638A77E002CACC3 /* BlendFIPSSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */; };
CE3A36ED2638A825002CACC3 /* FIPSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */; }; CE3A36ED2638A825002CACC3 /* FIPSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */; };
CE3C1DB6265536360031BD72 /* AppsFlyerAnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3C1DB5265536360031BD72 /* AppsFlyerAnalyticsService.swift */; };
CE578FD325F7E89400E8B85D /* DayTimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */; }; CE578FD325F7E89400E8B85D /* DayTimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */; };
CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE225FB415F00E8B85D /* CityCell.swift */; }; CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE225FB415F00E8B85D /* CityCell.swift */; };
CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE325FB415F00E8B85D /* LocationViewController.swift */; }; CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE325FB415F00E8B85D /* LocationViewController.swift */; };
...@@ -543,6 +544,7 @@ ...@@ -543,6 +544,7 @@
CE376C97261EE484000B1159 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; }; CE376C97261EE484000B1159 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlendFIPSSource.swift; sourceTree = "<group>"; }; CE3A36C62638A77E002CACC3 /* BlendFIPSSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlendFIPSSource.swift; sourceTree = "<group>"; };
CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FIPSResponse.swift; sourceTree = "<group>"; }; CE3A36EC2638A825002CACC3 /* FIPSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FIPSResponse.swift; sourceTree = "<group>"; };
CE3C1DB5265536360031BD72 /* AppsFlyerAnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsFlyerAnalyticsService.swift; sourceTree = "<group>"; };
CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayTimeWeather.swift; sourceTree = "<group>"; }; CE578FD225F7E89400E8B85D /* DayTimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayTimeWeather.swift; sourceTree = "<group>"; };
CE578FE225FB415F00E8B85D /* CityCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CityCell.swift; sourceTree = "<group>"; }; CE578FE225FB415F00E8B85D /* CityCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CityCell.swift; sourceTree = "<group>"; };
CE578FE325FB415F00E8B85D /* LocationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; }; CE578FE325FB415F00E8B85D /* LocationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; };
...@@ -1607,6 +1609,7 @@ ...@@ -1607,6 +1609,7 @@
CEF959642600C2F900975FAA /* AnalyticsService.swift */, CEF959642600C2F900975FAA /* AnalyticsService.swift */,
CEF959732600C3A400975FAA /* FlurryAnalyticsService.swift */, CEF959732600C3A400975FAA /* FlurryAnalyticsService.swift */,
CEF9598F2600C5A800975FAA /* MoEngageAnalyticsService.swift */, CEF9598F2600C5A800975FAA /* MoEngageAnalyticsService.swift */,
CE3C1DB5265536360031BD72 /* AppsFlyerAnalyticsService.swift */,
); );
path = Services; path = Services;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -2055,6 +2058,7 @@ ...@@ -2055,6 +2058,7 @@
CD37D3FE260DF726002669D6 /* SettingsCellFactory.swift in Sources */, CD37D3FE260DF726002669D6 /* SettingsCellFactory.swift in Sources */,
CD8E041625F8F91B001785B6 /* ForecastCellFactory.swift in Sources */, CD8E041625F8F91B001785B6 /* ForecastCellFactory.swift in Sources */,
87C1720D25FF870600DA3464 /* GeoNamesPlace.swift in Sources */, 87C1720D25FF870600DA3464 /* GeoNamesPlace.swift in Sources */,
CE3C1DB6265536360031BD72 /* AppsFlyerAnalyticsService.swift in Sources */,
CE8962A826175DF500CA274A /* _CoreCurrentWeather.swift in Sources */, CE8962A826175DF500CA274A /* _CoreCurrentWeather.swift in Sources */,
CEFB857A2617510700C5CDD2 /* 1WModel.xcdatamodeld in Sources */, CEFB857A2617510700C5CDD2 /* 1WModel.xcdatamodeld in Sources */,
CDC70833260FBFD4004A1974 /* UnitPressure+Atmosphere.swift in Sources */, CDC70833260FBFD4004A1974 /* UnitPressure+Atmosphere.swift in Sources */,
......
...@@ -15,7 +15,7 @@ public class Analytics { ...@@ -15,7 +15,7 @@ public class Analytics {
self.services = services self.services = services
} }
public static let shared = Analytics(services: [FlurryAnalyticsService(), MoEngageAnalyticsService()]) public static let shared = Analytics(services: [FlurryAnalyticsService(), MoEngageAnalyticsService(), AppsFlyerAnalyticsService()])
public func log(event: AnalyticsEvent, params: [AnalyticsParameter: Any]? = nil) { public func log(event: AnalyticsEvent, params: [AnalyticsParameter: Any]? = nil) {
var loggedTo = [String]() var loggedTo = [String]()
......
...@@ -12,3 +12,16 @@ public protocol AnalyticsService { ...@@ -12,3 +12,16 @@ public protocol AnalyticsService {
var eventsWhitelist: Set<AnalyticsEvent>? { get } var eventsWhitelist: Set<AnalyticsEvent>? { get }
func log(event: AnalyticsEvent, params: [AnalyticsParameter: Any]?) func log(event: AnalyticsEvent, params: [AnalyticsParameter: Any]?)
} }
extension AnalyticsService {
func stringKeyedParams(from params: [AnalyticsParameter: Any]?) -> [String: Any]? {
guard let params = params else {
return nil
}
var stringKeyedParams = [String: Any]()
for (key, value) in params {
stringKeyedParams[key.rawValue] = value
}
return stringKeyedParams
}
}
//
// AppsFlyerAnalyticsService.swift
// 1Weather
//
// Created by Demid Merzlyakov on 19.05.2021.
//
import Foundation
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]
func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) {
AppsFlyerLib.shared().logEvent(event.rawValue, withValues: stringKeyedParams(from: params))
}
}
...@@ -13,15 +13,6 @@ internal struct FlurryAnalyticsService: AnalyticsService { ...@@ -13,15 +13,6 @@ internal struct FlurryAnalyticsService: AnalyticsService {
let eventsWhitelist: Set<AnalyticsEvent>? = nil let eventsWhitelist: Set<AnalyticsEvent>? = nil
func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) { func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) {
// Not sure we need this conversion Flurry.logEvent(event.rawValue, withParameters: stringKeyedParams(from: params))
var stringKeyedParams: [String: Any]? = nil
if let params = params {
stringKeyedParams = [String: Any]()
for (key, value) in params {
stringKeyedParams?[key.rawValue] = value
}
}
Flurry.logEvent(event.rawValue, withParameters: stringKeyedParams)
} }
} }
...@@ -13,13 +13,7 @@ internal struct MoEngageAnalyticsService: AnalyticsService { ...@@ -13,13 +13,7 @@ internal struct MoEngageAnalyticsService: AnalyticsService {
let eventsWhitelist: Set<AnalyticsEvent>? = nil let eventsWhitelist: Set<AnalyticsEvent>? = nil
func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) { func log(event: AnalyticsEvent, params: [AnalyticsParameter : Any]?) {
var stringKeyedParams: [String: Any]? = nil let stringKeyedParams = stringKeyedParams(from: params)
if let params = params {
stringKeyedParams = [String: Any]()
for (key, value) in params {
stringKeyedParams?[key.rawValue] = value
}
}
if let params = stringKeyedParams { if let params = stringKeyedParams {
if let nsParams = (params as NSDictionary).mutableCopy() as? NSMutableDictionary { // should never fail if let nsParams = (params as NSDictionary).mutableCopy() as? NSMutableDictionary { // should never fail
......
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