Przewodniki

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 JavaNode.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 lub https://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łu webapp. Ten initializer uruchamia serwer Flask i wczytuje opcje konfiguracji określone w config.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: + Katalog java.com.addons.spring zawiera pliki Application.java i Controller.java. Plik Application.java odpowiada za działanie serwera aplikacji, a plik Controller.java obsługuje logikę punktu końcowego. + Katalog resources zawiera katalog templates z plikami HTML i JavaScript. Zawiera on też plik application.properties, który określa port, na którym ma działać serwer, ścieżkę do pliku magazynu kluczy i ścieżkę do katalogu templates. W tym przykładzie plik magazynu kluczy znajduje się w katalogu resources. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby zaktualizować ścieżkę w pliku application.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 to secrets/*.p12 (cel klucza jest omówiony w sekcji poniżej). W przypadku metody 2 i późniejszych wersji musisz też podać ścieżkę do pliku client_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.
    • mvnwmvnw.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.

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:

  1. 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)
    
  2. Zabezpiecz localhost. W argumencie ssl_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)
    
  3. 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.