Exiba páginas da Web hospedadas em sua instância ServiceNow
Você pode exibir páginas da Web hospedadas em sua instância ServiceNow em seu aplicativo iOS nativo.
O Mobile SDK fornece manipulação perfeita da autenticação necessária e do gerenciamento 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 os 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 da 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 em sua aplicação. Você deve manter uma referência ao NowWebService enquanto estiver usando o serviço NowWeb.
Veja a seguir um exemplo de como criar um objeto NowWebService usando assíncrono/aguarde:
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é-carregue 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 criar uma instância do NowWebService, você pode usá-lo 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. Os URLs relativos também funcionam e são relativos à 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().