diff --git a/Sources/PushMessageDefinitions/PushMessage.swift b/Sources/PushMessageDefinitions/PushMessage.swift index 4bd4f60..f0023c4 100644 --- a/Sources/PushMessageDefinitions/PushMessage.swift +++ b/Sources/PushMessageDefinitions/PushMessage.swift @@ -15,7 +15,7 @@ public struct PushMessage: Codable { /** The notification content. */ - public let payload: APNSwiftPayload + public let payload: APNSPayload /** The value of this header must accurately reflect the contents of your notification’s payload. @@ -23,7 +23,7 @@ public struct PushMessage: Codable { If there’s a mismatch, or if the header is missing on required systems, APNs may return an error, delay the delivery of the notification, or drop it altogether. - Note: Required for watchOS 6 and later; recommended for macOS, iOS, tvOS, and iPadOS */ - public let pushType: APNSwiftConnection.PushType + public let pushType: APNSClient.PushType /** The date at which the notification is no longer valid. @@ -61,8 +61,8 @@ public struct PushMessage: Codable { - Parameter collapseIdentifier: An optional identifier to group push notifications */ public init(recipients: [PushToken], - payload: APNSwiftPayload, - pushType: APNSwiftConnection.PushType, + payload: APNSPayload, + pushType: APNSClient.PushType, expiration: Date? = nil, lowPriority: Bool = false, collapseIdentifier: String? = nil) { @@ -75,11 +75,63 @@ public struct PushMessage: Codable { } } -extension APNSwiftConnection.PushType: Codable { +extension APNSClient.PushType: Codable { + struct PushTypeDecodingError: Error { + + } + + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(rawValue) + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let raw = try container.decode(UInt8.self) + + switch raw { + case 1: + self = .alert + case 2: + self = .background + case 3: + self = .mdm + case 4: + self = .voip + case 5: + self = .fileprovider + case 6: + self = .complication + default: + throw PushTypeDecodingError() + } + } + + private var rawValue: UInt8 { + switch self { + case .alert: + return 1 + case .background: + return 2 + case .mdm: + return 3 + case .voip: + return 4 + case .fileprovider: + return 5 + case .complication: + return 6 + //case .location: + // return ".location-query" + default: + return 0 + } + } } -extension APNSwiftConnection.PushType { +extension APNSClient.PushType { /// The extension to add to the push topic depending on the notification type public var topicExtension: String { @@ -94,8 +146,11 @@ extension APNSwiftConnection.PushType { return ".pushkit.fileprovider" //case .location: // return ".location-query" - //case .complication: - // return ".complication" + case .complication: + return ".complication" + default: + return "" + } } }