diff --git a/Multisig/Data/Services/Notification Service/RegisterNotificationTokenRequest.swift b/Multisig/Data/Services/Notification Service/RegisterNotificationTokenRequest.swift index 2dff00bc4..fa1f008bd 100644 --- a/Multisig/Data/Services/Notification Service/RegisterNotificationTokenRequest.swift +++ b/Multisig/Data/Services/Notification Service/RegisterNotificationTokenRequest.swift @@ -25,7 +25,7 @@ struct RegisterNotificationTokenRequest: JSONRequest { typealias ResponseType = Response - init(deviceID: UUID, + init(deviceID: String, safes: [Address], token: String, bundle: String, @@ -33,7 +33,10 @@ struct RegisterNotificationTokenRequest: JSONRequest { buildNumber: String, timestamp: String?) throws { - self.uuid = deviceID.uuidString.lowercased() + guard UUID(uuidString: deviceID) != nil else { + throw "'deviceID' should be UUID string" + } + self.uuid = deviceID self.safes = safes.map { $0.checksummed } self.cloudMessagingToken = token self.bundle = bundle @@ -78,7 +81,7 @@ struct RegisterNotificationTokenRequest: JSONRequest { extension SafeTransactionService { @discardableResult - func register(deviceID: UUID, + func register(deviceID: String, safes: [Address], token: String, bundle: String, diff --git a/Multisig/Data/Services/Notification Service/UnregisterNotificationTokenRequest.swift b/Multisig/Data/Services/Notification Service/UnregisterNotificationTokenRequest.swift index e4101a966..1d0711784 100644 --- a/Multisig/Data/Services/Notification Service/UnregisterNotificationTokenRequest.swift +++ b/Multisig/Data/Services/Notification Service/UnregisterNotificationTokenRequest.swift @@ -17,9 +17,9 @@ struct UnregisterNotificationTokenRequest: JSONRequest { typealias ResponseType = EmptyResponse - init(deviceID: UUID, address: Address) { + init(deviceID: String, address: Address) { self.address = address.checksummed - self.deviceID = deviceID.uuidString.lowercased() + self.deviceID = deviceID } struct EmptyResponse: Decodable { @@ -28,7 +28,7 @@ struct UnregisterNotificationTokenRequest: JSONRequest { } extension SafeTransactionService { - func unregister(deviceID: UUID, address: Address) throws { + func unregister(deviceID: String, address: Address) throws { try execute(request: UnregisterNotificationTokenRequest(deviceID: deviceID, address: address)) } } diff --git a/Multisig/UI/App/RemoteNotificationHandler.swift b/Multisig/UI/App/RemoteNotificationHandler.swift index 3917afc04..c1bb3f167 100644 --- a/Multisig/UI/App/RemoteNotificationHandler.swift +++ b/Multisig/UI/App/RemoteNotificationHandler.swift @@ -12,9 +12,8 @@ import UserNotifications import Firebase class RemoteNotificationHandler { - - @UserDefaultWithDefault(key: "io.gnosis.multisig.deviceID", defaultValue: UUID().uuidString) - private var storedDeviceID: String + @UserDefault(key: "io.gnosis.multisig.deviceID") + private var storedDeviceID: String? @EnumDefault(key: "io.gnosis.multisig.authorizationStatus") private var authorizationStatus: UNAuthorizationStatus? @@ -24,15 +23,6 @@ class RemoteNotificationHandler { private var queue = DispatchQueue(label: "RemoteNotificationHandlerQueue") - private var deviceID: UUID { - get { - UUID(uuidString: storedDeviceID)! - } - set { - storedDeviceID = newValue.uuidString - } - } - func setUpMessaging(delegate: MessagingDelegate & UNUserNotificationCenterDelegate) { logDebug("Setting up notification handling") Messaging.messaging().delegate = delegate @@ -48,6 +38,9 @@ class RemoteNotificationHandler { func appStarted() { logDebug("App started") + if storedDeviceID == nil { + storedDeviceID = UUID().uuidString + } monitorAuthorizationStatus() } @@ -180,7 +173,7 @@ class RemoteNotificationHandler { } do { try App.shared.safeTransactionService - .register(deviceID: self.deviceID, + .register(deviceID: self.storedDeviceID!, safes: addresses, token: token, bundle: appConfig.bundleIdentifier, @@ -196,7 +189,7 @@ class RemoteNotificationHandler { private func unregister(address: Address) { queue.async { [unowned self] in do { - try App.shared.safeTransactionService.unregister(deviceID: self.deviceID, address: address) + try App.shared.safeTransactionService.unregister(deviceID: self.storedDeviceID!, address: address) } catch { logError("Failed to unregister device", error) }