NowPushService 클래스 - iOS

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 6분
  • NowPushService 클래스는 푸시 알림 서비스와 상호작용할 수 있는 기능을 제공합니다.

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

    데이터 유형: NowServiceConfiguration

    NowPushService - registerPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void)

    현재 iOS 장치 및 지정된 애플리케이션에 대한 푸시 알림을 식별하는 데 사용되는 인스턴스와 함께 ServiceNow 고유 토큰을 등록합니다.

    표 2. 매개변수
    이름 유형 설명
    _토큰 데이터 등록할 푸시 토큰의 데이터 객체입니다. 개발자 사이트에서 가져온 토큰입니다 Apple . 자세한 내용은 개발자 가이드 - iOSMobile SDK 참조하십시오.
    pushAppName 문자열 이 토큰이 등록되고 있는 푸시 애플리케이션의 이름입니다.
    환경 NowPush환경 토큰이 등록되는 환경입니다.
    유효한 값은 다음과 같습니다.
    • 생산
    • 샌드박스
    완료 @escaping(결과<데이터, NowPushError>) → 무효 토큰을 등록하려고 시도한 후 실행할 완료 핸들러입니다.
    • 성공: iOS 푸시 알림 인증서.
    • 오류: NowPushError - 토큰을 등록하려고 할 때 발생한 오류에 대한 정보입니다.
      가능한 값:
      • 디코딩: 디코딩 오류가 발생했습니다.
      • httpRequestFailure: http 호출이 성공하지 않을 때마다(2xx) 반환되는 일반 오류입니다.
      • notAuthorized: 요청자에게 지정된 푸시 알림 작업을 수행할 권한이 없습니다.
      • unsupportedData: 푸시 페이로드가 잘못되었습니다.
    표 3. 반환
    유형 설명
    없음

    이 예는 TestPushApp 애플리케이션에 대한 푸시 알림 토큰을 등록하는 방법을 보여줍니다.

    func registerForPushNotifications(deviceToken: Data) {
      pushService.registerPushToken(deviceToken,
          pushAppName: "TestPushApp",
          environment: environment) { [weak self] result in
        guard let self = self else { return }
        switch result {
          case .success:
            UserDefaults.standard.set(true, forKey: "pushNotificationsRegistered")
            self.pushRegistrationState = .registrationSuccess
          case .failure:
            UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
            self.pushRegistrationState = .registrationFailed
        }
      }
    }

    NowPushService - unregisterPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void)

    이전에 등록된 푸시 토큰을 등록 취소합니다.

    표 4. 매개변수
    이름 유형 설명
    _토큰 데이터 등록 취소할 푸시 토큰의 데이터 객체입니다.
    pushAppName 문자열 이 토큰의 등록을 취소할 푸시 애플리케이션의 이름입니다.
    환경 NowPush환경 토큰이 등록되는 환경입니다.
    유효한 값은 다음과 같습니다.
    • 생산
    • 샌드박스
    완료 @escaping(결과<데이터, NowPushError>) → 무효 토큰 등록을 취소하려고 시도한 후 실행할 완료 핸들러입니다.
    • 성공: API 응답 데이터입니다.
    • 오류: NowPushError - 토큰 등록을 취소하려고 할 때 발생한 오류에 대한 정보입니다.
      가능한 값:
      • 디코딩: 디코딩 오류가 발생했습니다.
      • httpRequestFailure: http 호출이 성공하지 않을 때마다(2xx) 반환되는 일반 오류입니다.
      • notAuthorized: 요청자에게 지정된 푸시 알림 작업을 수행할 권한이 없습니다.
      • unsupportedData: 푸시 페이로드가 잘못되었습니다.
    표 5. 반환
    유형 설명
    없음

    이 예는 TestPushApp 애플리케이션과 연결된 푸시 알림 토큰을 등록 취소하는 방법을 보여줍니다.

    func unregisterFromPushNotifications(deviceToken: Data) {
      pushService.unregisterPushToken(deviceToken, pushAppName: "TestPushApp", environment: environment) { [weak self] result in
        guard let self = self else { return }
        switch result {
          case .success:
            UserDefaults.standard.set(false, forKey: "pushNotificationsRegistered")
            self.pushRegistrationState = .unregisterSuccess
          case .failure:
            self.pushRegistrationState = .unregisterFailed
        }
      }
    }

    NowPushService - payloadFromUserInfo(_userInfo: [AnyHashable: 임의])

    userInfo 키-값 쌍을 NowPushPayload 객체로 구문 분석합니다.

    표 6. 매개변수
    이름 유형 설명
    _userInfo [AnyHashable: 임의] 푸시 알림의 일부로 수신된 푸시 페이로드 컨텐츠입니다.
    표 7. 반환
    유형 설명
    결과<NowPushPayload, NowPushError> 페이로드 구문 분석의 결과를 반환합니다.
    • 성공: NowPushPayload 객체를 구문 분석했습니다.
    • 실패: NowPushError - 지정된 사용자 페이로드를 구문 분석하는 동안 발생한 오류에 대한 정보입니다.
      가능한 값:
      • 디코딩: 디코딩 오류가 발생했습니다.
      • httpRequestFailure: http 호출이 성공하지 않을 때마다(2xx) 반환되는 일반 오류입니다.
      • notAuthorized: 요청자에게 지정된 푸시 알림 작업을 수행할 권한이 없습니다.
      • unsupportedData: 푸시 페이로드가 잘못되었습니다.

    이 예제에서는 사용자 페이로드를 구문 분석하는 방법을 보여 줍니다.

    func userNotificationCenter(_ center: UNUserNotificationCenter,
        didReceive response: UNNotificationResponse,
        withCompletionHandler completionHandler: @escaping () -> Void) {
      guard let pushService = pushService else {
        completionHandler()
        return
      }
      let userInfo = response.notification.request.content.userInfo
      _ = pushService.payloadFromUserInfo(userInfo)
        .flatMap(handleNowPushPayload)
    }
    
    
    func handleNowPushPayload(_ payload: NowPushPayload) -> Result<Void, NowPushError> {
      guard payload is NowPushVirtualAgent else {
        return .failure(NowPushError.unsupportedData)
      }
      launchVirtualAgent()
      return .success(())
    }