인스턴스에 호스팅된 ServiceNow 웹 페이지 표시
인스턴스 내에서 ServiceNow 호스팅된 웹 페이지를 네이티브 iOS 애플리케이션에서 표시할 수 있습니다.
이 Mobile SDK API는 필요한 인증 및 세션 관리를 원활하게 처리하는 한편, NowWebService API는 인스턴스에 있는 ServiceNow 페이지를 처리하는 데 필요한 기능을 제공합니다. 이러한 웹 페이지에는 플랫폼에서 가능한 모든 동적 상호 작용이 ServiceNow 있습니다.
웹 뷰가 인스턴스에 호스팅 ServiceNow 된 웹 페이지를 로드하도록 요청되면 NowSDK에서 제공하는 OAuth 액세스 토큰이 포함된 적절한 전달자 헤더가 있는 HTTP 요청을 생성합니다. 인스턴스가 이 요청을 수신하면 새 사용자 세션을 시작하고 해당 세션과 관련된 쿠키를 반환합니다. 사용자가 웹 뷰에서 웹 페이지와 상호 작용할 때 인스턴스는 쿠키를 사용하여 세션이 여전히 유효한지 확인합니다. 이 시점에서 전달자 헤더는 더 이상 관련이 없으며 쿠키만 세션 유효성 검사에 사용됩니다. 사용자가 제한 시간보다 오래 웹 사이트와의 상호 작용을 중지하면 웹 세션이 만료됩니다. 세션이 만료된 후 사용자가 웹 페이지와 상호작용을 시도하면 자동으로 로그인 페이지로 리디렉션됩니다. NowWebViewController는 리디렉션을 감지하고 NowSDK에서 새로 고친 액세스 토큰을 요청하고 토큰을 사용하여 마지막으로 알려진 로드된 페이지에 대한 HTTP 요청(전달자 헤더 포함)을 만들어 새 웹 세션을 시작하려고 시도합니다.
이러한 기능을 사용하려면 먼저 NowWebService의 인스턴스를 만들어야 합니다. 이렇게 하려면 makeWebService() 메서드를 호출하고 인스턴스에 대한 ServiceNow URL과 이미 초기화된 NowSDK를 제공해야 합니다. 또한 애플리케이션 내에서 NowWeb 을 임포트해야 합니다. NowWeb 서비스를 사용하는 동안 NowWebService에 대한 참조를 보유해야 합니다.
다음은 async/await를 사용하여 NowWebService 개체를 만드는 방법의 예를 보여 줍니다.
do {
let service = try await NowWeb.makeWebService(instanceUrl: instanceUrl)
self.webService = service
} catch {
debugPrint("Web Service creation failed with error: \(error.localizedDescription)")
}다음은 완성 처리기를 사용하여 NowWebService 개체를 만드는 방법의 예를 보여 줍니다.
import Combine
import NowWeb
import UIKit
...
public func makeWebService(instanceUrl: URL,
completion: @escaping ((Result<NowWeb.NowWebService, NowSDK.NowServiceError>) -> Void))
NowWeb 로드 시간을 개선하기 위해 페이지를 미리 로드
백그라운드에서 캐시 가능한 자원이 있는 페이지를 미리 로드하여 초기 NowWeb 로드 시간을 개선할 수 있습니다. 다음 예제에서는 webService.preloadWebCache() 함수를 사용하여 지정된 페이지를 미리 로드하는 방법을 보여 줍니다.
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)
}
}
웹 콘텐츠를 표시하기 위한 뷰 작성
NowWebService 인스턴스를 인스턴스화한 후에는 이를 사용하여 인스턴스에 호스팅된 웹 페이지를 표시하는 뷰를 만들 수 있습니다 ServiceNow .
다음 예제에서는 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)")
}이 예시 url 에서는 뷰 내에 로드할 초기 페이지의 URL입니다. 이 URL은 지정된 ServiceNow 인스턴스에서 호스팅되는 페이지를 가리켜야 합니다. 상대 URL도 작동하며 NowWebService가 대상으로 하는 인스턴스를 기준으로 ServiceNow 합니다.
만든 후에는 NowWebViewController를 기존 탐색 스택에 푸시할 수 있습니다. 초기 페이지는 loadPage() 메서드를 호출할 때까지 로드되지 않습니다.