인스턴스에서 호스팅되는 ServiceNow 웹 페이지 표시

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기4분
  • 인스턴스 내에서 ServiceNow 호스팅되는 웹 페이지를 네이티브 iOS 애플리케이션으로 표시할 수 있습니다.

    Mobile SDK 필요한 인증 및 세션 관리를 원활하게 처리할 수 있는 반면, 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() 메서드를 호출할 때까지 초기 페이지가 로드되지 않습니다.

    웹 사용자 인터페이스 테마

    makeWebViewController() 호출에서 theme 객체를 전달하여 웹 UI의 색상을 맞춤설정할 수 있습니다. 사용자 지정할 수 있는 모든 요소의 목록은 을 참조하십시오 NowWebColoring 프로토콜 - iOS. 기본적으로 웹 UI는 모든 NowSDK UI 요소에 대해 NowUIColor 테마를 사용합니다. 웹 UI에 테마를 적용하는 방법에 대한 샘플 코드 스니펫은 를 NowWebThemeable 프로토콜 - iOS 참조하세요.