Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions Sources/APNSCore/LiveActivity/APNSLiveActivityNotification.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ public struct APNSLiveActivityNotification<ContentState: Encodable & Sendable>:
/// - timestamp: Timestamp when sending notification
/// - dismissalDate: Timestamp when to dismiss live notification when sent with `end`, if in the past
/// dismiss immediately
/// - staleDate: Timestamp when the notification is marked as stale
public init(
expiration: APNSNotificationExpiration,
priority: APNSPriority,
Expand All @@ -113,17 +114,20 @@ public struct APNSLiveActivityNotification<ContentState: Encodable & Sendable>:
alert: APNSAlertNotificationContent? = nil,
timestamp: Int,
dismissalDate: APNSLiveActivityDismissalDate = .none,
staleDate: Int? = nil,
apnsID: UUID? = nil
) {
self.init(
expiration: expiration,
priority: priority,
topic: appID + ".push-type.liveactivity",
apnsID: apnsID,
contentState: contentState,
event: event,
alert: alert,
timestamp: timestamp,
dismissalDate: dismissalDate
dismissalDate: dismissalDate,
staleDate: staleDate
)
}

Expand All @@ -143,6 +147,7 @@ public struct APNSLiveActivityNotification<ContentState: Encodable & Sendable>:
/// - timestamp: Timestamp when sending notification
/// - dismissalDate: Timestamp when to dismiss live notification when sent with `end`, if in the past
/// dismiss immediately
/// - staleDate: Timestamp when the notification is marked as stale
public init(
expiration: APNSNotificationExpiration,
priority: APNSPriority,
Expand All @@ -152,13 +157,15 @@ public struct APNSLiveActivityNotification<ContentState: Encodable & Sendable>:
event: APNSLiveActivityNotificationEvent,
alert: APNSAlertNotificationContent? = nil,
timestamp: Int,
dismissalDate: APNSLiveActivityDismissalDate = .none
dismissalDate: APNSLiveActivityDismissalDate = .none,
staleDate: Int? = nil
) {
self.aps = APNSLiveActivityNotificationAPSStorage(
timestamp: timestamp,
event: event.rawValue,
contentState: contentState,
dismissalDate: dismissalDate.dismissal,
staleDate: staleDate,
alert: alert
)
self.apnsID = apnsID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,29 @@ struct APNSLiveActivityNotificationAPSStorage<ContentState: Encodable & Sendable
case event = "event"
case contentState = "content-state"
case dismissalDate = "dismissal-date"
case staleDate = "stale-date"
case alert = "alert"
}

var timestamp: Int
var event: String
var contentState: ContentState
var dismissalDate: Int?
var staleDate: Int?
var alert: APNSAlertNotificationContent?

init(
timestamp: Int,
event: String,
contentState: ContentState,
dismissalDate: Int?,
staleDate: Int?,
alert: APNSAlertNotificationContent? = nil
) {
self.timestamp = timestamp
self.contentState = contentState
self.dismissalDate = dismissalDate
self.staleDate = staleDate
self.event = event
self.alert = alert
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,31 @@ final class APNSLiveActivityNotificationTests: XCTestCase {
XCTAssertEqual(jsonObject1, jsonObject2)
}

func testEncodeUpdateStale() throws {
let notification = APNSLiveActivityNotification(
expiration: .immediately,
priority: .immediately,
appID: "test.app.id",
contentState: State(),
event: .update,
timestamp: 1_672_680_658,
staleDate: 1_672_680_800)

let encoder = JSONEncoder()
let data = try encoder.encode(notification)

let expectedJSONString = """
{"aps":{"event":"update","content-state":{"string":"Test","number":123},"timestamp":1672680658,
"stale-date":1672680800}}
"""

let jsonObject1 = try JSONSerialization.jsonObject(with: data) as! NSDictionary
let jsonObject2 =
try JSONSerialization.jsonObject(with: expectedJSONString.data(using: .utf8)!)
as! NSDictionary
XCTAssertEqual(jsonObject1, jsonObject2)
}

func testEncodeUpdateAlert() throws {
let notification = APNSLiveActivityNotification(
expiration: .immediately,
Expand Down