Schritt-für-Schritt-Anleitungen

In dieser Reihe von Anleitungen werden alle Komponenten eines funktionierenden Classroom-Add-ons veranschaulicht. Jeder Schritt der Anleitung behandelt bestimmte Konzepte und implementiert sie in einer einzelnen Webanwendung. Ziel ist es, Sie bei der Einrichtung, Konfiguration und Einführung eines funktionsfähigen Add-ons zu unterstützen.

Ihr Add-on muss mit einem Google Cloud-Projekt interagieren. Wenn Sie mit Google Cloud noch nicht vertraut sind, empfehlen wir Ihnen, die Leitfäden für die ersten Schritte zu lesen. Sie verwalten Anmeldedaten, API-Zugriff und das Google Workspace Marketplace SDK in der Google Cloud Console. Weitere Informationen zum Marketplace SDK finden Sie auf der Hilfeseite Google Workspace Marketplace-Eintrag.

In dieser Anleitung werden folgende Themen behandelt:

  • Mit Google Cloud eine Seite erstellen, die in einem iFrame in Classroom angezeigt werden soll
  • Fügen Sie die Google-Einmalanmeldung (SSO) hinzu und ermöglichen Sie Nutzern, sich anzumelden.
  • API-Aufrufe ausführen, um Ihr Add-on an eine Aufgabe anzuhängen
  • Erfüllen Sie die wichtigsten Anforderungen für die Add-on-Einreichung und die erforderlichen Funktionen.

In diesem Leitfaden wird davon ausgegangen, dass Sie mit der Programmierung und den grundlegenden Konzepten der Webentwicklung vertraut sind. Wir empfehlen Ihnen dringend, den Leitfaden zur Projektkonfiguration zu lesen, bevor Sie mit den Anleitungen beginnen. Diese Seite enthält wichtige Konfigurationsdetails, die in den Anleitungen nicht vollständig behandelt werden.

Beispielimplementierungen

Ein vollständiges Referenzbeispiel ist in Python verfügbar. Teilimplementierungen sind auch in Java und Node.js verfügbar. Diese Implementierungen sind die Quellen des Beispielcodes auf den folgenden Seiten.

Wo kann ich die App herunterladen?

Die Python- und Java-Beispiele sind in GitHub-Repositories verfügbar:

Das Node.js-Beispiel kann als ZIP-Datei heruntergeladen werden:

Vorbereitung

In den folgenden Abschnitten erfahren Sie, wie Sie ein neues Add-on-Projekt vorbereiten.

HTTPS-Zertifikat

Sie können Ihre App zwar in jeder Entwicklungsumgebung hosten, Ihr Classroom-Add-on ist jedoch nur über https:// verfügbar. Daher benötigen Sie einen Server mit SSL-Verschlüsselung, um Ihre App bereitzustellen oder im Add-on-iFrame zu testen.

Es ist möglich, localhost mit einem SSL-Zertifikat zu verwenden. Wenn Sie ein Zertifikat für die lokale Entwicklung erstellen müssen, sollten Sie mkcert in Betracht ziehen.

Google Cloud-Projekt

Sie müssen ein Google Cloud-Projekt für die Verwendung mit diesen Beispielen konfigurieren. Eine Übersicht über die erforderlichen Schritte für den Einstieg finden Sie im Leitfaden Google Cloud-Projekt erstellen. Im Abschnitt Google Cloud-Projekt einrichten im ersten Walkthrough werden auch die spezifischen Konfigurationsaktionen beschrieben, die erforderlich sind.

Laden Sie die OAuth 2.0-Client-ID als JSON-Datei herunter. Sie müssen diese Anmeldedatendatei dem entzippten Beispielverzeichnis hinzufügen. Weitere Informationen zu den einzelnen Standorten finden Sie unter Dateien verstehen.

OAuth-Anmeldedaten

