You can use the methods on the Registrations collection to receive notifications when data changes in Classroom.
This article provides a conceptual overview along with simple instructions on how to start receiving push notifications.
Обзор push-уведомлений в Classroom
Функция push-уведомлений API Classroom позволяет приложениям, использующим API Classroom, подписываться на уведомления об изменениях данных в Classroom. Уведомления доставляются в топик Cloud Pub/Sub , обычно в течение нескольких минут после изменения.
To receive push notifications, you need to set up a Cloud Pub/Sub topic and provide that topic's name when you create a registration for the appropriate feed of notifications.
Below are definitions of key concepts used in this documentation:
- A destination is a place where notifications are sent.
- A feed is a type of notifications that a third party application can subscribe to. For example, "roster changes for course 1234".
- A registration is an instruction to the Classroom API to deliver notifications from a particular feed to a destination .
После создания регистрации для ленты новостей, тема Cloud Pub/Sub, к которой относится эта регистрация, будет получать уведомления от этой ленты до истечения срока её действия. Ваша регистрация действует неделю, но вы можете продлить её в любой момент до истечения срока действия, отправив запрос, идентичный запросу registrations.create() .
В вашу тему Cloud Pub/Sub поступают уведомления только о ресурсах, которые вы можете просматривать с помощью учетных данных, указанных при регистрации. Например, если пользователь отзывает разрешение на доступ к вашему приложению или удаляется из списка преподавателей, уведомления перестают доставляться.
Виды кормов
API Classroom предлагает три типа ленты новостей:
- Each domain has a roster changes for domain feed, which exposes notifications when students and teachers join and leave courses in that domain.
- Each course has a roster changes for course feed, which exposes notifications when students and teachers join and leave courses in that course.
- Each course has a course work changes for course feed, which exposes notifications when any course work or student submission objects are created or modified in that course.
Настройте тему Cloud Pub/Sub.
Notifications are delivered to Cloud Pub/Sub topics. From Cloud Pub/Sub, you can receive notifications on a webhook, or by polling a subscription endpoint.
To set up a Cloud Pub/Sub topic, you need to do the following:
- Make sure you fulfill the Cloud Pub/Sub Prerequisites .
- Настройте клиент Cloud Pub/Sub .
- Review the Cloud Pub/Sub pricing , and enable billing for your Developer Console project.
Создайте тему Cloud Pub/Sub в консоли разработчика (самый простой способ), с помощью инструмента командной строки (для простого программного использования) или с помощью API Cloud Pub/Sub . Обратите внимание, что Cloud Pub/Sub поддерживает только ограниченное количество тем , поэтому использование одной темы для получения всех уведомлений гарантирует отсутствие проблем с масштабированием, если ваше приложение станет популярным.
Create a Subscription in Cloud Pub/Sub , to tell Cloud Pub/Sub how to deliver your notifications.
Наконец, перед регистрацией для получения push-уведомлений необходимо предоставить учетной записи службы push-уведомлений (
classroom-notifications@system.gserviceaccount.com) разрешение на публикацию уведомлений в вашей теме.
Зарегистрируйте свою заявку для получения уведомлений.
После того как у вас появится тема, в которую может публиковать сообщения учетная запись службы push-уведомлений Classroom API, вы можете зарегистрироваться для получения уведомлений, используя метод registrations.create() . Метод registrations.create() проверяет, доступна ли предоставленная тема Cloud Pub/Sub для учетной записи службы push-уведомлений. Метод завершится неудачей, если учетная запись службы push-уведомлений не сможет получить доступ к теме; например, если тема не существует или вы не предоставили ей разрешение на публикацию в этой теме.
Авторизация
Как и все вызовы API Classroom, вызовы registrations.create() должны быть авторизованы с помощью токена авторизации. Этот токен аутентификации должен включать область действия Push Notifications ( https://www.googleapis.com/auth/classroom.push-notifications ) и все области действия, необходимые для просмотра данных о том, какие уведомления отправляются.
- Для лент изменений в составе класса это означает область действия «Списки» или (в идеале) ее вариант только для чтения (
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 .
Получать уведомления
Notifications are encoded with JSON, and contain:
- Название коллекции, содержащей измененный ресурс. Для уведомлений об изменениях в списке студентов это может быть
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 будут иметь поляcourseId,courseWorkIdиid, которые могут быть отправлены без изменений в courses.courseWork.studentSubmissions.get() .
Приведённый ниже фрагмент кода демонстрирует пример уведомления:
{
"collection": "courses.students",
"eventType": "CREATED",
"resourceId": {
"courseId": "12345",
"userId": "45678"
}
}
Уведомления также имеют атрибут сообщения registrationId , содержащий идентификатор регистрации, вызвавшей уведомление, который можно использовать с registrations.delete() для отмены регистрации на получение уведомлений.