Configuração de notificações por push em sua aplicação iOS

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 2 min. de leitura
  • Além das tarefas que você deve executar em sua instância ServiceNow para configurar uma notificação por push, você também deve incluir um código específico em sua aplicação iOS.

    Criar o NowSDK NowPushService

    Uma das primeiras coisas que precisa ser feita em sua aplicação é criar um NowPushService. O NowPush SDK fornece uma função de fábrica para criar este serviço. Adicione um código semelhante ao snippet a seguir no início do corpo do código principal.

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

    Para obter informações adicionais sobre o método NowPush.makePushService(), consulte API do NowPush - iOS.

    Registrar o token de push

    Apple fornece um token de notificação por push exclusivo que identifica o dispositivo e a aplicação para receber notificações por push. Para que uma aplicação receba notificação por push, você deve registrar este token usando o NowPushService. Adicione uma função semelhante ao snippet de código a seguir em sua aplicação iOS. Esta aplicação deve ser registrada com sua instância ServiceNow.

    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
        }
      }
    }

    Para obter informações adicionais sobre o método registerPushToken(), consulte NowPushService - registerPushToken(_token: dados, pushAppName: cadeia de caracteres, ambiente: NowPushEnvironment, conclusão: @escaping (resultado<Data, NowPushError> ) -> Vazio).

    Cancelar registro do token de envio

    Você precisa cancelar o registro de um token de envio sempre que o usuário sair da aplicação, como quando o usuário faz logout. Use um código semelhante ao snippet de código a seguir para cancelar o registro de um token de envio. Certifique-se de mudar pushAppName para o nome da sua aplicação iOS.

    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
        }
      }
    }

    Para obter informações adicionais sobre o método unregisterPushToken(), consulte NowPushService - unregisterPushToken(_token: dados, pushAppName: cadeia de caracteres, ambiente: NowPushEnvironment, conclusão: @escaping (resultado<Data, NowPushError> ) -> Vazio).

    Analisar carga de push

    Você precisará analisar as cargas de notificação por push em um objeto NowPushPayload para coletar informações e usar os dados em outras partes da aplicação. Atualmente, isso só está disponível para notificações por push do Virtual Agent. Use um código semelhante ao seguinte

    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(())
    }