Setting up push notifications in your iOS application

  • Release version: Yokohama
  • Updated January 30, 2025
  • 2 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Setting up push notifications in your iOS application

    This guide explains how to integrate push notifications in your iOS application using ServiceNow's NowPush SDK. It covers essential steps including creating the push service, registering and unregistering device tokens, and parsing push notification payloads relevant to Virtual Agent notifications.

    Show full answer Show less

    Key Features

    • Create NowPushService: Use the NowPush SDK factory method NowPush.makePushService(instanceUrl:) early in your app to instantiate the push notification service linked to your ServiceNow instance.
    • Register Push Token: Register the unique device push token with your ServiceNow instance using registerPushToken. This enables your app to receive push notifications. You must specify your iOS app name and environment.
    • Unregister Push Token: Unregister the push token when the user logs out or exits the app with unregisterPushToken. This ensures notifications stop for that device and user session.
    • Parse Push Payloads: Parse incoming push notification payloads into NowPushPayload objects for processing. Currently, this is mainly used for Virtual Agent notifications to enable appropriate in-app responses.

    Practical Implementation

    • Insert the push service setup code in your main application logic to establish connectivity with your ServiceNow instance.
    • Implement device token registration and unregistration methods, making sure to update the pushAppName to match your app’s registered name.
    • Handle push notifications by parsing payloads within the iOS UNUserNotificationCenter delegate methods, enabling interaction with Virtual Agent notifications.
    • Use the provided completion handlers and result cases to track registration and unregistration status, storing these states locally (e.g., in UserDefaults) for app logic and user feedback.

    Benefits for ServiceNow Customers

    By following this setup, ServiceNow customers can effectively enable real-time push notifications in their iOS applications. This integration improves user engagement by delivering timely and relevant alerts directly from ServiceNow workflows, especially for Virtual Agent interactions. Managing push tokens correctly ensures security and relevance of notifications, leading to a better user experience and system performance.

    In addition to the tasks that you must perform on your ServiceNow instance to configure a push notification, you must also include specific code in your iOS application.

    Create the NowSDK NowPushService

    One of the first things that needs to be done in your application is to create a NowPushService. The NowPush SDK provides a factory function to create this service. Add code similar to the following snippet early within your main code body.

    func setup(with instanceURL: URL) -> AnyPublisher<NowService, ConfigurationError> {
      NowPush.makePushService(instanceUrl: instanceURL)
        .mapError { .sdkError($0) }
        .map { $0 as NowService }
        .eraseToAnyPublisher()
    }

    For additional information on the NowPush.makePushService() method, refer to NowPush API - iOS.

    Register the push token

    Apple provides a unique push notification token that identifies the device and application to receive push notifications. In order for an application to receive push notification, you must register this token using the NowPushService. Add a function similar to the following code snippet in your iOS application. This application must be registered with your ServiceNow instance.

    func registerForPushNotifications(deviceToken: Data) {
      pushService.registerPushToken(deviceToken,
          pushAppName: "TestPushApp", // Modify this to be your iOS application name
          environment: environment) { [weak self] result in
        guard let self = self else { return }
        switch result {
        case .success:
          UserDefaults.standard.set(true, forKey: "pushNotificationsRegistered")
          self.pushRegistrationState = .registrationSuccess
        case .failure:
          UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
          self.pushRegistrationState = .registrationFailed
        }
      }
    }

    For additional information on the registerPushToken() method, refer to NowPushService - registerPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void).

    Unregister the push token

    You need to unregister a push token whenever the user exits your application, such as when the user logs out. Use code similar to the following code snippet to unregister a push token. Ensure that you change pushAppName to the name of your iOS application.

    func unregisterFromPushNotifications(deviceToken: Data) {
      pushService.unregisterPushToken(deviceToken, pushAppName: "TestPushApp", environment: environment) { [weak self] result in
        guard let self = self else { return }
        switch result {
        case .success:
          UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
          self.pushRegistrationState = .unregisterSuccess
        case .failure:
          self.pushRegistrationState = .unregisterFailed
        }
      }
    }

    For additional information on the unregisterPushToken() method, refer to NowPushService - unregisterPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void).

    Parse push payload

    You will need to parse push notification payloads into a NowPushPayload object to collect information and to use the data in other parts of the application. Currently, this is only available for Virtual Agent push notifications. Use code similar to the following

    func userNotificationCenter(_ center: UNUserNotificationCenter,
        didReceive response: UNNotificationResponse,
        withCompletionHandler completionHandler: @escaping () -> Void) {
      guard let pushService = pushService else {
        completionHandler()
        return
      }
      let userInfo = response.notification.request.content.userInfo
      _ = pushService.payloadFromUserInfo(userInfo)
        .flatMap(handleNowPushPayload)
    }
    
    func handleNowPushPayload(_ payload: NowPushPayload) -> Result<Void, NowPushError> {
      guard payload is NowPushVirtualAgent else {
        return .failure(NowPushError.unsupportedData)
      }
      launchVirtualAgent()
      return .success(())
    }