NowChatService-Klasse: IOS

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 6 Minuten Lesedauer
  • 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.

    Tabelle : 1. Eigenschaften
    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:
    • Authentifiziert
    • Gast
    • Identität angenommen
    • unbekannt

    Datentyp: SessionType

    NowChatService – init(Konfiguration: NowServiceConfiguration, Delegierter: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = Null)

    Initialisiert eine neue NowChatService-Instanz.

    Tabelle : 2. Parameter
    Name Typ Beschreibung
    konfigurieren NowServiceConfiguration Konfigurationsinformationen, die zur ordnungsgemäßen Initialisierung des Service erforderlich sind.
    Delegierter Now​Chat-​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.

    Tabelle : 3. Parameter
    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.
    Tabelle : 4. Rückgaben
    Typ Beschreibung
    Objekt Erfolg: UIViewController-Objekt, das die Konfigurationsinformationen des UI-Ansichtscontrollers enthält.

    Fehler: NowChatServiceError-Objekt.

    Mögliche Fehler:
    • ChatServiceUngültiges Element
    • CoreServiceungültig
    • Guest UserUnAllowed
    • Ungültige Anmeldeinformationen
    • Keine Sitzung
    • unbekannt
    • Nicht unterstützter Server

    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.

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 6. Ergebnisse
    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.

    Tabelle : 7. Parameter
    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.
    Tabelle : 8. Rückgaben
    Typ Beschreibung
    Ungültig oder Zeichenfolge
    Rückgabewerte für den Abschlussblock:
    • Erfolg: Ungültig
    • Fehler: NowChatServiceError
    Mögliche Fehler:
    • ChatServiceUngültiges Element
    • CoreServiceungültig
    • Guest UserUnAllowed
    • Ungültige Anmeldeinformationen
    • Keine Sitzung
    • unbekannt
    • Nicht unterstützter Server

    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.

    Tabelle : 9. Parameter
    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.

    Tabelle : 10. Rückgaben
    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.

    Tabelle : 11. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 12. Ergebnisse
    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.

    Tabelle : 13. Parameter
    Name Typ Beschreibung
    Design NowChatThemeable Design, mit dem die Chat-UI aktualisiert werden soll.
    Tabelle : 14. Rückgaben
    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())
    }