Ta seria samouczków przedstawia wszystkie elementy rozszerzenia Google Classroom. Każdy krok samouczka dotyczy konkretnych zagadnień i ich implementacji w jednej aplikacji internetowej. Ma to pomóc Ci w konfigurowaniu i uruchamianiu funkcjonalnego dodatku.
Twoje rozszerzenie musi współpracować z projektem Google Cloud. Jeśli nie znasz Google Cloud, przeczytaj przewodniki Pierwsze kroki. Użytkownik zarządza danymi logowania, dostępem do interfejsu API i pakietem SDK Google Workspace Marketplace w konsoli Google Cloud. Więcej informacji o pakiecie SDK Marketplace znajdziesz na stronie z informacjami o aplikacji Google Workspace Marketplace.
W tym przewodniku znajdziesz informacje na te tematy:
- Użyj Google Cloud, aby utworzyć stronę, która będzie wyświetlana w elemencie iframe w Classroom.
- Dodaj logowanie jednokrotne Google i zezwól użytkownikom na logowanie się.
- Wykonuj wywołania interfejsu API, aby dołączyć dodatek do projektu.
- spełnić kluczowe wymagania dotyczące przesyłania dodatków i wymagane funkcje.
W tym przewodniku zakładamy, że znasz podstawy programowania i programowania stron internetowych. Przed rozpoczęciem instrukcji zdecydowanie zalecamy zapoznanie się z przewodnikiem konfiguracji projektu. Ta strona zawiera ważne informacje o konfiguracji, które nie zostały omówione w pełni w instrukcjach.
Przykładowe implementacje
Pełny przykład referencyjny jest dostępny w Pythonie. Częściowe implementacje są też dostępne w Java i Node.js. Te implementacje są źródłem przykładowego kodu na kolejnych stronach.
Gdzie pobrać
Przykłady w Pythonie i Javie są dostępne w repozytoriach GitHub:
Przykład Node.js można pobrać jako plik ZIP:
Wymagania wstępne
Zapoznaj się z tymi sekcjami, aby przygotować nowy projekt dodatków.
Certyfikat HTTPS
Aplikację możesz hostować w dowolnym środowisku programistycznym, ale dodatek do Classroom jest dostępny tylko w https://
. Dlatego do wdrożenia aplikacji lub jej przetestowania w ramce iframe dodatku potrzebujesz serwera z szyfrowaniem SSL.
Można używać localhost
z certyfikatem SSL. Jeśli chcesz utworzyć certyfikat do lokalnego tworzenia aplikacji, użyj narzędzia mkcert.
Projekt Google Cloud
Aby użyć tych przykładów, musisz skonfigurować projekt Google Cloud. Aby dowiedzieć się, jak zacząć, zapoznaj się z przewodnikiem dotyczącym tworzenia projektu Google Cloud. W sekcji Konfigurowanie projektu Google Cloud w pierwszym przewodniku znajdziesz też instrukcje dotyczące konkretnych działań konfiguracyjnych.
Po zakończeniu pobierania wyeksportuj identyfikator klienta OAuth 2.0 jako plik JSON. Musisz dodać ten plik z danymi logowania do rozpakowanego katalogu przykładowego. Więcej informacji o plikach znajdziesz w sekcji Informacje o plikach.
Dane logowania OAuth
Aby utworzyć nowe dane logowania OAuth:
- Otwórz stronę Dane logowania Google Cloud. Upewnij się, że u góry ekranu masz wybrany odpowiedni projekt.
- Kliknij UTWÓRZ DANE LOGOWANIA i w menu wybierz Identyfikator klienta OAuth.
- Na następnej stronie:
- Jako Typ aplikacji wybierz Aplikacja internetowa.
- W sekcji Autoryzowane identyfikatory URI przekierowania kliknij DODAJ URI. Dodaj pełną ścieżkę wywołania zwrotnego dla swojej aplikacji. Na przykład
https://my.domain.com/auth-callback
lubhttps://localhost:5000/callback
. Utworzysz i obsługujesz tę trasę w dalszej części tego przewodnika. W każdej chwili możesz edytować lub dodawać kolejne takie trasy. - Kliknij UTWÓRZ.
- Następnie wyświetli się okno z nowo utworzonymi danymi logowania. Wybierz opcję POBIERZ JSON. Skopiuj pobrany plik JSON do katalogu serwera.
Wymagania wstępne dotyczące języka
Aby uzyskać najnowszą listę wymagań wstępnych, otwórz plik README w każdym repozytorium.
Python
Nasz przykład w Pythonie korzysta z platformy Flask. Pełny kod źródłowy możesz pobrać, korzystając z podanych linków.
W razie potrzeby zainstaluj Pythona w wersji 3.7 lub nowszej i upewnij się, że pip
jest dostępny.
python3 -m ensurepip --upgrade
Zalecamy też skonfigurowanie i aktywowanie nowego wirtualnego środowiska Pythona.
python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate
W każdym podkatalogu z przewodnikiem w pobieranych przykładach znajduje się plik requirements.txt
. Wymagane biblioteki możesz szybko zainstalować za pomocą pip
. Aby zainstalować wymagane biblioteki w ramach pierwszej części samouczka, użyj tych poleceń.
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Nasz przykładowy kod Node.js korzysta z ramy Express. Pełny kod źródłowy możesz pobrać, korzystając z podanych linków.
Ten przykład wymaga Node.js w wersji 16.13 lub nowszej.
Zainstaluj wymagane moduły węzła za pomocą npm
.
npm install
Java
Nasz przykład w Javie korzysta z ramy Spring Boot. Pełny kod źródłowy możesz pobrać, korzystając z podanych linków.
Zainstaluj Java 11 lub nowszą wersję, jeśli nie masz jej jeszcze zainstalowanej na komputerze.
Aplikacje Spring Boot mogą używać Gradle lub Maven do obsługi kompilacji i zarządzania zależnościami. Ten przykład zawiera zewnętrzną bibliotekę Maven, która zapewnia prawidłowe skompilowanie bez konieczności instalowania samej biblioteki Maven.
W katalogu, w którym pobierany lub klonowany jest projekt, uruchom podane niżej polecenia, aby sprawdzić, czy masz wymagane warunki wstępne do jego uruchomienia.
java --version
./mvnw --version
W systemie Windows:
java -version
mvnw.cmd --version
Informacje o plikach
W kolejnych sekcjach opisujemy układ przykładowych katalogów.
nazwy katalogów,
Każdy repozytorium zawiera kilka katalogów, których nazwy zaczynają się od liczby, na przykład /01-basic-app/
. Numery odpowiadają konkretnym krokom samouczka.
Każdy katalog zawiera w pełni funkcjonalną aplikację internetową, która wdraża funkcje opisane w konkretnym samouczku. Na przykład katalog /01-basic-app/
zawiera ostateczną implementację instrukcji Tworzenie dodatku.
Treści katalogu
Zawartość katalogu różni się w zależności od języka implementacji:
Python
Katalog główny zawiera te pliki:
main.py
– punkt wejścia aplikacji Python. W tym pliku określ konfigurację serwera, której chcesz użyć, a następnie uruchom go, aby go uruchomić.requirements.txt
– moduły Pythona wymagane do uruchamiania aplikacji internetowej. Można je zainstalować automatycznie za pomocąpip install -r requirements.txt
.client_secret.json
– plik z tajnym kluczem klienta pobrany z Google Cloud. Pamiętaj, że nie jest ona uwzględniona w przykładowym archiwum. Musisz zmienić nazwę pobranego pliku z danymi logowania i skopiować go do katalogu głównego każdego katalogu.
config.py
– opcje konfiguracji serwera Flask.Katalog
webapp
zawiera treści aplikacji internetowej. Obejmuje ona:Katalog
/templates/
z szablonami Jinja na różne strony.Katalog
/static/
z obrazami, plikami CSS i dodatkowymi plikami JavaScript.routes.py
– metody obsługi dla ścieżek aplikacji internetowej.__init__.py
– inicjalizator modułuwebapp
. Ten initializer uruchamia serwer Flask i wczytuje opcje konfiguracji określone wconfig.py
.dodatkowe pliki wymagane w danym kroku samouczka.
Node.js
Każdy krok samouczka znajduje się w oddzielnym podfolderze <step>
. Każdy krok zawiera:
- Pliki statyczne, takie jak JavaScript, CSS i obrazy, znajdują się w folderze
./<step>/public
. - Routery Express znajdują się w folderach
./<step>/routes
. - Szablony HTML znajdują się w folderach
./<step>/views
. - Aplikacja serwera to
./<step>/app.js
.
Java
Katalog projektu zawiera:
- Katalog
src.main
zawiera kod źródłowy i konfigurację potrzebne do prawidłowego uruchomienia aplikacji. Katalog ten zawiera: + Katalogjava.com.addons.spring
zawiera plikiApplication.java
iController.java
. PlikApplication.java
odpowiada za działanie serwera aplikacji, a plikController.java
obsługuje logikę punktu końcowego. + Katalogresources
zawiera katalogtemplates
z plikami HTML i JavaScript. Zawiera on też plikapplication.properties
, który określa port, na którym ma działać serwer, ścieżkę do pliku magazynu kluczy i ścieżkę do katalogutemplates
. W tym przykładzie plik magazynu kluczy znajduje się w kataloguresources
. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby zaktualizować ścieżkę w plikuapplication.properties
.- Plik
pom.xml
zawiera informacje potrzebne do kompilacji projektu i zdefiniowania wymaganych zależności. .gitignore
zawiera nazwy plików, które nie powinny być przesyłane do Git. Pamiętaj, aby w tym.gitignore
dodać ścieżkę do klucza. W tym przykładzie jest tosecrets/*.p12
(cel klucza jest omówiony w sekcji poniżej). W przypadku metody 2 i późniejszych wersji musisz też podać ścieżkę do plikuclient_secret.json
, aby mieć pewność, że nie uwzględnisz swoich sekretów w zdalnym repozytorium. W przewodniku 3 i późniejszych należy dodać ścieżkę do pliku bazy danych H2 i fabryki magazynu plików. Więcej informacji o konfigurowaniu tych magazynów danych znajdziesz w 3 części samouczka dotyczącego obsługiwania powtarzających się wizyt.mvnw
imvnw.cmd
to pliki wykonywalne kodu Mavena odpowiednio dla systemu Unix i Windows. Na przykład uruchomienie./mvnw --version
w Unixie spowoduje wyświetlenie m.in. wersji Apache Maven.- Katalog
.mvn
zawiera konfigurację dla owijacza Maven.
- Plik
Uruchamianie przykładowego serwera
Aby przetestować serwer, musisz go uruchomić. Aby uruchomić serwer przykładowy w wybranym języku:
Python
Dane uwierzytelniające OAuth
Utwórz i pobierz dane logowania OAuth w sposób opisany wcześniej. Umieść plik JSON w katalogu głównym obok pliku uruchamiania serwera aplikacji.
Konfigurowanie serwera
Możesz uruchomić serwer WWW na kilka sposobów. Na końcu pliku Pythona dodaj jedną z tych opcji:
Niezabezpieczone:
localhost
. Pamiętaj, że ta metoda nadaje się tylko do testowania bezpośrednio w oknie przeglądarki. Niezabezpieczone domeny nie mogą być wczytywane w elemencie iframe dodatku Classroom.if __name__ == "__main__": # Disable OAuthlib's HTTPs verification. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Run the web app at http://localhost:5000. app.run(debug=True)
Zabezpiecz
localhost
. W argumenciessl_context
musisz podać tuplę plików kluczy SSL.if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)
Serwer Gunicorn. Jest to odpowiednie rozwiązanie w przypadku wdrożenia serwera lub chmury w środowisku produkcyjnym. Zalecamy ustawienie zmiennej środowiskowej
PORT
do użycia z tą opcją uruchamiania.if __name__ == "__main__": # Run the web app at https://<your domain>:<server_port>. # Defaults to https://<your domain>:8080. server_port = os.environ.get("PORT", "8080") app.run(debug=True, port=server_port, host="0.0.0.0")
Uruchamianie serwera
Uruchom aplikację Python, aby uruchomić serwer skonfigurowany w poprzednim kroku.
python main.py
Kliknij wyświetlony adres URL, aby wyświetlić aplikację internetową w przeglądarce i sprawdzić, czy działa prawidłowo.
Node.js
Konfigurowanie serwera
Aby uruchomić serwer przez HTTPS, musisz utworzyć samopodpisany certyfikat, który będzie używany do uruchamiania aplikacji przez HTTPS. Te dane logowania należy zapisać jako sslcert/cert.pem
i sslcert/key.pem
w folderze głównym repozytorium. Aby przeglądarka je zaakceptowała, konieczne może być dodanie tych kluczy do łańcucha kluczy systemu operacyjnego.
Upewnij się, że *.pem
znajduje się w pliku .gitignore
, ponieważ nie chcesz go zapisywać w git.
Uruchamianie serwera
Aplikację możesz uruchomić za pomocą poniższego polecenia, zastępując step01
odpowiednim krokiem, który chcesz uruchomić jako serwer (np. step01
dla 01-basic-app i step02
dla 02-sign-in).
npm run step01
lub
npm run step02
Spowoduje to uruchomienie serwera WWW pod adresem https://localhost:5000
.
Możesz wyłączyć serwer za pomocą polecenia Control + C
w terminalu.
Java
Konfigurowanie serwera
Aby uruchomić serwer przez HTTPS, musisz utworzyć samopodpisany certyfikat, który będzie używany do uruchamiania aplikacji przez HTTPS.
Rozważ użycie narzędzia mkcert do lokalnego tworzenia aplikacji. Po zainstalowaniu mkcert
te polecenia wygenerują przechowywany lokalnie certyfikat, który będzie działać przez HTTPS.
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
W tym przykładzie plik klucza znajduje się w katalogu resources. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby zaktualizować plik application.properties
, podając odpowiednią ścieżkę. Nazwa domeny to domena, w której uruchamiasz projekt (np. localhost
).
Upewnij się, że w pliku .gitignore
znajduje się *.p12
, ponieważ nie chcesz go przekazywać do Git.
Uruchamianie serwera
Uruchom serwer, uruchamiając metodę main
w pliku Application.java
. W IntelliJ możesz na przykład kliknąć prawym przyciskiem myszy Application.java
> Run 'Application'
w katalogu src/main/java/com/addons/spring
lub otworzyć plik Application.java
i kliknąć zieloną strzałkę po lewej stronie sygnatury metody main(String[] args)
. Możesz też uruchomić projekt w oknie terminala:
./mvnw spring-boot:run
lub w systemie Windows:
mvnw.cmd spring-boot:run
Spowoduje to uruchomienie serwera na porcie https://localhost:5000
lub na porcie określonym w pliku application.properties
.