Exibir páginas da Web hospedadas em sua instância ServiceNow

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 3 min. de leitura
  • Você pode exibir páginas da Web hospedadas em sua instância ServiceNow em sua aplicação nativa do iOS.

    O Mobile SDK fornece manipulação contínua da autenticação necessária e gestão de sessões, enquanto a API NowWebService fornece a funcionalidade necessária para lidar com páginas que residem em sua instância ServiceNow. Essas páginas da Web têm todas as interações dinâmicas possíveis na plataforma ServiceNow.

    Quando o webview é solicitado a carregar uma página da Web hospedada em uma instância ServiceNow, ele cria uma solicitação HTTP com o cabeçalho do portador apropriado que contém o token de acesso OAuth fornecido pelo NowSDK. Quando a instância recebe essa solicitação, ela inicia uma nova sessão de usuário e retorna cookies relacionados a essa sessão. Conforme o usuário interage com as páginas da Web no webview, a instância usa os cookies para validar que a sessão ainda é válida. Neste ponto, o cabeçalho do portador não é mais relevante, somente os cookies são usados para validação de sessão. A sessão da Web expira se o usuário parar de interagir com o site por mais tempo do que o período de tempo limite. Depois que a sessão expirar, se o usuário tentar interagir com a página da Web, ele será redirecionado automaticamente para a página de login. O NowWebViewController detecta o redirecionamento e tenta iniciar uma nova sessão da Web solicitando um token de acesso atualizado do NowSDK e usando o token para criar uma solicitação HTTP (com cabeçalho do portador) para a última página carregada conhecida.

    Para usar esses recursos, você deve primeiro criar uma instância do NowWebService. Para fazer isso, você deve chamar o método makeWebService() e fornecer o URL para sua instância ServiceNow e um NowSDKjá inicializado. Além disso, você deve ter importado o NowWeb na sua aplicação. Você deve manter uma referência ao NowWebService pelo tempo que estiver usando o serviço NowWeb.

    Veja a seguir um exemplo de como criar um objeto NowWebService usando async/await:

    do {
        let service = try await NowWeb.makeWebService(instanceUrl: instanceUrl)
        self.webService = service
    } catch {
        debugPrint("Web Service creation failed with error: \(error.localizedDescription)") 
    }

    Veja a seguir um exemplo de como criar um objeto NowWebService usando um manipulador de conclusão:

    import Combine
    import NowWeb
    import UIKit
    ...
    public func makeWebService(instanceUrl: URL, 
      completion: @escaping ((Result<NowWeb.NowWebService, NowSDK.NowServiceError>) -> Void)) 

    Pré-carregar páginas para melhorar o tempo de carregamento do NowWeb

    Você pode pré-carregar páginas com recursos armazenáveis em cache em segundo plano para melhorar os tempos de carregamento iniciais do NowWeb. O exemplo a seguir mostra como usar a função webService.preloadWebCache() para pré-carregar páginas especificadas.

    private func preloadURLs(urls: [URL]) {
      guard let webService = webService else {
        debugPrint("Web service not initialized")
        return
      }
      do {
           try webService.preloadWebCache(urls: urls) {
             debugPrint("URLs did complete preloading")
           }
                
      } catch {
          debugPrint(error.localizedDescription)
      }
    }

    Criar exibições para exibir conteúdo da web

    Depois de instanciar uma instância do NowWebService, você pode usá-la para criar exibições para exibir páginas da Web hospedadas em sua instância ServiceNow.

    O exemplo a seguir mostra como criar uma exibição NowWebViewController :

    let result = webService.makeWebViewController(for: url, 
      delegate: self, theme: MyWebTheme(nowUITheme: MyUITheme()))
    switch result { 
    case .success(let viewController): 
      return viewController 
    case .failure(let error): 
      debugPrint("Web view creation failed with error: \(error.localizedDescription)") 
    }

    Neste exemplo, url é o URL da página inicial a ser carregada na exibição. Este URL deve apontar para uma página que está hospedada na instância ServiceNow especificada. As URLs relativas também funcionam e são relativas à instância ServiceNow de destino do NowWebService.

    Depois de criado, você pode enviar o NowWebViewController para uma pilha de navegação existente. A página inicial não é carregada até que você chame o método loadPage().

    Tema a interface do usuário da web

    Você pode personalizar as cores da IU da web passando um objeto de tema na chamada makeWebViewController(). Para obter uma lista de todos os elementos que você pode personalizar, consulte Protocolo NowWebColoring - iOS. Por padrão, a IU da web usa o tema NowUIColor para todos os elementos de IU do NowSDK. Consulte Protocolo NowWebThemeable - iOS para obter exemplos de snippets de código sobre como aplicar um tema à IU da web.