Classroom API でのプッシュ通知

Registrations コレクションのメソッドを使用すると、Classroom でデータが変更されたときに通知を受け取ることができます。

この記事では、コンセプトの概要と、 プッシュ通知の受信を開始する方法を確認できます。

Classroom のプッシュ通知の概要

Classroom API のプッシュ通知機能を使用すると、 Classroom でデータが変更されたときに通知を受け取るように登録するための Classroom API。 通知はクラウド Pub/Sub トピックにパブリッシュされます。通常は数分以内に、 適用できます。

プッシュ通知を受信するには、Cloud Pub/Sub を設定する トピックを作成し、作成時に 適切な通知のフィード登録

以下に、このドキュメントで使用されている主なコンセプトの定義を示します。

  • デスティネーションとは、通知が送信される場所です。
  • フィードは、サードパーティ アプリケーションが できます。たとえば、「コース 1234 の名簿変更」などです。
  • 登録は、特定のフィードからデスティネーションに通知を配信するよう Classroom API に指示するものです。

フィードの登録を作成すると、その登録の Cloud Pub/Sub トピックは、期限切れになるまでそのフィードから通知を受け取ります。登録は 1 週間有効ですが、有効期限が切れる前に registrations.create() と同じリクエストを送信することで、いつでも延長できます。

Cloud Pub/Sub トピックは、Google Cloud Storage バケットを は、登録の作成時に指定した認証情報で表示できます。たとえば、ユーザーがアプリの権限を取り消した場合や、教師として削除された場合、通知は配信されなくなります。

フィードのタイプ

現在のところ、Classroom API では次の 3 種類のフィードを使用できます。

  • 各ドメインにはドメインの登録者数の変更フィードがあり、生徒や教師がそのドメインのコースに参加または退出した際に通知が表示されます。
  • 各コースにはコースの名簿変更フィードがあり、 生徒と教師がそのコースに参加したり、コースから退出したりしたときに通知を受け取ります。 説明します
  • 各コースにはコースの課題の変更フィードがあり、 コースの課題や生徒の提出物オブジェクトが そのコースで作成または変更された項目です。

Cloud Pub/Sub トピックの設定

通知は Cloud Pub/Sub トピックに配信されます。Cloud Pub/Sub から Webhook で通知を受信したり、サブスクリプションのエンドポイントをポーリングして通知を受信したりできます。

Cloud Pub/Sub トピックを設定するには、以下を行う必要があります。

  1. Cloud Pub/Sub の 前提条件
  2. Cloud Pub/Sub クライアントをセットアップする
  3. Cloud Pub/Sub の料金を確認する。 Play Console プロジェクトの課金を有効にします。
  4. Cloud Pub/Sub トピックは、デベロッパー コンソール(最も簡単)、コマンドライン ツール(簡単なプログラムによる使用)、または Cloud Pub/Sub API を使用して作成します。なお、Cloud Pub/Sub で許可されるのは、 トピックであるため、1 つのトピックを使用して スケーリングの問題が発生しないよう、 人気が高まっています。

  5. Cloud Pub/Sub でサブスクリプションを作成して、通知の配信方法を Cloud Pub/Sub に指示します。

  6. 最後に、プッシュ通知を登録する前に、トピックにパブリッシュする権限をプッシュ通知サービス アカウント([email protected])に付与する必要があります。

注: プッシュ通知サービス アカウントに公開権限を付与した場合 Cloud Pub/Sub トピックに 直接接続できます コンソール プロジェクトは、このプロジェクトが存在することを確認し、 通知を受け取ることができます。多くのアプリケーションでは OAuth クライアント ID がクライアントサイドに保存されるため、エンドユーザーがデベロッパー コンソール プロジェクトからリクエストを送信できる場合があります。これに該当し、エンドユーザーが Cloud Pub/Sub トピックに不要な通知を送信したり、プッシュ通知に使用する Cloud Pub/Sub トピックの名前を把握したりすることを懸念している場合は、別のデベロッパー コンソール プロジェクトからプッシュ通知を登録することを検討してください。

通知を受けるためにアプリケーションを登録する

Classroom API のプッシュ通知サービス アカウントが 通知の登録は、 registrations.create() メソッドを呼び出します。registrations.create() メソッドは、指定された Cloud Pub/Sub トピックに push 通知サービス アカウントからアクセスできることを確認します。「 メソッドは、プッシュ通知サービス アカウントがトピックに到達できない場合に失敗します。 たとえば、トピックが存在しない場合や、そのトピックに そのトピックに関する権限を付与できます。

承認

Classroom API のすべての呼び出しと同様に、registrations.create() の呼び出しは承認トークンで承認される必要があります。この認証トークンには、プッシュ通知スコープ(https://www.googleapis.com/auth/classroom.push-notifications)と、送信される通知に関するデータを表示するために必要なスコープを含める必要があります。

  • ロースター変更フィードの場合、これは Rosters スコープ、または(理想的には)その読み取り専用バリアント(https://www.googleapis.com/auth/classroom.rosters.readonly または https://www.googleapis.com/auth/classroom.rosters)を意味します。
  • コースの課題変更フィードの場合、これはコースの課題スコープの「生徒」バージョン、または(理想的には)その読み取り専用バリアント(https://www.googleapis.com/auth/classroom.coursework.students.readonly または https://www.googleapis.com/auth/classroom.coursework.students)を意味します。

通知を配信するには、アプリケーションが OAuth 権限付与を保持している必要があります。 権限を設定することで、承認済みユーザーに付与できます。ユーザーがアプリとの接続を切断すると、通知は停止します。現在、ドメイン全体の委任は 権限はこの目的ではサポートされていません。個人または法人向けの ドメイン全体で委任された権限のみを使用して通知を行う場合、 @MissingGrant エラー。

通知の受信

通知は JSON でエンコードされ、次の情報を含みます。

  • 変更されたリソースを含むコレクションの名前。対象 名簿の変更に関する通知。courses.students または courses.teachers。コースの課題の変更の場合は、courses.courseWork または courses.courseWork.studentSubmissions です。
  • マップ内の変更されたリソースの識別子。この地図の目的は 引数を適切なリソースの get メソッドに一致させます。対象 courseId フィールドと userId フィールドが そのままの状態で送信可能 courses.students.get() または courses.teachers.get(). 同様に、courses.courseWork コレクションに変更を加えると、 変更せずに送信できる courseId フィールドと id フィールド courses.courseWork.get() courses.courseWork.studentSubmissions コレクションに加えられた変更は、 変更せずに送信できる courseIdcourseWorkIdid フィールドがある から courses.courseWork.studentSubmissions.get().

通知のサンプルを次のコード スニペットに示します。

{
  "collection": "courses.students",
  "eventType": "CREATED",
  "resourceId": {
    "courseId": "12345",
    "userId": "45678"
  }
}

通知には registrationId メッセージ属性もあります。この属性には、通知の原因となった登録の ID が含まれます。この ID は registrations.delete() とともに使用して、通知の登録を解除できます。