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)

    }

}

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