UnbluNotificationApi

public class UnbluNotificationApi : NSObject, UnbluNotificationApiProtocol
extension UnbluNotificationApi : AVSpeechSynthesizerDelegate

Interface to use notifications with unblu. As Firebase Cloud Messaging (FCM) SDK is build as a static library, we can not include it here. Most functions of this api should be called for specific notification callbacks typically fired in the AppDelegate.

Unblu will display/handle notifications as shown in the following table. Api helper to check mainly if notifications are from unblu or not

Unblu will display/handle notifications as shown in the following table.

App state New Message Incoming Call
background show notification show notification
foreground unblu UI closed show notification Trigger UnbluUiEventApi.UiVisibilityRequest
foreground unblu UI open Does nothing Does nothing

Whenever a notification is clicked, the event UnbluUiEventApi.UiVisibilityRequest is triggered.

  • The instance allows us to get the saved x-unblu-device to decline a call. There is no other purpose to have this reference here The instance can be assigned here, but cannot be read from here

    Declaration

    Swift

    public var preferencesStorage: UnbluPreferencesStorage? { get set }
  • The instance of the UnbluNotificationApi

    Declaration

    Swift

    public static let instance: UnbluNotificationApi
  • This allows to disable registration for PushKit notifications

    Declaration

    Swift

    public static var pushKitEnabled: Bool
  • The current device push notification token. This should be set every time the application receives a new token from the system in order to notify the Unblu server.

    Declaration

    Swift

    public var deviceToken: String? { get set }
  • Enables/disables the automatic handling of notfications.

    When enabled, it should be called at the very beginning when the application gets launched inside the UIApplicationDelegate as otherwise notifications may get missed and notifications which got clicked by the user may not be handled. Additionally if no UNUserNotificationCenterDelegate is set it will set its own delegate to it.

    When disabled, the API of this class can and should still be used to handle notifications from Unblu which got into the application by a custom implementation and/or for local notifications

    Declaration

    Swift

    public var automaticHandlingEnabled: Bool { get set }
  • Declaration

    Swift

    public let keychainPreferencesStorage: UnbluKeychainPreferencesStorage
  • when there is service notification extension we should not send notification again because it was done by ios

    Declaration

    Swift

    public var rescheduleDecryptedNotifications: Bool
  • Should be called as soon as the registration for remote notifications via FCM failed

    Declaration

    Swift

    public func failedToRegisterForRemoteNotifications(error: Error)

    Parameters

    error

    Error cause for failing to register for remote notifications

  • Should be called on start of the application if with the userInfo stored inside “launchOptions?[.remoteNotification] as? [AnyHashable: Any]”. Can be nil if no notification was clicked to open the application.

    Throws

    UnbluNotificationProcessingError if the notification is unable to be processed.

    Declaration

    Swift

    public func handleLaunchNotification(userInfo: [AnyHashable : Any]?, withCompletionHandler completionHandler: (() -> Void)? = nil) throws

    Parameters

    userInfo

    The data dictionary of the notification

    completionHandler

    An optional completion handler that is called if the notifcation can be processed by Unblu.

  • Should be called on each notification the application receives and which does not require to call a completionHandler. It will throw an error if the notification is not an unblu notification and must not be processed by the host application.

    Throws

    UnbluNotificationProcessingError if the notification is unable to be processed by Unblu.

    Declaration

    Swift

    public func handleRemoteNotification(userInfo: [AnyHashable : Any]) throws

    Parameters

    userInfo

    The data dictionary of the notification

  • Should be called on each notification the application receives and which requires to call a completionHandler. It will either call the completionHandler directly if it is an Unblu notification or it will throw an error if the notification is not an Unblu notification and must not be processed by the host application.

    Throws

    UnbluNotificationProcessingError if the notification is unable to be processed by Unblu.

    Declaration

    Swift

    public func handleRemoteNotification(userInfo: [AnyHashable : Any], withCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) throws

    Parameters

    userInfo

    The data dictionary of the notification

    completionHandler

    Called when the notification is handled directly by Unblu

  • This function should only be used when implementing your own UNUserNotificationCenterDelegate.

    A typical implementation of this in your own UNUserNotificationCenterDelegate would be:

     func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    
          do {
              try UnbluNotificationApi.instance.willPresent(notification: notification, completionHandler: completionHandler)
          } catch {
              // your own implementation here
          }
     }
    

    Throws

    UnbluNotificationProcessingError if the notification is unable to be processed by Unblu.

    Declaration

    Swift

    public func willPresent(notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) throws

    Parameters

    notification

    The UNNotification object received from UNUserNotificationCenterDelegate.

    completionHandler

    The completion handler called with presentation options for the given notification.

  • This function should only be used when implementing your own UNUserNotificationCenterDelegate.

    A typical implementation of this in your own UNUserNotificationCenterDelegate would be:

     func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    
          do {
              try UnbluNotificationApi.instance.didReceive(notificationResponse: response, withCompletionHandler: completionHandler)
          } catch {
              // your own implementation here
          }
     }
    

    Throws

    UnbluNotificationProcessingError if the notification is unable to be processed by Unblu.

    Declaration

    Swift

    public func didReceive(notificationResponse: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) throws

    Parameters

    notificationResponse

    The UNNotificationResponse object received from UNUserNotificationCenterDelegate.

    completionHandler

    The completion handler to be called once processing is complete.

Internal

  • Receiving a PushKit token

    Declaration

    Swift

    public func pushRegistry(token: String)
  • Declaration

    Swift

    public func pushRegistryInvalidate()
  • Receiving an Incoming call

    Declaration

    Swift

    public func pushRegistry(payload: [AnyHashable : Any], completion: @escaping () -> Void)
  • Declaration

    Swift

    public func provider(answerCallUUID: UUID)
  • if app is active we close the call contoll UI

    Declaration

    Swift

    public func provider(endCallUUID: UUID)
  • Declaration

    Swift

    public func providerDidReset()
  • When he has finished speaking, start speaking again unless he has been explicitly stopped.

    Declaration

    Swift

    public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance)
  • Declaration

    Swift

    public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance)
  • check if there is a “notificationType” key in the notifications dictionary, which may indicate that it comes from the Unblu collab server

    Declaration

    Swift

    static func isUnbluNotification(userInfo: [AnyHashable : Any]) -> Bool