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

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む6読むのに数分
  • プッシュ通知を設定するためにインスタンスで実行する ServiceNow® 必要があるタスクに加えて、アプリケーションに特定のコード Android を含める必要があります。

    NowSDK NowPushService の作成

    アプリケーションで最初に行う必要があることの 1 つは、NowSDK NowPushService を取得することです。次のスニペットのようなコードをメイン コード本文の早い段階で追加します。

    /**
     * Helper class used to handle different Now service instances.
     */
    @Singleton
    class SdkManager @Inject constructor() {
    
        private var nowPushService: NowPushService? = null
    
        /**
         * Create the NowPushService once in the lifetime of the application inside the Application
         * class or another manager class that will be injected into other classes via dagger/hilt.
         * NowPushService should be created after initializing the NowSDK
         */
        suspend fun getNowPushService(): NowPushService? {
            if (nowPushService != null) return nowPushService
    
            return NowPushSDK.makePushService(URL("https://instance-name.service-now.com")).getOrThrow()
                .also { this.nowPushService = it }
        }
    }

    NowPushSDK.makePushService() メソッドの詳細については、次を参照してくださいNowPushSDK - makePushService(instanceURL: URL)

    プッシュトークンを登録する

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

    FirebaseMessaging.getInstance().token.addOnCompleteListener {task ->
      val token = task.result
    
      if (!task.isSuccessfull || token == null) {
        throw Exception("Unable to fetch token"))
      }
    
      pushService.registerPushToken(token, "PushAppName", {
          Log.v(TAF, "Successfully registered push token")
      }, { e ->
          Log.e(TAG, "Error registrating push", e)
      })
    }

    registerPushToken() メソッドの詳細については、を参照してくださいNowPushService - registerPushToken(pushToken: 文字列, pushApp: 文字列, successCallback: Runnable, errorCallback: Consumer<Throwable>)

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

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

    pushService.unregisterPushToken(token, "PushAppName", {
          Log.v(TAG, "Successfully unregistered push token")
    }, { e ->
          Log.e(TAG, "Error unregistering push", e)
    })

    unregisterPushToken() メソッドの詳細については、を参照してくださいNowPushService - unregisterPushToken(pushToken: 文字列, pushApp: 文字列, successCallback: Runnable, errorCallback: consumer<Throwable>)

    FirebaseMessagingService を実装する

    アプリケーション内に FirebaseMessagingService を実装する必要があります。このサービスを設定して実装するには、 Android Firebase のドキュメントに記載されている手順に従ってください。

    セットアップしたら、onMessageReceived() メソッドをオーバーライドし、スルーを NowPushService に渡RemoteMessageします。NowPushService は通知を認識すると、通知を処理し、アプリケーションが処理する通知オブジェクトを返します。現在、実装されている通知は NowPushVirtualAgent のみです。不明な通知は NotSupportedPushError オブジェクトを返します。

    //Custom coroutineScope created in the Firebase service class
    private val serviceCoroutineScope = CoroutineScope(Dispatchers.IO)
    
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
      serviceCoroutineScope.launch {
        val result = handleNowPush(remoteMessage)
    
        if (result.isSuccess) {
          when (val push = result.getOrNull()) {
            is NowPushVirtualAgent -> handleVirtualAgentPush(push)
          }
        } else {
          // Not a NowPush. Handle host app push notification message here
        }
      }
    }
    
    private suspend fun handleNowPush(remoteMessage: RemoteMessage): Result<NowPushPayload> {
      val nowPushService = sdkManager.getNowPushService()
    
      return suspendCoroutine { cont ->
        nowPushService?.handlePush(remoteMessage,
          { cont.resume(Result.success(it)) }, { cont.resumeWithException(it) })
      }
    }

    handlePush() メソッドの詳細については、を参照してくださいNowPushService - handlePush(remoteMessage: RemoteMessage, successCallback: Consumer&lt;NowPushPayload>, errorCallback: Consumer&lt;Throwable>)

    さらに、 onNewToken(token: 文字列) を上書きする必要があります。「プッシュトークンの登録」セクションで行ったのと同様に、必ずトークンを pushService.registerPushToken() に渡してください。