NowChatService 클래스 - iOS

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기9분
  • NowChatService 클래스는 가상 및 Live Agent 채팅 기능을 제공합니다.

    이 클래스를 사용하여 채팅 서비스를 시작 및 중지하고, 채팅 세션을 시작하고, 채팅 사용자 인터페이스를 만들고, 읽지 않은 메시지를 구독/구독 취소할 수 있습니다.

    표 1. 속성
    이름 설명
    구성 서비스를 초기화할 때 제공된 구성 설정입니다.

    데이터 유형: NowServiceConfiguration

    인스턴스 버전 연결된 ServiceNow 인스턴스의 버전(예시: Utah 또는 Quebec)입니다.

    데이터 유형: 문자열

    Networkservice 이 채팅 서비스와 연결된 네트워크 서비스입니다.

    데이터 유형: NetworkService

    세션 유형 세션의 유형입니다.
    가능한 값:
    • 인증
    • 게스트
    • 가장
    • 알 수 없음

    데이터 유형: SessionType

    NowChatService - init(configuration: NowServiceConfiguration, delegate: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = nil)

    새 NowChatService 인스턴스를 초기화합니다.

    표 2. 매개변수
    이름 유형 설명
    구성 NowService구성 서비스를 올바르게 초기화하는 데 필요한 구성 정보입니다.
    위임 NowChatServiceDelegate 옵션입니다. NowChatServiceDelegate 프로토콜을 구현하는 NowChat 콜백 대리자 객체입니다.

    기본값: nil

    코어서비스제공자 NowCoreService제공 옵션입니다. 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(테마: NowChatThemeable)

    채팅 사용자 인터페이스를 호스팅하는 UIViewController 를 만듭니다.

    이 함수가 채팅 UI를 생성하더라도 startChat() 함수를 호출하여 채팅 세션을 시작해야 합니다. 채팅 UI가 표시되면 이 전화를 걸어야 합니다. 자세한 내용은 관련 샘플 응용 프로그램 및 개발자 가이드 - iOS를 Mobile SDK 참조하세요.

    표 3. 매개변수
    이름 유형 설명
    테마 NowChatThemeable 객체 생성할 채팅 UI에 대한 테마 정보입니다.
    표 4. 반환
    유형 설명
    객체 성공: UIViewController UI 뷰 컨트롤러 구성 정보를 포함하는 개체입니다.

    실패: NowChatServiceError 개체입니다.

    가능한 오류:
    • chatService유효하지 않음
    • coreService유효하지 않음
    • 게스트 사용자 허용 안 됨
    • 유효하지 않은 자격 증명
    • 노세션
    • 알 수 없음
    • 지원되지 않는 서버

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    func makeChatScreen() -> UIViewController? {
      var chatService: NowChatService?
      guard let chatService = chatService else { return nil }
      let result = chatService.makeChatUI(theme: CarrascoChatTheme(baseTheme: CarrascoTheme()))
      switch result {
        case .success(let chatViewController):
          return chatViewController
        case .failure(let error):
          debugPrint("Chat screen creation failed with error: \(error)")
          return nil
      }
    }

    NowChatService - 종료()

    활성 채팅 세션을 포함한 채팅 서비스를 종료합니다.

    이 함수를 호출한 후에는 연결된 NowChatService 가 비활성화되어 다시 사용할 수 없습니다. 다른 채팅 세션을 설정하려면 NowChat.makeChatService() 함수를 호출하여 새 NowChatService 인스턴스를 만듭니다.

    표 5. 매개변수
    이름 유형 설명
    없음
    표 6. 반환
    유형 설명
    없음

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    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()

    채팅 세션을 시작합니다.

    주:
    채팅 세션이 시작된 후 완료 작업을 실행하려면 해당 함수를 사용합니다 NowChatService - startChat(_ completion: @escaping (Result<Void, NowChatServiceError>)) .
    표 7. 매개변수
    이름 유형 설명
    없음
    표 8. 반환
    유형 설명
    void 또는 String 성공: void

    오류: NowChatServiceError

    가능한 오류:
    • chatService유효하지 않음
    • coreService유효하지 않음
    • 게스트 사용자 허용 안 됨
    • 유효하지 않은 자격 증명
    • 노세션
    • 알 수 없음
    • 지원되지 않는 서버

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    chatService.startChat { [weak self] result in
      if case .failure(let error) = result {
        debugPrint("Chat session initialization failed with error: \(error)")
        self?.resetChat()
      }
    }

    NowChatService - startChat(_ completion: @escaping (Result<Void, NowChatServiceError>))

    채팅 세션을 시작하고 채팅 세션이 시작된 후 완료 블록을 실행합니다.

    표 9. 매개변수
    이름 유형 설명
    완료 객체 채팅 세션이 시작된 후 실행할 완료 블록입니다.
    완성 블록의 반환 값은 다음과 같습니다.
    • 성공: void
    • 오류: NowChatServiceError
    가능한 오류:
    • chatService유효하지 않음
    • coreService유효하지 않음
    • 게스트 사용자 허용 안 됨
    • 유효하지 않은 자격 증명
    • 노세션
    • 알 수 없음
    • 지원되지 않는 서버
    표 10. 반환
    유형 설명
    void

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    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)
    }

    NowChatService - subscribeToUnreadMessageCount(pollingInterval: TimeInterval, completion: @escaping (Int) -> Void)

    읽지 않은 메시지 카운트 수신기를 구독합니다.

    표 11. 매개변수
    이름 유형 설명
    pollingInterval 시간 간격 읽지 않은 채팅 메시지 수에 대해 웹 서비스를 폴링할 빈도입니다.

    단위: 초

    완료 @escaping (int) -> void) 읽지 않은 채팅 메시지 수를 보고하기 위해 호출할 완료 핸들러입니다.

    Int: 읽지 않은 채팅 메시지 수입니다.

    표 12. 반환
    유형 설명
    없음

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    …
    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()

    읽지 않은 메시지 카운트 수신기 수신을 구독 취소합니다.

    표 13. 매개변수
    이름 유형 설명
    없음
    표 14. 반환
    유형 설명
    없음

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    …
    if viewModel.isPolling {
      viewModel.unsubscribeFromUnreadMessageCount()
      viewState.pollingInterval = ""
    } else {
      viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
    }
    …
    func unsubscribeFromUnreadMessageCount() {
      chatService.unsubscribeFromUnreadMessageCount()
      isPolling = false
      unreadMessageCount = 0
    }