Push
Before you start
You must first consent to receive channel notifications for the action you wish to use through your user profile settings.
To use push messages, please register the .p8 APNs authentication key issued by Apple in the DFINERY console. You can register it in the console's Additional Settings / Channel Additional Settings / Push / iOS Settings Management.
SDK Integration
Add the push token registration code to the AppDelegate class.
import UIKit
import UserNotifications
import DfinerySDK
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
...
application.registerForRemoteNotifications()
...
...
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Dfinery.shared().set(pushToken: deviceToken)
}
}
You must obtain user permission to use push messages.
Example Code
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, sound]) { granted, err in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
Push handling
For push handling, please adopt the UNUserNotificationCenterDelegate protocol in your AppDelegate class and integrate the SDK code.
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
...
UNUserNotificationCenter.current().delegate = self
...
...
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if Dfinery.shared().canHandleNotification(response: response) {
completionHandler()
return
}
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
if Dfinery.shared().canHandleForeground(notification, completionHandler: completionHandler) {
return
}
}
}
Service Extension
To use images and buttons in DFINERY Push, you must additionally create a Notification Service Extension and integrate DfineryServiceExtension.
import UserNotifications
import DfinerySDKServiceExtension
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)
if let bestAttemptContent = bestAttemptContent {
if DfineryServiceExtension.canHandle(content: bestAttemptContent, contentHandler: contentHandler) {
return
}
contentHandler(bestAttemptContent)
}
}
...
}
Last updated