# Push Notifications
The SDK uses Firebase Cloud Messaging (FCM) to deliver push notifications. Firebase is bundled - you only need GoogleService-Info.plist in your project, as described in the Installation guide.
# Enable push notifications
Call registerForRemoteNotifications to prompt the user for permission and register the device with FCM. A good place for this is right after SDK initialization, or triggered by a relevant user action.
UserSDK.default?.registerForRemoteNotifications(options: [.alert, .badge, .sound])
You can pass any combination of UNAuthorizationOptions. The system shows the permission dialog only if the user hasn't been asked before.
# React to notification taps
Implement RemoteNotificationDelegate to be notified when a user taps a push notification. This fires for Positive User banner notifications and for any other FCM notifications your app receives.
extension AppDelegate: RemoteNotificationDelegate {
func didReceiveRemoteNotification(with id: String, data: [AnyHashable: Any]) {
// id - Positive User notification ID (empty string for non-Positive User notifications)
// data - full notification payload
}
}
Register the delegate when calling registerForRemoteNotifications, or assign it directly at any time:
// Pass it during registration
UserSDK.default?.registerForRemoteNotifications(
options: [.alert, .badge, .sound],
notificationDelegate: self
)
// Or assign it directly
UserSDK.default?.notificationDelegate = self
The SDK only intercepts notifications tagged by Positive User. Everything else is forwarded to your delegate untouched.
# Display images in push notifications
To show an image attached to a push notification, you need a Notification Service Extension in your app. The extension runs in the background when a notification arrives and gives you a chance to modify its content before it appears.
# 1. Add a Notification Service Extension
In Xcode, go to File → New → Target and choose Notification Service Extension. Name it - for example, YourApp-NotificationService.
# 2. Add the SDK to the extension target
In your Package.swift or via File → Add Package Dependencies, make sure UserComSDK is added to the extension target. The extension only handles image downloads, so Firebase and Gifu are not required there - but verify this against your specific setup.
CocoaPods (legacy)
Add the extension target to your Podfile:
target 'YourApp-NotificationService' do
pod 'UserSDK', :git => 'https://github.com/UserEngage/iOS-SDK'
end
# 3. Implement the extension
Replace the generated NotificationService.swift with the following:
import UserNotifications
import UserSDK
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
self.contentHandler = contentHandler
bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent
NotificationExtensionHelper.shared.fillNotificationContent(
bestAttemptContent,
contentHandler: contentHandler
)
}
override func serviceExtensionTimeWillExpire() {
if let contentHandler, let bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
NotificationExtensionHelper downloads the image from the notification payload and attaches it. If the image can't be fetched in time, the notification appears without it.