NowChatService クラス - iOS
NowChatService クラスは、仮想チャット機能とライブエージェントチャット機能を提供します。
このクラスを使用すると、チャットサービスの開始と停止、チャットセッションの開始、チャットユーザーインターフェイスの作成、未読メッセージの登録/登録解除を行うことができます。
| 名前 | 説明 |
|---|---|
| 構成 | サービスの初期化時に指定された構成設定。 データタイプ: NowServiceConfiguration |
| instanceVersion | 関連付けられた ServiceNow インスタンスのバージョン (Vancouver や Xanadu など)。 データタイプ:文字列 |
| ネットワークサービス | このチャットサービスに関連付けられたネットワークサービス。 データタイプ:NetworkService |
| セッションタイプ | セッションのタイプ。 可能な値:
データタイプ: SessionType |
NowChatService - init(configuration: NowServiceConfiguration, delegate: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = nil)
新しい NowChatService インスタンスを初期化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 構成 | NowServiceConfiguration | サービスを適切に初期化するために必要な構成情報。 |
| 代理人 | NowChatServiceDelegate | オプション。NowChatServiceDelegate プロトコルを実装する NowChat コールバックデリゲートオブジェクト。 デフォルト:nil |
| コアサービスプロバイダ | NowCoreServiceProviding | オプション。NowCoreServiceProviding プロトコルを実装するオブジェクト。NowChat サービスへのアクセスを提供します。 デフォルト:nil |
次のコード例は、この関数を呼び出す方法を示しています。
guard let coreService = NowSDK.core() else {
// Error with NowServiceError.sdkNotConfigured
return
}
guard
let instanceUrl = URL(string: "http://sample.service-now.com"),
let serviceConfig = NowSDK.makeServiceConfiguration(for: instanceUrl) else {
// Could not create service –
// NowServiceError.serviceConfigurationInvalid
return
}
let chatService = NowChatService(configuration: serviceConfig, delegate: delegate, coreServiceProvider: coreService)
NowChatService - makeChatUI(theme: NowChatThemeable, chatConfiguration: NowChatConfiguration? = nil) -> Result<UIViewController, NowChatServiceError>)
チャットユーザーインターフェイスをホストする UIViewController を作成します。
この関数はチャット UI を作成しますが、 startChat() 関数を呼び出してチャットセッションを開始する必要があります。チャット UI が表示されるようになったら、この呼び出しを行う必要があります。詳細については、関連するサンプルアプリケーションと Mobile SDK 開発者ガイド - iOSを参照してください。
| 名前 | タイプ | 説明 |
|---|---|---|
| theme | NowChatThemeable オブジェクト | 作成するチャット UI のテーマ情報。 |
| チャット構成 | NowChatConfiguration? | オプション。チャットセッションに適用するオプション。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | 成功:UI ビューコントローラー構成情報を含む UIViewController オブジェクト。 失敗:NowChatServiceError オブジェクト。 考えられるエラー:
|
次のコード例は、この関数を呼び出してチャット UI を作成する方法を示しています。
func makeChatScreen() -> UIViewController? {
guard let chatService = chatService else { return nil }
let closePrompt = NowChatConfiguration.ClosePrompt(header: "Close Window",
message: "Are you sure you want to close the chat window?",
acceptButtonTitle: "Yes",
declineButtonTitle: "No")
let attachmentUploadButton = NowChatConfiguration.AttachmentUploadButton(isVisible: false) // default isVisible = true
let chatConfiguration = NowChatConfiguration(closePrompt: closePrompt,
disabledFeatures: [.startNewConversation],
conversationOptions: [.forceNewConversation, .endConversationOnExit],
uiConfiguration: NowChatConfiguration.UIConfiguration(closeButton: closeButtonImage(name: "arrow.left"), attachmentUploadButton: attachmentUploadButton))
let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors()), chatConfiguration: chatConfiguration)
switch result {
case .success(let chatViewController):
return chatViewController
case .failure(let error):
debugPrint("Chat screen creation failed with error: \(error)")
return nil
}
}
NowChatService:shutdown()
アクティブなチャットセッションを含むチャットサービスをシャットダウンします。
この関数を呼び出した後は、関連付けられた NowChatService が非アクティブになり、再利用できなくなります。別のチャットセッションを確立するには、NowChat.makeChatService() 関数を呼び出して新しい NowChatService インスタンスを作成します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
private func resetChat() {
chatService?.shutdown()
chatService = nil
initializeChatService()
viewState = makeViewState()
}
func initializeChatService() {
NowChat.makeChatService(instanceUrl: instanceUrl, delegate: self) { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let service):
self.chatService = service
case .failure(let error):
debugPrint("Creating the chat service failed with error: \(error)")
}
self.viewState = self.makeViewState()
}
func makeViewState() -> ViewState {
ViewState(chatEnabled: chatService != nil,
menuItems: menuItems)
}
NowChatService - startChat(contextData: [String: Any]? = nil, _ completion: @escaping (Result<Void, NowChatServiceError>) -> Void)
チャットセッションを開始し、チャットセッションの開始後に補完ブロックを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| コンテキストデータ | [文字列: Any]? | オプション。チャットセッションに渡されるチャットコンテキスト変数を含むディクショナリ。 チャットコンテキスト変数の詳細については、「 Live agent chat context variables」を参照してください。 |
| 完了 | オブジェクト | チャットセッションが開始された後に実行する補完ブロック。 |
| タイプ | 説明 |
|---|---|
| void または String | 完了ブロックの戻り値:
考えられるエラー:
|
次のコード例は、コンテキストデータなしでこの関数を呼び出す方法を示しています。
func startChat() {
guard let chatService = chatService else {
debugPrint("Chat service is invalid")
viewState = makeViewState()
return
}
chatService.startChat { [weak self] result in
if case .failure(let error) = result {
debugPrint("Chat session initialization failed with error: \(error)")
self?.resetChat()
}
}
}
func makeViewState() -> ViewState {
ViewState(chatEnabled: chatService != nil,
menuItems: menuItems)
}
次のコード例は、コンテキスト データを使用してこの関数を呼び出す方法を示しています。
func startChat() {
guard let chatService = chatService else {
debugPrint("Chat service is invalid")
viewState = makeViewState()
return
}
let contextData = ["sys_id": "123456789", "table_name": "wm_task", "active": true] as [String: Any]
chatService.startChat(contextData: contextData) { [weak self] result in
if case .failure(let error) = result {
debugPrint("Chat session initialization failed with error: \(error)")
self?.resetChat()
}
}
}
func makeViewState() -> ViewState {
ViewState(chatEnabled: chatService != nil,
menuItems: menuItems)
}
NowChatService - subscribeToUnreadMessageCount(pollingInterval: TimeInterval, completion: @escaping (Int) -> Void)
未読メッセージ数リスナーに登録します。
| 名前 | タイプ | 説明 |
|---|---|---|
| ポーリング間隔 | 時間間隔 | 未読チャットメッセージ数について Web サービスをポーリングする頻度。 単位:秒 |
| 完了 | @escaping (int) -> void) | 未読チャットメッセージ数を報告するために呼び出す補完ハンドラー。 Int:未読チャットメッセージの数。 |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
…
if viewModel.isPolling {
viewModel.unsubscribeFromUnreadMessageCount()
viewState.pollingInterval = ""
} else {
viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
}
…
func subscribeToUnreadMessageCount(pollingInterval: TimeInterval) {
chatService.subscribeToUnreadMessageCount(pollingInterval: pollingInterval) { [weak self] count in
self?.unreadMessageCount = count
}
isPolling = true
}
NowChatService:unsubscribeFromUnreadMessageCount()
未読メッセージ数リスナーの受信を登録解除します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
…
if viewModel.isPolling {
viewModel.unsubscribeFromUnreadMessageCount()
viewState.pollingInterval = ""
} else {
viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
}
…
func unsubscribeFromUnreadMessageCount() {
chatService.unsubscribeFromUnreadMessageCount()
isPolling = false
unreadMessageCount = 0
}