102 lines
4.1 KiB
Swift
102 lines
4.1 KiB
Swift
import APNSwift
|
||
import Foundation
|
||
|
||
/**
|
||
A push message to send to other devices.
|
||
|
||
This structure contains the content of the notification, as well as all data to send the notification to one or more recipients.
|
||
*/
|
||
public struct PushMessage: Codable {
|
||
/**
|
||
A list of push tokens for all recipients of the message
|
||
*/
|
||
public let recipients: [PushToken]
|
||
|
||
/**
|
||
The notification content.
|
||
*/
|
||
public let payload: APNSwiftPayload
|
||
|
||
/**
|
||
The value of this header must accurately reflect the contents of your notification’s payload.
|
||
|
||
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
|
||
|
||
/**
|
||
The date at which the notification is no longer valid.
|
||
|
||
If the value is not `nil`, APNs stores the notification and tries to deliver it at least once, repeating the attempt as needed until the specified date. If the value is `nil`, APNs attempts to deliver the notification only once and doesn’t store it.
|
||
|
||
A single APNs attempt may involve retries over multiple network interfaces and connections of the destination device. Often these retries span over some time period, depending on the network characteristics. In addition, a push notification may take some time on the network after APNs sends it to the device. APNs uses best efforts to honor the expiry date without any guarantee. If the value is not `nil`, the notification may be delivered after the mentioned date. If the value is `nil`, the notification may be delivered with some delay.
|
||
*/
|
||
public let expiration: Date?
|
||
|
||
/**
|
||
The priority of the notification.
|
||
|
||
Set `lowPriority = false` to send the notification immediately.
|
||
Set `lowPriority = true` to send the notification based on power considerations on the user’s device.
|
||
*/
|
||
public let lowPriority: Bool
|
||
|
||
/**
|
||
An identifier you use to coalesce multiple notifications into a single notification for the user.
|
||
|
||
Typically, each notification request causes a new notification to be displayed on the user’s device. When sending the same notification more than once, use the same value in this header to coalesce the requests. The value of this key must not exceed 64 bytes.
|
||
*/
|
||
public let collapseIdentifier: String?
|
||
|
||
/**
|
||
Create a new push message.
|
||
|
||
- Parameter recipients: A list of push tokens for all recipients of the message
|
||
- Parameter payload: The message content and metadata
|
||
- Parameter pushType: The content type of the message
|
||
- Parameter topic: The topic id
|
||
- Parameter expiration: An optional expiration date for the message
|
||
- Parameter lowPriority: Specify `true` to deliver message with lower priority
|
||
- Parameter collapseIdentifier: An optional identifier to group push notifications
|
||
*/
|
||
public init(recipients: [PushToken],
|
||
payload: APNSwiftPayload,
|
||
pushType: APNSwiftConnection.PushType,
|
||
expiration: Date? = nil,
|
||
lowPriority: Bool = false,
|
||
collapseIdentifier: String? = nil) {
|
||
self.recipients = recipients
|
||
self.payload = payload
|
||
self.pushType = pushType
|
||
self.expiration = expiration
|
||
self.lowPriority = lowPriority
|
||
self.collapseIdentifier = collapseIdentifier
|
||
}
|
||
}
|
||
|
||
extension APNSwiftConnection.PushType: Codable {
|
||
|
||
}
|
||
|
||
extension APNSwiftConnection.PushType {
|
||
|
||
/// The extension to add to the push topic depending on the notification type
|
||
public var topicExtension: String {
|
||
switch self {
|
||
case .alert, .background:
|
||
return ""
|
||
case .mdm:
|
||
return ""
|
||
case .voip:
|
||
return ".voip"
|
||
case .fileprovider:
|
||
return ".pushkit.fileprovider"
|
||
//case .location:
|
||
// return ".location-query"
|
||
//case .complication:
|
||
// return ".complication"
|
||
}
|
||
}
|
||
}
|