Aby otrzymywać powiadomienia o zmianach danych w Classroom, możesz użyć metod z kolekcji Registrations
.
Z tego artykułu dowiesz się, jak zacząć otrzymywać powiadomienia push.
Omówienie powiadomień push z Classroom
Funkcja powiadomień push interfejsu Classroom API umożliwia aplikacjom korzystającym z interfejsu Classroom API subskrybowanie powiadomień o zmianach danych w Classroom. Powiadomienia są dostarczane do tematu Cloud Pub/Sub, zwykle w ciągu kilku minut od zmiany.
Aby otrzymywać powiadomienia push, musisz skonfigurować temat Cloud Pub/Sub i podać jego nazwę podczas tworzenia rejestracji dla odpowiedniego kanału powiadomień.
Poniżej znajdziesz definicje kluczowych pojęć używanych w tej dokumentacji:
- Adres docelowy to miejsce, do którego wysyłane są powiadomienia.
- Kanał to rodzaj powiadomień, do których aplikacja innej firmy może się zasubskrybować. Na przykład „zmiany w składzie w kursie 1234”.
- Rejestracja to instrukcja wysyłania powiadomień z określonego pliku danych do miejsca docelowego.
Gdy utworzysz rejestrację pliku danych, temat Cloud Pub/Sub tej rejestracji będzie otrzymywać powiadomienia z tego pliku danych do czasu jego wygaśnięcia. Rejestracja trwa tydzień, ale możesz ją przedłużyć w dowolnym momencie przed jej wygaśnięciem, przesyłając identyczną prośbę do registrations.create()
.
Temat Cloud Pub/Sub otrzymuje tylko powiadomienia o zasobach, które możesz wyświetlać za pomocą danych logowania podanych podczas tworzenia rejestracji. Jeśli na przykład użytkownik cofnie uprawnienia aplikacji lub zostanie usunięty z roli nauczyciela, powiadomienia nie będą już wysyłane.
Rodzaje plików danych
Interfejs Classroom API udostępnia obecnie 3 typy plików danych:
- Każda domena ma kanał zmiany w składzie w domenie, który zawiera powiadomienia o dołączaniu i opuszczaniu zajęć przez uczniów i nauczycieli w tej domenie.
- Każde zajęcia mają kanał zmiany listy uczniów, na którym pojawiają się powiadomienia o dołączaniu i opuszczaniu zajęć przez uczniów i nauczycieli.
- Każdy kurs ma kanał zmiany zadań w kursie, na którym wyświetlają się powiadomienia o utworzeniu lub zmodyfikowaniu zadań w danym kursie lub przesłanych przez uczniów obiektów.
Konfigurowanie tematu Cloud Pub/Sub
Powiadomienia są dostarczane do tematów Cloud Pub/Sub. Z Cloud Pub/Sub możesz otrzymywać powiadomienia za pomocą webhooka lub przez odpytywanie punktu końcowego subskrypcji.
Aby skonfigurować temat Cloud Pub/Sub:
- Sprawdź, czy spełniasz wymagania wstępne Cloud Pub/Sub.
- Skonfiguruj klienta Cloud Pub/Sub.
- Zapoznaj się z cennikiem usługi Cloud Pub/Sub i włącz płatności w projekcie w konsoli dewelopera.
Utwórz temat Cloud Pub/Sub w konsoli dla deweloperów (najłatwiej), za pomocą narzędzia wiersza poleceń (do prostego użycia programistycznego) lub za pomocą interfejsu Cloud Pub/Sub API. Pamiętaj, że Cloud Pub/Sub obsługuje tylko ograniczoną liczbę tematów, więc używanie jednego tematu do odbierania wszystkich powiadomień zapewni, że nie napotkasz problemów ze skalowaniem, jeśli Twoja aplikacja stanie się popularna.
Utwórz subskrypcję w Cloud Pub/Sub, aby określić, jak Cloud Pub/Sub ma dostarczać powiadomienia.
Na koniec, zanim zarejestrujesz się w przypadku powiadomień push, musisz przyznać konto usługi Powiadomienia push (
classroom-notifications@system.gserviceaccount.com
) uprawnienia do publikowania w Twoim temacie.
UWAGA: jeśli przyznasz konto usługi Push Notifications uprawnienia do publikowania w temacie Cloud Pub/Sub, użytkownicy, którzy mogą wysyłać żądania z Twojego projektu w Konsoli deweloperów, będą mogli sprawdzić, czy istnieje, i zarejestrować się na otrzymywanie powiadomień. Wiele aplikacji przechowuje identyfikatory klienta OAuth po stronie klienta, więc użytkownicy końcowi mogą wysyłać żądania z Twojego projektu w Konsoli programistów. Jeśli dotyczy Cię to i martwisz się, że użytkownicy końcowi wysyłają niechciane powiadomienia do Twojego tematu Cloud Pub/Sub lub znają nazwy tematów Cloud Pub/Sub, których używasz do powiadomień push, rozważ zarejestrowanie powiadomień push z innego projektu w Konsoli dla deweloperów.
Rejestrowanie aplikacji na potrzeby otrzymywania powiadomień
Gdy masz temat, na który konto usługi Classroom API może publikować powiadomienia push, możesz zarejestrować się na powiadomienia, używając metody registrations.create()
. Metoda registrations.create()
sprawdza, czy można uzyskać dostęp do podanego tematu Cloud Pub/Sub z poziomu konta usługi powiadomień push. Ta metoda zawiedzie, jeśli konto usługi powiadomień push nie może uzyskać dostępu do tematu, np. jeśli temat nie istnieje lub nie masz uprawnień do publikowania w tym temacie.
Autoryzacja
Podobnie jak wszystkie wywołania interfejsu Classroom API, wywołania interfejsu registrations.create()
muszą być autoryzowane za pomocą tokena autoryzacji. Ten token uwierzytelniający musi obejmować zakres powiadomień push (https://www.googleapis.com/auth/classroom.push-notifications
) oraz wszystkie zakresy wymagane do wyświetlania danych o tym, które powiadomienia są wysyłane.
- W przypadku kanałów zmian w składzie oznacza to zakres „Składy” lub (najlepiej) jego wersję tylko do odczytu (
https://www.googleapis.com/auth/classroom.rosters.readonly
lubhttps://www.googleapis.com/auth/classroom.rosters
). - W przypadku kanałów zmian zadań oznacza to wersje „uczniów” zakresu zadań lub (najlepiej) ich wersje tylko do odczytu (
https://www.googleapis.com/auth/classroom.coursework.students.readonly
lubhttps://www.googleapis.com/auth/classroom.coursework.students
).
Aby powiadomienia były dostarczane, aplikacja musi zachować uprawnienia OAuth od autoryzowanego użytkownika z wymaganymi zakresami. Jeśli użytkownik odłączy aplikację, powiadomienia przestaną być wysyłane. Pamiętaj, że obecnie delegowanie uprawnień w całej domenie nie jest obsługiwane w tym celu. Jeśli spróbujesz zarejestrować się na otrzymywanie powiadomień, korzystając tylko z upoważnienia delegowanego na poziomie domeny, pojawi się błąd @MissingGrant
.
Otrzymywanie powiadomień
Powiadomienia są kodowane w formacie JSON i zawierają:
- Nazwa kolekcji zawierającej zmieniony zasób. W przypadku powiadomień o zmianach w składzie jest to wartość
courses.students
lubcourses.teachers
. W przypadku zmian w zadaniach z zajęć może to byćcourses.courseWork
lubcourses.courseWork.studentSubmissions
. - Identyfikatory zasobu, który uległ zmianie, na mapie. Ta mapa ma dopasowywać argumenty do metody
get
odpowiedniego zasobu. W przypadku powiadomień o zmianach w składzie grupy zostaną wypełnione polacourseId
iuserId
, które można wysłać bez zmian do funkcji courses.students.get() lub courses.teachers.get(). Podobnie zmiany w kolekcji courses.courseWork będą zawierać polacourseId
iid
, które można wysłać bez zmian do funkcji courses.courseWork.get(), a zmiany w kolekcji courses.courseWork.studentSubmissions będą zawierać polacourseId
,courseWorkId
iid
, które można wysłać bez zmian do funkcji courses.courseWork.studentSubmissions.get().
Ten fragment kodu pokazuje przykładowe powiadomienie:
{
"collection": "courses.students",
"eventType": "CREATED",
"resourceId": {
"courseId": "12345",
"userId": "45678"
}
}
Powiadomienia mają też atrybuty wiadomości registrationId
, które zawierają identyfikator rejestracji, która spowodowała wysłanie powiadomienia. Można go użyć, aby registrations.delete()
rezygnować z powiadomień.