インスタンスでホストされている ServiceNow Web ページを表示する
インスタンス内で ServiceNow ホストされている Web ページをネイティブ iOS アプリケーションで表示できます。
は Mobile SDK 必要な認証とセッション管理のシームレスな処理を提供し、 NowWebService API はインスタンスに存在する ServiceNow ページの処理に必要な機能を提供します。これらのWebページには、プラットフォームで可能な ServiceNow すべての動的な相互作用があります。
インスタンスで ServiceNow ホストされている Web ページをロードするように 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 も機能し、 ServiceNow NowWebService がターゲットとするインスタンスに対する相対 URL です。
作成した NowWebViewController を既存のナビゲーションスタックにプッシュできます。最初のページは、 loadPage() メソッドを呼び出すまでロードされません。