---
sourceDocument: Xanadu API リファレンス
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ja-JP

ft:publication_title :

    - Xanadu API リファレンス

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

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

# iOS アプリケーションでのプッシュ通知の設定 {#ariaid-title1}

* リリースバージョン: Xanadu
* 
* 更新日 2024年08月01日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：5分

プッシュ通知を設定するために ServiceNow インスタンスで実行する必要があるタスクに加えて、 iOS アプリケーションに特定のコードを含める必要もあります。

## NowSDK NowPushService を作成する {#mobsdk-ios-setup-push-app__section_hyb_zxp_prb}

アプリケーションで最初に行う必要があることの 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](https://servicenow-prod.fluidtopics.net/ZFxwHr0bBDQWGbDV6kPBzA#NowPushiOSAPI "NowPush API は、ユーザーが NowPush サービスインスタンスをインスタンス化できるようにするトップレベルのグローバル API です。")」を参照してください。

## プッシュトークンを登録する {#mobsdk-ios-setup-push-app__section_kyr_4cq_prb}

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)](https://servicenow-prod.fluidtopics.net/I1Jz4rW6sPMncTBUvzPVlg#NPushServ-registerPushToken_O_S_O_O "現在のiOSデバイスと指定されたアプリケーションのプッシュ通知を識別するために使用されるServiceNowインスタンスに一意のトークンを登録します。")」を参照してください。

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

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

    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)](https://servicenow-prod.fluidtopics.net/I1Jz4rW6sPMncTBUvzPVlg#NPushServ-unregisterPushToken_O_S_O_O "以前に登録したプッシュトークンを登録解除します。")」を参照してください。

## プッシュペイロードを解析 {#mobsdk-ios-setup-push-app__section_ofn_dlw_trb}

情報を収集し、アプリケーションの他の部分でデータを使用するには、プッシュ通知ペイロードを `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(())
    }


