Skip to content

Commit

Permalink
♻️ Ensure latest device prop values are always sent
Browse files Browse the repository at this point in the history
  • Loading branch information
mmaatttt authored and iujames committed Sep 17, 2024
1 parent 3c46a8e commit 98c5ade
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ internal class AppcuesRequestPushAction: AppcuesExperienceAction {
}

let pushMonitor = appcues.container.resolve(PushMonitoring.self)
pushMonitor.refreshPushStatus(publishChange: true) { _ in
pushMonitor.refreshPushStatus { _ in
completion()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ internal class PushVerifier {
private func requestPush() {
let options: UNAuthorizationOptions = [.alert, .sound, .badge]
UNUserNotificationCenter.current().requestAuthorization(options: options) { _, _ in
self.pushMonitor.refreshPushStatus(publishChange: true) { _ in
self.pushMonitor.refreshPushStatus { _ in
DispatchQueue.main.async {
self.verifyPush()
}
Expand Down
16 changes: 9 additions & 7 deletions Sources/AppcuesKit/Push/PushMonitor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ internal protocol PushMonitoring: AnyObject {

func setPushToken(_ deviceToken: Data?)

func refreshPushStatus(publishChange: Bool, completion: ((UNAuthorizationStatus) -> Void)?)
func refreshPushStatus(completion: ((UNAuthorizationStatus) -> Void)?)

func didReceiveNotification(response: UNNotificationResponse, completionHandler: @escaping () -> Void) -> Bool
@discardableResult
Expand Down Expand Up @@ -55,7 +55,7 @@ internal class PushMonitor: PushMonitoring {
self.storage = container.resolve(DataStoring.self)
self.analyticsPublisher = container.resolve(AnalyticsPublishing.self)

refreshPushStatus(publishChange: false)
refreshPushStatus()
getPushEnvironment()

NotificationCenter.default.addObserver(
Expand All @@ -70,21 +70,23 @@ internal class PushMonitor: PushMonitoring {

@objc
private func applicationWillEnterForeground(notification: Notification) {
refreshPushStatus(publishChange: true)
refreshPushStatus()
}

func setPushToken(_ deviceToken: Data?) {
storage.pushToken = deviceToken?.map { String(format: "%02x", $0) }.joined()
let newToken = deviceToken?.map { String(format: "%02x", $0) }.joined()
let shouldPublish = storage.pushToken != newToken
storage.pushToken = newToken

if appcues?.sessionID != nil {
if appcues?.sessionID != nil && shouldPublish {
analyticsPublisher.publish(TrackingUpdate(
type: .event(name: Events.Device.deviceUpdated.rawValue, interactive: true),
isInternal: true
))
}
}

func refreshPushStatus(publishChange: Bool, completion: ((UNAuthorizationStatus) -> Void)? = nil) {
func refreshPushStatus(completion: ((UNAuthorizationStatus) -> Void)? = nil) {
// Skip call to UNUserNotificationCenter.current() in tests to avoid crashing in package tests
#if DEBUG
guard ProcessInfo.processInfo.environment["XCTestBundlePath"] == nil else {
Expand All @@ -94,7 +96,7 @@ internal class PushMonitor: PushMonitoring {
#endif

UNUserNotificationCenter.current().getNotificationSettings { [weak self] settings in
let shouldPublish = publishChange && self?.pushAuthorizationStatus != settings.authorizationStatus
let shouldPublish = self?.appcues?.sessionID != nil && self?.pushAuthorizationStatus != settings.authorizationStatus
self?.pushAuthorizationStatus = settings.authorizationStatus

if shouldPublish {
Expand Down

0 comments on commit 98c5ade

Please sign in to comment.