iOS アプリケーションでのプッシュ通知の設定

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:5分
  • プッシュ通知を設定するために ServiceNow インスタンスで実行する必要があるタスクに加えて、 iOS アプリケーションには特定のコードも含める必要があります。

    NowSDK NowPushService の作成

    アプリケーションで最初に行う必要があることの 1 つは、 NowPushService を作成することです。NowPush SDK には、このサービスを作成するためのファクトリ関数が用意されています。メインコード本文の早い段階で、次のスニペットのようなコードを追加します。

    func setup(with instanceURL: URL) -> AnyPublisher<NowService, ConfigurationError> {
      NowPush.makePushService(instanceUrl: instanceURL)
        .mapError { .sdkError($0) }
        .map { $0 as NowService }
        .eraseToAnyPublisher()
    }

    NowPush.makePushService() メソッドの詳細については、NowPush API - iOSを参照してください。

    プッシュトークンの登録

    Apple は、プッシュ通知を受信するデバイスとアプリケーションを識別する一意のプッシュ通知トークンを提供します。アプリケーションでプッシュ通知を受信するには、 NowPushService を使用してこのトークンを登録する必要があります。次のコードスニペットのような関数を iOS アプリケーションに追加します。このアプリケーションは ServiceNow インスタンスに登録する必要があります。

    func registerForPushNotifications(deviceToken: Data) {
      pushService.registerPushToken(deviceToken,
          pushAppName: "TestPushApp", // Modify this to be your iOS application name
          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
        }
      }
    }

    registerPushToken() メソッドの詳細については、NowPushService - registerPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void)を参照してください。

    プッシュトークンの登録解除

    ユーザーがログアウトしたときなど、ユーザーがアプリケーションを終了するたびにプッシュトークンの登録を解除する必要があります。次のコードスニペットのようなコードを使用して、プッシュトークンの登録を解除します。pushAppNameiOSアプリケーションの名前に変更してください。

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

    unregisterPushToken() メソッドの詳細については、NowPushService - unregisterPushToken(_token: Data, pushAppName: String, environment: NowPushEnvironment, completion: @escaping (Result<Data, NowPushError>) -> Void)を参照してください。

    プッシュペイロードを解析

    情報を収集し、アプリケーションの他の部分でデータを使用するには、プッシュ通知ペイロードを解析して NowPushPayload オブジェクトにする必要があります。現在、これは仮想エージェントのプッシュ通知でのみ使用できます。次のようなコードを使用します

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