Exibir páginas da Web hospedadas em sua instância ServiceNow
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 a exibição na web é solicitada para carregar uma página da Web hospedada em uma instância ServiceNow, ela 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().