ServiceNow インスタンスでホストされている Web ページを表示します

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:5分
  • ネイティブ iOS アプリケーションの ServiceNow インスタンス内でホストされている Web ページを表示できます。

    Mobile SDK は必要な認証とセッション管理をシームレスに処理し、NowWebService API はServiceNowインスタンスに存在するページの処理に必要な機能を提供します。これらの Web ページには、 ServiceNow プラットフォームで可能なすべての動的インタラクションがあります。

    Web ビューが ServiceNow インスタンスでホストされている Web ページをロードするように要求されると、NowSDK によって提供される OAuth アクセストークンを含む適切なベアラーヘッダーを持つ HTTP 要求が作成されます。インスタンスは、この要求を受信すると、新しいユーザーセッションを開始し、そのセッションに関連する Cookie を返します。ユーザーが Web ビューで Web ページを操作すると、インスタンスは Cookie を使用してセッションがまだ有効であることを検証します。この時点で、ベアラーヘッダーは関連性がなくなり、Cookie のみがセッションの検証に使用されます。ユーザーがタイムアウト期間よりも長く Web サイトの操作を停止すると、Web セッションは期限切れになります。セッションの有効期限が切れた後、ユーザーが Web ページを操作しようとすると、ログインページに自動的にリダイレクトされます。NowWebViewController はリダイレクトを検出し、NowSDK に更新されたアクセストークンを要求し、そのトークンを使用して最後に読み込まれた既知のページの HTTP 要求 (ベアラーヘッダー付き) を作成することで、新しい Web セッションの開始を試みます。

    これらの機能を使用するには、まず 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)
      }
    }

    Web コンテンツを表示するビューの作成

    NowWebService のインスタンスを作成したら、それを使用して、 ServiceNow インスタンスでホストされている Web ページを表示するビューを作成できます。

    次の例は、 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() メソッドを呼び出すまで読み込まれません。

    テーマ:Web ユーザーインターフェイス

    makeWebViewController() 呼び出しでテーマオブジェクトを渡すことで、Web UI の色をカスタマイズできます。カスタマイズ可能なすべての要素のリストについては、「 NowWebColoring プロトコル: iOS」を参照してください。デフォルトでは、Web UI はすべての NowSDK UI 要素に NowUIColor テーマを使用します。Web UI にテーマを適用する方法に関するサンプル コード スニペットについては、 NowWebThemeable プロトコル: iOS を参照してください。