ServiceNow インスタンスでホストされている Web ページを表示します
ネイティブ 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() メソッドを呼び出すまで読み込まれません。