Ta seria przewodników ilustruje wszystkie elementy działającego dodatku do Google Classroom. Każdy krok przewodnika dotyczy konkretnych koncepcji, które są wdrażane w ramach jednej aplikacji internetowej. Ma ona pomóc Ci w skonfigurowaniu, uruchomieniu i wdrożeniu funkcjonalnego dodatku.
Dodatek musi wchodzić w interakcje z projektem Google Cloud. Jeśli nie znasz Google Cloud, zalecamy przeczytanie przewodników dla początkujących. W konsoli Google Cloud możesz zarządzać danymi logowania, dostępem do interfejsu API i pakietem SDK Google Workspace Marketplace. Więcej informacji o pakiecie SDK Marketplace znajdziesz na stronie przewodnika 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ę.
- Wykonaj wywołania interfejsu API, aby dołączyć dodatek do projektu.
- Spełnij najważniejsze wymagania dotyczące przesyłania dodatków i wymagane funkcje.
W tym przewodniku zakładamy, że znasz podstawy programowania i koncepcje związane z tworzeniem stron internetowych. Zanim zaczniesz korzystać z przewodników, zdecydowanie zalecamy zapoznanie się z przewodnikiem po konfiguracji projektu. Ta strona zawiera ważne szczegóły konfiguracji, które nie są w pełni omówione w przewodnikach.
Przykładowe implementacje
Pełny przykład referencyjny jest dostępny w Python. Częściowe implementacje są też dostępne w językach Java i Node.js. Te implementacje są źródłem przykładowego kodu, który znajdziesz na kolejnych stronach.
Gdzie pobrać
Przykłady w językach Python i Java są dostępne w repozytoriach GitHub:
Przykładowy kod Node.js można pobrać jako plik ZIP:
Wymagania wstępne
Aby przygotować nowy projekt dodatku, zapoznaj się z sekcjami poniżej.
Certyfikat HTTPS
Aplikację możesz hostować w dowolnym środowisku programistycznym, ale dodatek do Classroom jest dostępny tylko w https://
. Dlatego musisz mieć serwer z szyfrowaniem SSL, aby wdrożyć aplikację lub przetestować ją w ramce iframe dodatku.
Możesz używać localhost
z certyfikatem SSL. Jeśli musisz utworzyć certyfikat na potrzeby lokalnego programowania, rozważ użycie mkcert.
Projekt Google Cloud
Musisz skonfigurować projekt Google Cloud, aby można było używać go w tych przykładach. Więcej informacji o niezbędnych krokach znajdziesz w przewodniku tworzenia projektu Google Cloud. W sekcji Konfigurowanie projektu Google Cloud w pierwszym przewodniku znajdziesz też szczegółowe instrukcje dotyczące konfiguracji.
Po zakończeniu pobierz identyfikator klienta OAuth 2.0 jako plik JSON. Musisz dodać ten plik danych logowania do rozpakowanego katalogu z przykładem. Więcej informacji o konkretnych lokalizacjach znajdziesz w sekcji Informacje o plikach.
Dane logowania OAuth
Aby utworzyć nowe dane logowania OAuth:
- Otwórz stronę Dane logowania Google Cloud. Sprawdź, czy u góry ekranu masz wybrany odpowiedni projekt.
- Kliknij UTWÓRZ DANE LOGOWANIA i z 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ę trasy wywołania zwrotnego dla swojej aplikacji. Na przykład
https://my.domain.com/auth-callback
lubhttps://localhost:5000/callback
. Tę ścieżkę utworzysz i obsłużysz w dalszej części tego przewodnika. W każdej chwili możesz edytować takie trasy lub dodawać nowe. - 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 poszczególnych języków
Najnowszą listę wymagań wstępnych znajdziesz w pliku README w każdym repozytorium.
Python
W naszym przykładzie w Pythonie używamy platformy Flask. Pełny kod źródłowy możesz pobrać z podanych linków.
W razie potrzeby zainstaluj Pythona w wersji 3.7 lub nowszej i upewnij się, że dostępny jest znak pip
.
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 przewodnikami w pobranych przykładach znajduje się plik requirements.txt
. Wymagane biblioteki możesz szybko zainstalować za pomocą polecenia
pip
. Aby zainstalować biblioteki wymagane w pierwszym przewodniku, użyj tych poleceń.
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Nasz przykład w Node.js korzysta z architektury Express. Pełny kod źródłowy możesz pobrać 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
W naszym przykładzie w Javie używamy platformy Spring Boot. Pełny kod źródłowy możesz pobrać z podanych linków.
Zainstaluj Java 11 lub nowszą, jeśli nie masz jej jeszcze 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 wrapper Maven, który zapewnia pomyślne kompilowanie bez konieczności instalowania samego narzędzia Maven.
W katalogu, w którym masz pobrany lub sklonowany projekt, uruchom te polecenia, aby sprawdzić, czy masz wymagania wstępne do uruchomienia projektu.
java --version
./mvnw --version
W systemie Windows:
java -version
mvnw.cmd --version
Informacje o plikach
W sekcjach poniżej opisujemy układ przykładowych katalogów.
Nazwy katalogów
Każde repozytorium zawiera kilka katalogów, których nazwy zaczynają się od cyfry, np. /01-basic-app/
. Liczby odpowiadają konkretnym krokom instrukcji.
Każdy katalog zawiera w pełni funkcjonalną aplikację internetową, która implementuje funkcje opisane w danym przewodniku. Na przykład katalog /01-basic-app/
zawiera ostateczną implementację przewodnika Tworzenie dodatku.
Zawartość 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 w Pythonie. W tym pliku określ konfigurację serwera, której chcesz używać, a następnie uruchom go, aby rozpocząć działanie serwera.requirements.txt
– moduły Pythona wymagane do uruchomienia 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 to uwzględnione w przykładzie archiwum. Musisz zmienić nazwę pobranego pliku z danymi logowania i skopiować go do każdego katalogu głównego.
config.py
– opcje konfiguracji serwera Flask.webapp
katalog zawiera treści aplikacji internetowej. Obejmuje to:Katalog
/templates/
z szablonami Jinja dla różnych stron.Katalog
/static/
z obrazami, plikami CSS i pomocniczymi plikami JavaScript.routes.py
– metody obsługi tras aplikacji internetowej.__init__.py
– inicjator modułuwebapp
. Ten inicjator uruchamia serwer Flask i wczytuje opcje konfiguracji ustawione wconfig.py
.Dodatkowe pliki wymagane w ramach danego kroku przewodnika.
Node.js
Każdy krok instrukcji znajdziesz w osobnym podfolderze.<step>
Każdy krok zawiera:
- Pliki statyczne, takie jak JavaScript, CSS i obrazy, znajdują się w folderze
./<step>/public
. - Routery ekspresowe znajdują się w folderach
./<step>/routes
. - Szablony HTML znajdują się w folderach
./<step>/views
. - Aplikacja serwera to
./<step>/app.js
.
Java
Katalog projektu zawiera te elementy:
- Katalog
src.main
zawiera kod źródłowy i konfigurację umożliwiające prawidłowe uruchomienie aplikacji. Ten katalog zawiera:java.com.addons.spring
– katalog zawierający plikiApplication.java
iController.java
. PlikApplication.java
odpowiada za uruchamianie serwera aplikacji, a plikController.java
obsługuje logikę punktu końcowego. +resources
zawiera katalogtemplates
z plikami HTML i JavaScript. Zawiera 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
. Ten przykład zawiera plik magazynu kluczy w kataloguresources
. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby odpowiednio zaktualizować ścieżkę w plikuapplication.properties
.- Plik
pom.xml
zawiera informacje potrzebne do utworzenia projektu i określenia wymaganych zależności. .gitignore
zawiera nazwy plików, których nie należy przesyłać do Gita. Pamiętaj, aby dodać ścieżkę do magazynu kluczy w tym miejscu:.gitignore
. W podanym przykładzie jest tosecrets/*.p12
(cel użycia magazynu kluczy omówimy w sekcji poniżej). W przypadku instrukcji 2 i kolejnych podaj też ścieżkę do plikuclient_secret.json
, aby mieć pewność, że nie uwzględnisz w zdalnym repozytorium swoich informacji poufnych. W przypadku instrukcji 3 i kolejnych należy dodać ścieżkę do pliku bazy danych H2 i fabryki magazynu danych. Więcej informacji o konfigurowaniu tych magazynów danych znajdziesz w trzecim przewodniku dotyczącym obsługi powracających wizyt.mvnw
imvnw.cmd
to pliki wykonywalne narzędzia Maven Wrapper dla systemów Unix i Windows. Na przykład uruchomienie polecenia./mvnw --version
w systemie Unix spowoduje wyświetlenie wersji Apache Maven i innych informacji.- Katalog
.mvn
zawiera konfigurację narzędzia Maven Wrapper.
- Plik
Uruchamianie przykładowego serwera
Aby przetestować serwer, musisz go uruchomić. Aby uruchomić przykładowy serwer w wybranym języku, postępuj zgodnie z tymi instrukcjami:
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 uruchamiającego serwer aplikacji.
Konfigurowanie serwera
Serwer internetowy możesz uruchomić na kilka sposobów. Na końcu pliku Pythona dodaj jeden z tych wierszy:
Niezabezpieczone
localhost
. Pamiętaj, że ta opcja nadaje się tylko do bezpośredniego testowania w oknie przeglądarki. Niezabezpieczonych domen nie można wczytać w elemencie iframe dodatku do 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
Musisz określić krotkę plików kluczy SSL dla argumentussl_context
.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 serwera gotowego do wdrożenia w środowisku produkcyjnym lub wdrożenia w chmurze. 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ę w Pythonie, 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ć certyfikat własny, który będzie używany do uruchamiania aplikacji przez HTTPS. Te dane logowania powinny zostać zapisane jako sslcert/cert.pem
i sslcert/key.pem
w folderze głównym repozytorium. Aby przeglądarka je zaakceptowała, może być konieczne dodanie tych kluczy do łańcucha kluczy systemu operacyjnego.
Upewnij się, że w pliku *.pem
znajduje się .gitignore
, ponieważ nie chcesz zatwierdzać pliku w systemie Git.
Uruchamianie serwera
Aplikację możesz uruchomić za pomocą tego polecenia, zastępując step01
prawidłowym 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 zakończyć działanie serwera, wpisując w terminalu Control + C
.
Java
Konfigurowanie serwera
Aby uruchomić serwer przez HTTPS, musisz utworzyć certyfikat własny, który będzie używany do uruchamiania aplikacji przez HTTPS.
Do programowania lokalnego możesz użyć narzędzia mkcert. Po zainstalowaniu mkcert
te polecenia wygenerują lokalnie przechowywany certyfikat do uruchamiania przez HTTPS.
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
W tym przykładzie plik magazynu kluczy znajduje się w katalogu zasobów. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby odpowiednio zaktualizować ścieżkę w pliku application.properties
. Nazwa domeny to domena, w której prowadzisz projekt (np. localhost
).
Upewnij się, że w pliku *.p12
znajduje się .gitignore
, ponieważ nie chcesz zatwierdzać pliku w systemie Git.
Uruchamianie serwera
Uruchom serwer, wykonując metodę main
w pliku Application.java
. Na przykład w IntelliJ możesz kliknąć prawym przyciskiem myszy Application.java
> Run 'Application'
w katalogu src/main/java/com/addons/spring
lub otworzyć plik Application.java
, aby 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 https://localhost:5000
lub na porcie określonym w application.properties
.