Skip to content

Commit f55fb93

Browse files
committed
live activity: add notification ID to click event
notification ID may be nullable if the live activity is started in-app
1 parent 8b899a0 commit f55fb93

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/LiveActivityConstants.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ enum LiveActivityConstants {
3535
static let clickId = "clickId"
3636
static let activityId = "activityId"
3737
static let activityType = "activityType"
38+
static let notificationId = "notificationId"
3839
static let redirect = "redirect"
3940
}
4041
}

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/OSLiveActivityViewExtensions.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ private func generateTrackingDeepLink<T: OneSignalLiveActivityAttributes>(origin
8989
// Get activity metadata
9090
let activityId = context.attributes.onesignal.activityId
9191
let activityType = String(describing: T.self)
92+
let notificationId = context.state.onesignal?.notificationId
9293

9394
// Build OneSignal tracking URL
9495
var components = URLComponents()
@@ -99,7 +100,8 @@ private func generateTrackingDeepLink<T: OneSignalLiveActivityAttributes>(origin
99100
var queryItems = [
100101
URLQueryItem(name: LiveActivityConstants.Tracking.clickId, value: clickId),
101102
URLQueryItem(name: LiveActivityConstants.Tracking.activityId, value: activityId),
102-
URLQueryItem(name: LiveActivityConstants.Tracking.activityType, value: activityType)
103+
URLQueryItem(name: LiveActivityConstants.Tracking.activityType, value: activityType),
104+
URLQueryItem(name: LiveActivityConstants.Tracking.notificationId, value: notificationId)
103105
]
104106

105107
if let originalURL = originalURL {

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/OneSignalLiveActivitiesManagerImpl.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ public class OneSignalLiveActivitiesManagerImpl: NSObject, OSLiveActivities {
207207
return getRedirectURL()
208208
}
209209

210-
trackClick(clickId: clickId, activityType: activityType, activityId: activityId)
210+
let notificationId = queryItems.first(where: { $0.name == LiveActivityConstants.Tracking.notificationId })?.value
211+
212+
trackClick(clickId: clickId, activityType: activityType, activityId: activityId, notificationId: notificationId)
211213

212214
return getRedirectURL()
213215
}
@@ -217,9 +219,9 @@ public class OneSignalLiveActivitiesManagerImpl: NSObject, OSLiveActivities {
217219
- Parameters:
218220
- clickId: UUID representing the unique click event, as it is possible for this click to be tracked multiple times.
219221
*/
220-
private static func trackClick(clickId: String, activityType: String, activityId: String) {
222+
private static func trackClick(clickId: String, activityType: String, activityId: String, notificationId: String?) {
221223
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OneSignal.LiveActivities trackClick called with clickId: \(clickId), activityType: \(activityType), activityId: \(activityId)")
222-
let req = OSRequestLiveActivityClicked(key: clickId, activityType: activityType, activityId: activityId)
224+
let req = OSRequestLiveActivityClicked(key: clickId, activityType: activityType, activityId: activityId, notificationId: notificationId)
223225
_executor.append(req)
224226
}
225227

iOS_SDK/OneSignalSDK/OneSignalLiveActivities/Source/Requests/OSRequestLiveActivityClicked.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class OSRequestLiveActivityClicked: OneSignalRequest, OSLiveActivityRequest {
3434
var key: String // UUID representing this unique click
3535
var activityType: String
3636
var activityId: String
37+
var notificationId: String?
3738
var requestSuccessful: Bool
3839
var shouldForgetWhenSuccessful: Bool = true
3940

@@ -69,10 +70,11 @@ class OSRequestLiveActivityClicked: OneSignalRequest, OSLiveActivityRequest {
6970
return false
7071
}
7172

72-
init(key: String, activityType: String, activityId: String) {
73+
init(key: String, activityType: String, activityId: String, notificationId: String?) {
7374
self.key = key
7475
self.activityType = activityType
7576
self.activityId = activityId
77+
self.notificationId = notificationId
7678
self.requestSuccessful = false
7779
super.init()
7880
}
@@ -81,6 +83,7 @@ class OSRequestLiveActivityClicked: OneSignalRequest, OSLiveActivityRequest {
8183
coder.encode(key, forKey: "key")
8284
coder.encode(activityType, forKey: "activityType")
8385
coder.encode(activityId, forKey: "activityId")
86+
coder.encode(notificationId, forKey: "notificationId")
8487
coder.encode(requestSuccessful, forKey: "requestSuccessful")
8588
coder.encode(timestamp, forKey: "timestamp")
8689
}
@@ -97,6 +100,7 @@ class OSRequestLiveActivityClicked: OneSignalRequest, OSLiveActivityRequest {
97100
self.key = key
98101
self.activityType = activityType
99102
self.activityId = activityId
103+
self.notificationId = coder.decodeObject(forKey: "notificationId") as? String
100104
self.requestSuccessful = coder.decodeBool(forKey: "requestSuccessful")
101105
super.init()
102106
self.timestamp = timestamp

0 commit comments

Comments
 (0)