So erstellen Sie neue OAuth-Anmeldedaten:

  • Rufen Sie die Seite Google Cloud-Anmeldedaten auf. Achten Sie darauf, dass oben auf dem Bildschirm das richtige Projekt ausgewählt ist.
  • Klicken Sie auf ANMELDEDATEN ERSTELLEN und wählen Sie im Drop-down-Menü OAuth-Client-ID aus.
  • Gehen Sie auf der nächsten Seite so vor:
    • Legen Sie den Anwendungstyp auf Webanwendung fest.
    • Klicken Sie unter Autorisierte Weiterleitungs-URIs auf URI HINZUFÜGEN. Fügen Sie den vollständigen Pfad für eine Callback-Route für Ihre Anwendung hinzu. Beispiel: https://my.domain.com/auth-callback oder https://localhost:5000/callback. Sie erstellen und verarbeiten diese Route später in dieser Anleitung. Sie können solche Routen jederzeit bearbeiten oder weitere hinzufügen.
    • Klicken Sie auf ERSTELLEN.
  • Anschließend wird ein Dialogfeld mit den neu erstellten Anmeldedaten angezeigt. Wählen Sie die Option JSON HERUNTERLADEN aus. Kopieren Sie die heruntergeladene JSON-Datei in Ihr Serververzeichnis.

Sprachspezifische Voraussetzungen

Die aktuelle Liste der Voraussetzungen finden Sie in der README-Datei des jeweiligen Repositorys.

Python

In unserem Python-Beispiel wird das Flask-Framework verwendet. Sie können den vollständigen Quellcode über die bereitgestellten Links herunterladen.

Installieren Sie bei Bedarf Python 3.7+ und sorgen Sie dafür, dass pip verfügbar ist.

python3 -m ensurepip --upgrade

Wir empfehlen außerdem, eine neue virtuelle Python-Umgebung einzurichten und zu aktivieren.

python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate

In jedem Unterverzeichnis für die Anleitungen in den heruntergeladenen Beispielen befindet sich eine requirements.txt. Sie können die erforderlichen Bibliotheken schnell mit pip installieren. Verwenden Sie die folgenden Befehle, um die erforderlichen Bibliotheken für den ersten Walkthrough zu installieren.

cd flask/01-basic-app
pip install -r requirements.txt

Node.js

In unserem Node.js-Beispiel wird das Express-Framework verwendet. Sie können den vollständigen Quellcode über die bereitgestellten Links herunterladen.

Für dieses Beispiel ist Node.js v16.13 oder höher erforderlich.

Installieren Sie die erforderlichen Knotenmodule mit npm.

npm install

Java

In unserem Java-Beispiel wird das Spring Boot-Framework verwendet. Sie können den vollständigen Quellcode über die bereitgestellten Links herunterladen.

Installieren Sie Java 11+, falls es noch nicht auf Ihrem Computer installiert ist.

Spring Boot-Anwendungen können Gradle oder Maven zum Verarbeiten von Builds und zum Verwalten von Abhängigkeiten verwenden. Dieses Beispiel enthält den Maven-Wrapper, der einen erfolgreichen Build ermöglicht, ohne dass Sie Maven selbst installieren müssen.

Führen Sie im Verzeichnis, in dem Sie das Projekt heruntergeladen oder geklont haben, die folgenden Befehle aus, um sicherzustellen, dass Sie die Voraussetzungen für die Ausführung des Projekts erfüllen.

java --version
./mvnw --version

Auf Windows:

java -version
mvnw.cmd --version

Dateien verstehen

In den folgenden Abschnitten wird das Layout der Beispielverzeichnisse beschrieben.

Verzeichnisnamen

Jedes Repository enthält mehrere Verzeichnisse, deren Namen mit einer Zahl beginnen, z. B. /01-basic-app/. Die Zahlen entsprechen bestimmten Schritten der Anleitung. Jedes Verzeichnis enthält eine voll funktionsfähige Web-App, die die in einem bestimmten Walkthrough beschriebenen Funktionen implementiert. Das Verzeichnis /01-basic-app/ enthält beispielsweise die endgültige Implementierung für die Anleitung Add-on erstellen.

Verzeichnisinhalt

Der Inhalt des Verzeichnisses variiert je nach Implementierungssprache:

