NowChatService-Klasse: IOS
Die NowChatService Klasse stellt virtuelles und bereit Servicemitarbeiter Chat-Fähigkeiten.
Mit dieser Klasse können Sie Chat-Services starten und stoppen, Chat-Sitzungen starten, eine Chat-Anwenderoberfläche erstellen und ungelesene Nachrichten abonnieren/abbestellen.
| Name | Beschreibung |
|---|---|
| konfigurieren | Konfigurationseinstellungen, die bei der Initialisierung des Service bereitgestellt wurden. Datentyp: NowServiceConfiguration |
| Instanzversion | Version des zugeordneten ServiceNow Instanz, z. B. vancouver oder xanadu. Datentyp: Zeichenfolge |
| Netzwerkservice | Netzwerkservice, der diesem Chatservice zugeordnet ist. Datentyp: Netzwerkservice |
| Sitzungstyp | Typ der Sitzung. Mögliche Werte:
Datentyp: SessionType |
NowChatService – init(Konfiguration: NowServiceConfiguration, Delegierter: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = Null)
Initialisiert eine neue NowChatService-Instanz.
| Name | Typ | Beschreibung |
|---|---|---|
| konfigurieren | NowServiceConfiguration | Konfigurationsinformationen, die zur ordnungsgemäßen Initialisierung des Service erforderlich sind. |
| Delegierter | NowChat-Service-Delegierter | Optional. NowChat-Rückrufdelegierungsobjekt, das das NowChatServiceDelegate-Protokoll implementiert. Standard: Nil |
| CoreServiceProvider | Now CoreServiceProviding | Optional. Objekt, das das NowCoreServiceProviding-Protokoll implementiert. Bietet Zugriff auf NowChat-Services. Standard: Nil |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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(Design: NowChatThemeable, chatConfiguration: NowChatConfiguration? = null) -> Ergebnis<UIViewController, NowChatServiceError>)
Erstellt einen UIViewController Die die Chat-Anwenderoberfläche hostet.
Obwohl diese Funktion die Chat-UI erstellt, müssen Sie die Chat-Sitzung trotzdem initiieren, indem Sie aufrufen StartChat() Funktion. Sie sollten diesen Anruf tätigen, da die Chat-UI sichtbar wird. Weitere Informationen finden Sie in der zugehörigen Beispielanwendung und Mobile SDK Entwicklerleitfaden – iOS.
| Name | Typ | Beschreibung |
|---|---|---|
| Design | NowChatThemeable-Protokoll – iOS | Designinformationen für die zu erstellende Chat-UI. |
| ChatKonfiguration | NowChatKonfiguration? | Optional. Optionen, die auf die Chatsitzung angewendet werden sollen. |
| Typ | Beschreibung |
|---|---|
| Objekt | Erfolg: UIViewController-Objekt, das die Konfigurationsinformationen des UI-Ansichtscontrollers enthält. Fehler: NowChatServiceError-Objekt. Mögliche Fehler:
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird, um die Chat-UI zu erstellen.
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()
Fährt den Chatservice einschließlich aller aktiven Chatsitzungen herunter.
Nach dem Aufrufen dieser Funktion ist der zugeordnet NowChatService Ist inaktiv und kann nicht wiederverwendet werden. Um eine weitere Chatsitzung einzurichten, erstellen Sie eine neue NowChatService Instanz durch Aufrufen von NowChat.makeChatService() Funktion.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: [Zeichenfolge: Beliebig]? = Nil, _ Abschluss: @Escaping (Result<Void, NowChatServiceError>) -> ungültig)
Startet eine Chatsitzung und führt einen Abschlussblock aus, nachdem die Chatsitzung gestartet wurde.
| Name | Typ | Beschreibung |
|---|---|---|
| ContextData | [Zeichenfolge: Beliebig]? | Optional. Wörterbuch mit Chatkontextvariablen, die an die Chatsitzung übergeben werden. Weitere Informationen zu Chat-Kontextvariablen finden Sie unter Live agent chat context variables. |
| Abschluss | Objekt | Abschlussblock, der nach dem Start der Chatsitzung ausgeführt werden soll. |
| Typ | Beschreibung |
|---|---|
| Ungültig oder Zeichenfolge | Rückgabewerte für den Abschlussblock:
Mögliche Fehler:
|
Das folgende Codebeispiel zeigt, wie diese Funktion ohne Kontextdaten aufgerufen wird.
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)
}
Das folgende Codebeispiel zeigt, wie diese Funktion mit Kontextdaten aufgerufen wird.
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, Abschluss: @Escaping (Int) -> ungültig)
Abonniert den Listener für die Anzahl ungelesener Nachrichten.
| Name | Typ | Beschreibung |
|---|---|---|
| PollingIntervall | Zeitintervall | Häufigkeit, mit der der der Webservice nach der Anzahl der ungelesenen Chatnachrichten abgefragt werden soll. Einheit: Sekunden |
| Abschluss | @Escaping (Int) -> ungültig) | Abschlusshandler, der aufgerufen werden soll, um die Anzahl der ungelesenen Chatnachrichten zu melden. Int: Anzahl der ungelesenen Chatnachrichten. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
…
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()
Hebt den Empfang des Listeners für die Anzahl ungelesener Nachrichten ab.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
…
if viewModel.isPolling {
viewModel.unsubscribeFromUnreadMessageCount()
viewState.pollingInterval = ""
} else {
viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
}
…
func unsubscribeFromUnreadMessageCount() {
chatService.unsubscribeFromUnreadMessageCount()
isPolling = false
unreadMessageCount = 0
}
NowChatService – updateTheme(Design: NowChatThemeable)
Aktualisiert das NowChat-UI-Design mit dem angegebenen UI-Design. Verwenden Sie diese Funktion, um das Chat-UI-Design zu aktualisieren, nachdem es ursprünglich mit festgelegt wurde MakeChatUI() Funktion, z. B. beim Ändern des Designs von hell nach dunkel.
| Name | Typ | Beschreibung |
|---|---|---|
| Design | NowChatThemeable | Design, mit dem die Chat-UI aktualisiert werden soll. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie Sie ein helles UI-Design mithilfe von auf das dunkle UI-Design aktualisieren UpdateTheme() Funktion.
struct LightNowChatColoring: NowChatColoring {
let nowUIColor: NowUIColoring = LightNowUIColor()
let brand = UIColor.now_color(withHexString: "#032D42")
let primary = UIColor.now_color(withHexString: "#00566E")
let secondary = UIColor.now_color(withHexString: "#002832")
let destructive = UIColor.now_color(withHexString: "#E52239")
let textPrimary = UIColor.now_color(withHexString: "#10171A")
let textSecondary = UIColor.now_color(withHexString: "#232E33")
let textTertiary = UIColor.now_color(withHexString: "#37444A")
let textActionable = UIColor.now_color(withHexString: "#ffffff")
let screenHeaderText = UIColor.now_color(withHexString: "#ffffff")
let backgroundPrimary = UIColor.now_color(withHexString: "#ffffff")
let backgroundSecondary = UIColor.now_color(withHexString: "#F5F6F7")
let backgroundTertiary = UIColor.now_color(withHexString: "#E2E5E7")
let backgroundPrimaryActionable = UIColor.now_color(withHexString: "#10171A")
let backgroundSecondaryActionable = UIColor.now_color(withHexString: "#232E33")
let brandBackground = UIColor.now_color(withHexString: "#BDDEE7")
let borderTertiary = UIColor.now_color(withHexString: "#d3d6dc")
let separatorPrimary = UIColor.now_color(withHexString: "#859095")
let separatorTertiary = UIColor.now_color(withHexString: "#CFD5D7")
let alertCritical0 = UIColor.now_color(withHexString: "#F9C8CE")
let alertCritical3 = UIColor.now_color(withHexString: "#E52239")
let shadow = UIColor.now_color(withHexString: "#10171A")
let linkPrimary = UIColor.now_color(withHexString: "#1955BE")
let linkSecondary = UIColor.now_color(withHexString: "#113A82")
let notification = UIColor.now_color(withHexString: "#E52239")
let highlightBlue = UIColor.now_color(withHexString: "#C4DBFE")
let highlightGray = UIColor.now_color(withHexString: "#DCDDDE")
}
struct DarkNowChatColoring: NowChatColoring {
let nowUIColor: NowUIColoring = DarkNowUIColor()
let brand = UIColor.now_color(withHexString: "#032D42")
let primary = UIColor.now_color(withHexString: "#6CBBD0")
let secondary = UIColor.now_color(withHexString: "#99C6D2")
let destructive = UIColor.now_color(withHexString: "#E46775")
let textPrimary = UIColor.now_color(withHexString: "#FFFFFF")
let textSecondary = UIColor.now_color(withHexString: "#E2E5E7")
let textTertiary = UIColor.now_color(withHexString: "#BCC3C7")
let textActionable = UIColor.now_color(withHexString: "#050809")
let backgroundPrimary = UIColor.now_color(withHexString: "#050809")
let backgroundSecondary = UIColor.now_color(withHexString: "#161F23")
let backgroundTertiary = UIColor.now_color(withHexString: "#1D272B")
let backgroundPrimaryActionable = UIColor.now_color(withHexString: "#FFFFFF")
let backgroundSecondaryActionable = UIColor.now_color(withHexString: "#BCC3C7")
let brandBackground = UIColor.now_color(withHexString: "#002934")
let separatorPrimary = UIColor.now_color(withHexString: "#97A2A6")
let separatorTertiary = UIColor.now_color(withHexString: "#4F5C62")
let borderTertiary = UIColor.now_color(withHexString: "#454d5b")
let screenHeaderText = UIColor.now_color(withHexString: "#FFFFFF")
let alertCritical0 = UIColor.now_color(withHexString: "#7B1D28")
let alertCritical3 = UIColor.now_color(withHexString: "#E46775")
let shadow = UIColor.now_color(withHexString: "#10171A")
let notification = UIColor.now_color(withHexString: "#E46775")
let linkPrimary = UIColor.now_color(withHexString: "#339EFC")
let linkSecondary = UIColor.now_color(withHexString: "#70BBFD")
let highlightBlue = UIColor.now_color(withHexString: "#004652")
let highlightGray = UIColor.now_color(withHexString: "#363D3D")
}
struct LightNowChatTheme: NowChatThemeable {
let color: NowChatColoring = LightNowChatColoring()
}
struct DarkNowChatTheme: NowChatThemeable {
let color: NowChatColoring = DarkNowChatColoring()
}
func chatService(_ chatService: NowChat.NowChatService, systemThemeDidChange traitCollection: UITraitCollection) {
// The systemThemeDidChange delegate method can be used to call updateTheme() to apply theme changes when the system theme changes.
debugPrint("System Theme did change")
chatService.updateTheme(theme: traitCollection.userInterfaceStyle == .dark ? DarkNowChatTheme() : LightNowChatTheme())
}