Commit 541f3a3c by Demid Merzlyakov

MoEngage push notifications handling.

parent 7d111caa
...@@ -18,4 +18,5 @@ public enum AnalyticsParameter: String { ...@@ -18,4 +18,5 @@ public enum AnalyticsParameter: String {
case ANALYTICS_KEY_PLACEMENT_NAME = "placement_name" case ANALYTICS_KEY_PLACEMENT_NAME = "placement_name"
case ANALYTICS_KEY_AD_UNIT_ID = "AD_PLACEMENT_ID" case ANALYTICS_KEY_AD_UNIT_ID = "AD_PLACEMENT_ID"
case ANALYTICS_KEY_AD_ADAPTER = "AD_ADAPTER" case ANALYTICS_KEY_AD_ADAPTER = "AD_ADAPTER"
case ANALYTICS_KEY_PUSH_NOTIFICATION_SOURCE = "source"
} }
...@@ -70,11 +70,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -70,11 +70,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
MoEngage.sharedInstance().initializeLive(with: moEngageConfig, andLaunchOptions: launchOptions) MoEngage.sharedInstance().initializeLive(with: moEngageConfig, andLaunchOptions: launchOptions)
#endif #endif
PushNotificationsManager.shared.registerForRemoteNotifications()
return true return true
} }
func applicationDidBecomeActive(_ application: UIApplication) { func applicationDidBecomeActive(_ application: UIApplication) {
LocationManager.shared.updateAllWeatherIfNeeded() LocationManager.shared.updateAllWeatherIfNeeded()
} }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
PushNotificationsManager.shared.set(pushToken: deviceToken)
}
} }
...@@ -55,7 +55,7 @@ class DeeplinksRouter { ...@@ -55,7 +55,7 @@ class DeeplinksRouter {
return false return false
} }
private func parseLocation(from url: URL) -> PartialLocation? { public func parseLocation(from url: URL) -> PartialLocation? {
guard let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems else { guard let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems else {
return nil return nil
} }
......
...@@ -421,16 +421,6 @@ public class LocationManager { ...@@ -421,16 +421,6 @@ public class LocationManager {
} }
private func makeLocation(from partialLocation: PartialLocation, completion: @escaping (Location?) -> ()) { private func makeLocation(from partialLocation: PartialLocation, completion: @escaping (Location?) -> ()) {
guard let latStr = partialLocation.lat, let lonStr = partialLocation.lon, let lat = CLLocationDegrees(latStr), let lon = CLLocationDegrees(lonStr) else {
log.error("Geo lookup: no coordinates present: \(partialLocation)")
var location: Location? = nil
if partialLocation.deviceLocation {
log.debug("Adding a placeholder empty device location.")
location = Location(deviceLocation: true, timeZone: TimeZone.current)
}
completion(location)
return
}
if let fipsCode = partialLocation.fipsCode { if let fipsCode = partialLocation.fipsCode {
if let existingLocation = locations.first(where: { $0.fipsCode == fipsCode }) { if let existingLocation = locations.first(where: { $0.fipsCode == fipsCode }) {
completion(existingLocation) completion(existingLocation)
...@@ -443,6 +433,16 @@ public class LocationManager { ...@@ -443,6 +433,16 @@ public class LocationManager {
return return
} }
} }
guard let latStr = partialLocation.lat, let lonStr = partialLocation.lon, let lat = CLLocationDegrees(latStr), let lon = CLLocationDegrees(lonStr) else {
log.error("Geo lookup: no coordinates present: \(partialLocation)")
var location: Location? = nil
if partialLocation.deviceLocation {
log.debug("Adding a placeholder empty device location.")
location = Location(deviceLocation: true, timeZone: TimeZone.current)
}
completion(location)
return
}
let location = CLLocation(latitude: lat, longitude: lon) let location = CLLocation(latitude: lat, longitude: lon)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
import MoEngage import MoEngage
/*
class PushNotificationsManager: NSObject { class PushNotificationsManager: NSObject {
// MARK: - Private // MARK: - Private
...@@ -66,26 +66,28 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate { ...@@ -66,26 +66,28 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate {
return nil return nil
} }
private func switchLocationIfNeeded(parsing screenData: [String: Any]?, using router: Router) { private func switchLocationIfNeeded(parsing screenData: [String: Any]?, using router: DeeplinksRouter) {
guard let screenData = screenData else { guard let screenData = screenData else {
return return
} }
if let cityId = screenData["location"] as? String { let cityId = screenData["location"] as? String
let lat = screenData["lat"] as? String let lat = screenData["lat"] as? String
let lon = screenData["lon"] as? String let lon = screenData["lon"] as? String
let fipsCode = screenData["fipsCode"] as? String
if let location = WeatherUpdateManager.shared.locationFrom(cityId: cityId, lat: lat, lon: lon) { guard (lat != nil && lon != nil) || cityId != nil || fipsCode != nil else {
log.info("MoEngage push: location found: \(location)") log.debug("MoEngage push: no location data found")
WeatherUpdateManager.shared.addLocation(location) return
}
else {
log.error("MoEngage push:Location found but couldn't be parsed.")
}
}
else {
log.debug("MoEngage push: no cityId found")
} }
let newLoc = GeoNamesPlace()
newLoc.latitude = lat
newLoc.longitude = lon
newLoc.optionalCityId = cityId
newLoc.fipsCode = fipsCode
LocationManager.shared.addIfNeeded(partialLocation: newLoc, selectLocation: true)
log.info("MoEngage push: location found: \(newLoc)")
} }
private func handleMoEngageDeeplinks(for response: UNNotificationResponse) { private func handleMoEngageDeeplinks(for response: UNNotificationResponse) {
...@@ -98,12 +100,7 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate { ...@@ -98,12 +100,7 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate {
log.info("MoEngage push received: \(userInfo)") log.info("MoEngage push received: \(userInfo)")
guard let tabBar = TabBarController.viewController else { let router = DeeplinksRouter()
log.error("No tab bar found to initialize Router")
return
}
let router = Router(tabBar: tabBar)
if let moEngageUrl = makeMoEngageDeeplinkUrl(from: response) { if let moEngageUrl = makeMoEngageDeeplinkUrl(from: response) {
router.open(url: moEngageUrl) router.open(url: moEngageUrl)
} }
...@@ -135,7 +132,7 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate { ...@@ -135,7 +132,7 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate {
case "0": case "0":
router.openToday() router.openToday()
case "1": case "1":
router.openForecast(detailType: nil) router.openForecast(timePeriod: nil)
case "2": case "2":
router.openPrecipitation() router.openPrecipitation()
case "3": case "3":
...@@ -151,7 +148,6 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate { ...@@ -151,7 +148,6 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
MoEngage.sharedInstance().userNotificationCenter(center, didReceive: response) // not sure we should call it for PushPin notifications, too MoEngage.sharedInstance().userNotificationCenter(center, didReceive: response) // not sure we should call it for PushPin notifications, too
guard !pushPinManager.processPushPinNotification(response) else { return }
handleMoEngageDeeplinks(for: response) handleMoEngageDeeplinks(for: response)
completionHandler() completionHandler()
} }
...@@ -159,13 +155,13 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate { ...@@ -159,13 +155,13 @@ extension PushNotificationsManager: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
if UIApplication.shared.applicationState == .active { if UIApplication.shared.applicationState == .active {
analyticsLogEvent(ANALYTICS_PUSH_RECEIVED) analytics(log: .ANALYTICS_PUSH_RECEIVED)
} else { } else {
analyticsLogEvent(ANALYTICS_PUSH_SELECTED, params: ["source": "background"]) analytics(log: .ANALYTICS_PUSH_SELECTED, params: [.ANALYTICS_KEY_PUSH_NOTIFICATION_SOURCE: "background"])
} }
log.debug("Got a push notification: \(notification.request.content.userInfo)"); log.debug("Got a push notification: \(notification.request.content.userInfo)");
completionHandler([.sound,.alert]) completionHandler([.sound,.alert])
} }
} }
*/
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