Python

  • Das Stammverzeichnis enthält die folgenden Dateien:

    • main.py: Der Einstiegspunkt der Python-Anwendung. Geben Sie die Serverkonfiguration an, die Sie in dieser Datei verwenden möchten, und führen Sie sie dann aus, um den Server zu starten.
    • requirements.txt: Die Python-Module, die zum Ausführen der Web-App erforderlich sind. Diese können automatisch mit pip install -r requirements.txt installiert werden.
    • client_secret.json: die Clientschlüsseldatei, die von Google Cloud heruntergeladen wurde. Diese Datei ist nicht im Beispielarchiv enthalten. Sie sollten die heruntergeladene Datei mit den Anmeldedaten umbenennen und in jedes Stammverzeichnis kopieren.

  • config.py – Konfigurationsoptionen für den Flask-Server.

  • Das Verzeichnis webapp enthält die Inhalte für die Webanwendung. Folgende Angaben sind enthalten:

  • Das Verzeichnis /templates/ mit Jinja-Vorlagen für verschiedene Seiten.

  • Das Verzeichnis /static/ mit Bildern, CSS und zusätzlichen JavaScript-Dateien.

  • routes.py: die Handler-Methoden für die Routen der Webanwendung.

  • __init__.py: Der Initialisierer für das Modul webapp. Mit diesem Initialisierer wird der Flask-Server gestartet und die in config.py festgelegten Konfigurationsoptionen werden geladen.

  • Zusätzliche Dateien, die für einen bestimmten Schritt der Anleitung erforderlich sind.

Node.js

Jeder Schritt des Walkthroughs befindet sich in einem eigenen Unterordner <step>. Jeder Schritt enthält:

  • Statische Dateien wie JavaScript, CSS und Bilder befinden sich im Ordner ./<step>/public.
  • Express-Router befinden sich in den ./<step>/routes-Ordnern.
  • HTML-Vorlagen befinden sich in den ./<step>/views-Ordnern.
  • Die Serveranwendung ist ./<step>/app.js.

Java

Das Projektverzeichnis enthält Folgendes:

  • Das Verzeichnis src.main enthält den Quellcode und die Konfiguration, die für die erfolgreiche Ausführung der Anwendung erforderlich sind. Dieses Verzeichnis enthält Folgendes: + Das Verzeichnis java.com.addons.spring enthält die Dateien Application.java und Controller.java. Die Datei Application.java ist für die Ausführung des Anwendungsservers verantwortlich, während die Datei Controller.java die Endpunktlogik verarbeitet. + Das Verzeichnis resources enthält das Verzeichnis templates mit HTML- und JavaScript-Dateien. Sie enthält auch die Datei application.properties, in der der Port zum Ausführen des Servers, der Pfad zur Keystore-Datei und der Pfad zum Verzeichnis templates angegeben sind. In diesem Beispiel ist die Keystore-Datei im Verzeichnis resources enthalten. Sie können sie an einem beliebigen Ort speichern, müssen aber darauf achten, dass Sie die Datei application.properties entsprechend aktualisieren.
    • pom.xml enthält die Informationen, die zum Erstellen des Projekts und zum Definieren der erforderlichen Abhängigkeiten benötigt werden.
    • .gitignore enthält Dateinamen, die nicht in Git hochgeladen werden sollten. Achten Sie darauf, dass Sie den Pfad zu Ihrem Keystore in diesem .gitignore hinzufügen. Im bereitgestellten Beispiel ist das secrets/*.p12. Der Zweck des Keystores wird im Abschnitt unten erläutert. Ab Walkthrough 2 sollten Sie auch den Pfad zu Ihrer client_secret.json-Datei angeben, damit Ihre vertraulichen Informationen nicht in einem Remote-Repository enthalten sind. Ab Walkthrough 3 sollten Sie den Pfad zur H2-Datenbankdatei und zur Factory für den Dateidatenspeicher hinzufügen. Weitere Informationen zum Einrichten dieser Datenspeicher finden Sie im dritten Walkthrough zum Umgang mit wiederholten Besuchen.
    • mvnw und mvnw.cmd sind die ausführbaren Maven-Wrapper für Unix bzw. Windows. Wenn Sie beispielsweise ./mvnw --version unter Unix ausführen, wird unter anderem die Apache Maven-Version ausgegeben.
    • Das Verzeichnis .mvn enthält die Konfiguration für den Maven-Wrapper.

Beispielserver ausführen

Sie müssen Ihren Server starten, um ihn zu testen. So führen Sie den Beispielserver in der gewünschten Sprache aus:

Python

OAuth-Anmeldedaten

Erstellen und laden Sie Ihre OAuth-Anmeldedaten herunter, wie oben beschrieben. Platzieren Sie die JSON-Datei im Stammverzeichnis neben der Serverstartdatei Ihrer Anwendung.

Server konfigurieren

Für den Webserver gibt es mehrere Optionen. Fügen Sie am Ende Ihrer Python-Datei einen der folgenden Einträge hinzu:

  1. Ungesichertes localhost. Diese Methode eignet sich nur für direkte Tests in einem Browserfenster. Unsichere Domains können nicht im Classroom-Add-on-iFrame geladen werden.

    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. localhost sperren Sie müssen ein Tupel von SSL-Schlüsseldateien für das Argument ssl_context angeben.

    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. Gunicorn-Server. Dies eignet sich für einen produktionsbereiten Server oder eine Cloud-Bereitstellung. Wir empfehlen, eine Umgebungsvariable PORT für die Verwendung mit dieser Startoption festzulegen.

    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")
    

Server starten

Führen Sie Ihre Python-Anwendung aus, um den Server wie im vorherigen Schritt konfiguriert zu starten.

python main.py

Klicken Sie auf die angezeigte URL, um Ihre Web-App in einem Browser aufzurufen und zu prüfen, ob sie richtig ausgeführt wird.

Node.js

Server konfigurieren

Damit der Server über HTTPS ausgeführt werden kann, müssen Sie ein selbstsigniertes Zertifikat erstellen, das zum Ausführen der Anwendung über HTTPS verwendet wird. Diese Anmeldedaten sollten als sslcert/cert.pem und sslcert/key.pem im Stammordner des Repositorys gespeichert werden. Möglicherweise müssen Sie diese Schlüssel Ihrem Betriebssystem-Schlüsselbund hinzufügen, damit Ihr Browser sie akzeptiert.

Achten Sie darauf, dass *.pem in Ihrer .gitignore-Datei enthalten ist, da Sie die Datei nicht in Git übertragen möchten.

Server starten

Sie können die Anwendung mit dem folgenden Befehl ausführen. Ersetzen Sie step01 durch den richtigen Schritt, den Sie als Server ausführen möchten (z. B. step01 für 01-basic-app und step02 für 02-sign-in).

npm run step01

oder

npm run step02

Dadurch wird der Webserver unter https://localhost:5000 gestartet.

Sie können den Server mit Control + C in Ihrem Terminal beenden.

Java

Server konfigurieren

Damit der Server über HTTPS ausgeführt werden kann, müssen Sie ein selbstsigniertes Zertifikat erstellen, das zum Ausführen der Anwendung über HTTPS verwendet wird.

Für die lokale Entwicklung empfiehlt sich die Verwendung von mkcert. Nachdem Sie mkcert installiert haben, wird mit den folgenden Befehlen ein lokal gespeichertes Zertifikat für die Ausführung über HTTPS generiert.

mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>

In diesem Beispiel ist die Keystore-Datei im Ressourcenverzeichnis enthalten. Sie können sie an einem beliebigen Ort speichern, müssen aber den Pfad in der Datei application.properties entsprechend aktualisieren. Der Domainname ist die Domain, auf der Sie das Projekt ausführen (z. B. localhost).

Achten Sie darauf, dass *.p12 in Ihrer .gitignore-Datei enthalten ist, da Sie die Datei nicht in Git übertragen möchten.

Server starten

Starten Sie den Server, indem Sie die Methode main in der Datei Application.java ausführen. In IntelliJ können Sie beispielsweise entweder mit der rechten Maustaste auf Application.java > Run 'Application' im Verzeichnis src/main/java/com/addons/spring klicken oder die Datei Application.java öffnen und auf den grünen Pfeil links neben der Methodensignatur main(String[] args) klicken. Alternativ können Sie das Projekt in einem Terminalfenster ausführen:

./mvnw spring-boot:run

Unter Windows:

mvnw.cmd spring-boot:run

Dadurch wird der Server unter https://localhost:5000 oder an dem Port gestartet, den Sie in application.properties angegeben haben.