Externe Anhänge und abgeben

Dies ist die siebte Schritt-für-Schritt-Anleitung der Reihe zu Classroom-Add-ons.

In dieser Schritt-für-Schritt-Anleitung fügen Sie einer Webanwendung Verhalten hinzu, um Add-on-Anhänge außerhalb von Google Classroom zu erstellen. Verwenden Sie dieses Verhalten, damit Ihre Nutzer Add-on-Anhänge von Ihrem vorhandenen Produkt oder Ihrer Website erstellen können. Dies ist auch eine große Ergänzung zur CourseWork-Integration, da Sie bestehenden Traffic an die verbesserte Nutzererfahrung Ihres Add-ons weiterleiten, ohne den Ablauf zu ändern. Wie das geht, erfahren Sie auf der Seite Anhänge außerhalb von Classroom erstellen.

Außerdem haben Sie die Möglichkeit, eine Verhaltensweise für das Add-on festzulegen, damit eine Zuweisung mit Add-on-Anhängen programmatisch geändert werden kann. Sie können jede Aufgabe mit einem Ihrer Add-on-Anhänge ändern, unabhängig davon, wer die Aufgabe erstellt hat. Das ist besonders nützlich, wenn Sie Aufgaben abgeben möchten, nachdem ein Schüler oder Student eine Aktivität abgeschlossen hat, und der Lehrkraft signalisieren, dass die zugewiesenen Aufgaben erledigt sind und die Arbeit des Schülers/Studenten zur Überprüfung bereit ist.

Sie erweitern die endgültige Version Ihres Add-ons, die Anhänge vom Typ „Inhaltstyp“ oder Anhänge vom Typ „Aktivität“ unterstützt. In diesem Leitfaden wird der Anhang des Inhaltstyps verwendet.

OAuth-Bereich für die Zuweisungsverwaltung hinzufügen

Achten Sie darauf, dass Ihre Anwendung die folgenden Bereiche anfordert:

  • https://www.googleapis.com/auth/classroom.addons.teacher
  • https://www.googleapis.com/auth/classroom.addons.student
  • https://www.googleapis.com/auth/classroom.coursework.students

Der Bereich classroom.coursework.students wurde zuvor nicht benötigt und dient zum Erstellen oder Ändern von CourseWork-Zuweisungen. Fügen Sie diesen Bereich den Bereichslisten im Google Workspace Marketplace SDK, im OAuth-Zustimmungsbildschirm und im Servercode Ihres Cloud-Projekts hinzu.

Python

  SCOPES = [
    "https://www.googleapis.com/auth/classroom.addons.teacher",
    "https://www.googleapis.com/auth/classroom.addons.student",
    "https://www.googleapis.com/auth/classroom.coursework.students",
  ]

Aufgaben in Classroom erstellen

Schaltflächen zu einer Webseite ohne iFrame hinzufügen

Mit dem in dieser Schritt-für-Schritt-Anleitung beschriebenen Ablauf können Nutzer Google Classroom-Aufgaben und -Anhänge über ein Drittanbieter-Produkt erstellen. In der Praxis ist das wahrscheinlich Ihre bestehende Website oder Anwendung. Für dieses Beispiel müssen Sie eine simulierte Webseite als externe Website erstellen. Sie benötigen eine Schaltfläche oder einen Link, der beim Anklicken eine neue Route öffnet, die den vorgeschlagenen CourseWork-Vorgang ausführt, um eine neue Zuweisung zu erstellen.

Sie müssen auch eine Schaltfläche oder einen Link hinzufügen, damit sich der Nutzer anmelden kann, falls Sie noch keine haben. Für die nachfolgenden API-Anfragen sind Nutzeranmeldedaten erforderlich, sodass der OAuth 2.0-Handshake abgeschlossen werden muss. Weitere Informationen findest du in der Schritt-für-Schritt-Anleitung zur Anmeldung.

Python

Im angegebenen Python-Beispiel wird die /index-Route geändert, die im ersten Schritt der Schritt-für-Schritt-Anleitung vorgestellt wurde.

<!-- /webapp/templates/index.html -->
<a href="clear-credentials.html">Logout</a>
<a href="start-auth-flow.html">Login</a>

<br>

<a href="create-coursework-assignment.html">Create a CourseWork Assignment</a>

Fügen Sie eine HTML-Vorlage hinzu, um ein Ziel auf Ihrer Website darzustellen. Auf dieser Seite finden Sie die Inhalte, die an Ihre CourseWork-Aufgabe angehängt werden.

<!-- /webapp/templates/example-coursework-assignment.html -->
<h1>CourseWork assignment loaded!</h1>
<p>You've loaded a CourseWork assignment! It was created from an external web page.</p>

Erstellen Sie eine neue Python-Moduldatei, um die mit dem Kurs verbundenen Routen zu verarbeiten. Dies ist in unserem Beispiel coursework_routes.py. Fügen Sie die folgenden drei Routen hinzu. Einige Inhalte werden später ausgefüllt.

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """

  # Check that the user is signed in. If not, perform the OAuth 2.0
  # authorization flow.
  credentials = get_credentials()

  if not credentials:
    return start_auth_flow("coursework_assignment_callback")

  # Construct the Google Classroom service.
  classroom_service = get_classroom_service()

  pass  # To be completed later.

@app.route("/example-coursework-assignment/<assignment_type>")
def example_coursework_assignment(assignment_type):
  """
  Renders the "example-coursework-assignment.html" template.
  """
  return flask.render_template(
      "example-coursework-assignment.html", assignment_type=assignment_type
  )

@app.route("/coursework-assignment-callback")
def coursework_assignment_callback():
  """
  Completes the OAuth 2.0 handshake and stores credentials in the session.
  This is identical to the callback introduced in the sign-in walkthrough,
  but redirects the user to the index page instead of the attachment
  discovery page.
  """
  flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
      CLIENT_SECRETS_FILE,
      scopes=SCOPES,
      state=flask.session["state"],
      redirect_uri=flask.url_for("coursework_assignment_callback", _external=True),
  )

  flow.fetch_token(authorization_response=flask.request.url)

  credentials = flow.credentials
  flask.session["credentials"] = session_credentials_to_dict(
      credentials
  )

  # Close the current window and redirect the user to the index page.
  return flask.render_template("close-me.html", redirect_destination="index")

Prüfen, ob ein Nutzer die Berechtigung zum Erstellen von Add-ons hat

Ein Nutzer muss mehrere Voraussetzungen erfüllen, bevor Sie Add-on-Anhänge in seinem Namen erstellen können. Der Einfachheit halber stellt Google die Methode courses.checkAddOnCreationEligibility bereit, mit der ermittelt werden kann, ob ein Nutzer diese Voraussetzungen erfüllt. Ein Nutzer, der die Voraussetzungen erfüllt, wird als berechtigter Nutzer bezeichnet.

Fügen Sie der Implementierung der CourseWork-Erstellungsroute die Berechtigungsprüfung hinzu. Testen Sie dann das Feld isCreateAttachmentEligible in der Antwort. Folgen Sie für berechtigte Nutzer der Logik zum Erstellen einer Zuweisung mit Add-on-Anhang. Erstellen Sie andernfalls ein Linkmaterial. Sie müssen die ID des Kurses kennen, in dem der Nutzer eine Aufgabe erstellen möchte. Normalerweise wird der Nutzer aufgefordert, einen Kurs anzugeben. Der Einfachheit halber verwenden wir in diesem Beispiel einen hartcodierten Wert.

Python

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """
  # ... Check that the user is signed in and get the Classroom service ...

  # The ID of the course to which the assignment will be added.
  course_id = 1234567890  # TODO(developer) Replace with an actual course ID.

  # Check whether the user can create add-on attachments.
  eligibility_response = (
      classroom_service.courses()
      .checkAddOnCreationEligibility(courseId=course_id)
      .execute()
  )
  is_create_attachment_eligible = eligibility_response.get("isCreateAttachmentEligible")

  if is_create_attachment_eligible:
    # See the "Create an assignment with add-on attachment for eligible users" section for implementation.
  if not is_create_attachment_eligible:
    # See the "Create a Link Material" section for implementation.

Aufgaben mit Add-on-Anhang für berechtigte Nutzer erstellen

Wenn der Nutzer zum Erstellen von Add-on-Anhängen berechtigt ist, gehen Sie so vor:

  1. Senden Sie eine API-Anfrage, um eine courseWork-Aufgabe in Google Classroom ohne Anhänge zu erstellen.
  2. Extrahieren Sie die id der neu erstellten Aufgabe.
  3. Erstellen Sie ein neues CourseWork-AddOnAttachment.
  4. Senden Sie eine Anfrage zum Erstellen eines Add-on-Anhangs für die neu erstellte Aufgabe in Google Classroom.

Python

# /webapp/coursework_routes.py
if is_create_attachment_eligible:
  # Create an assignment.
  coursework = {
      "title": "My CourseWork Assignment with Add-on Attachment",
      "description": "Created using the Classroom CourseWork API.",
      "workType": "ASSIGNMENT",
      "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
  }

  # Issue a request to create the assignment.
  create_assignment_response = (
      classroom_service.courses()
      .courseWork()
      .create(courseId=course_id, body=coursework)
      .execute()
  )

  # Create an add-on attachment that links to the selected content and
  # associate it with the new assignment.
  content_url = flask.url_for(
      "example_coursework_assignment",
      assignment_type="add-on-attachment",
      _scheme="https",
      _external=True,
  )

  # Construct an AddOnAttachment instance.
  attachment = {
      "teacherViewUri": {"uri": content_url},
      "studentViewUri": {"uri": content_url},
      "title": f'Test Attachment for Assignment {create_assignment_response.get("id")}',
  }

  # Issue a request to create the attachment.
  add_on_attachment_response = (
      classroom_service.courses()
      .courseWork()
      .addOnAttachments()
      .create(
          courseId=course_id,
          itemId=create_assignment_response.get("id"),  # ID of the new assignment.
          body=attachment,
      )
      .execute()
  )

Wenn der Nutzer nicht berechtigt ist, Add-on-Anhänge zu erstellen, erstellen Sie stattdessen ein Linkmaterial. Gehen Sie dazu so vor:

Python

if not is_create_attachment_eligible:
    coursework = {
        "title": "My CourseWork Assignment with Link Material",
        "description": "Created using the Classroom CourseWork API.",
        "workType": "ASSIGNMENT",
        "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
        # Specify the URL for your content as a Link Material.
        "materials": [
            {
                "link": {
                    "url": flask.url_for(
                        "example_coursework_assignment",
                        assignment_type="link-material",
                        _scheme="https",
                        _external=True,
                    )
                }
            }
        ],
    }

    # Issue a request to create the assignment.
    assignment_response = (
        classroom_service.courses()
        .courseWork()
        .create(courseId=course_id, body=coursework)
        .execute()
    )

Bereits erstellte Aufgaben ändern

Sie können auf alle Google Classroom-Stream-Elemente, die mindestens einen Ihrer Add-on-Anhänge haben, zugreifen, sie ändern, abgeben, zurückfordern oder zurückgeben. Dabei spielt es keine Rolle, wer das Stream-Element erstellt hat. Stream-Elemente sind Announcement-, CourseWork- oder CourseWorkMaterial-Aufgaben.

Dazu fügen Sie eine Route hinzu, über die ein bestimmtes Streamelement geändert werden kann. Mit dieser Methode können Sie prüfen, ob Sie auf Streamelemente zugreifen können, die Sie mit der API erstellt und von einer Lehrkraft über die Google Classroom-UI erstellt haben.

Fügen Sie der Webseite, die Sie in dieser Schritt-für-Schritt-Anleitung zuerst bearbeitet haben, einen weiteren Link oder eine weitere Schaltfläche hinzu. Es sollte eine neue Route geöffnet werden, um eine CourseWork-Zuweisung zu ändern.

Python

Im angegebenen Python-Beispiel wird die /index-Route geändert, die zuvor in dieser Schritt-für-Schritt-Anleitung geändert wurde.

<!-- /webapp/templates/index.html -->
<a href="modify-coursework-assignment.html">Create a CourseWork Assignment</a>

Erstellen Sie eine neue Route für die mit dem Kurs verbundenen Routen. Sie befindet sich in unserem Beispiel in der Datei coursework_routes.py.

# Check that the user is signed in.
credentials = get_credentials()

if not credentials:
  return start_auth_flow("coursework_assignment_callback")

# Get the Google Classroom service.
classroom_service = get_classroom_service()

# The ID of the course to which the assignment will be added.
# Ordinarily, you'll prompt the user to specify which course to use. For
# simplicity, we use a hard-coded value in this example.
course_id = 1234567890  # TODO(developer) Replace with an actual course ID.
assignment_id = 1234567890  # TODO(developer) Replace with an actual assignment ID.

# Retrieve details about the CourseWork assignment.
get_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .get(courseId=course_id, id=assignment_id)
    .execute()
)

# Alter the current title.
assignment_title = f"{get_coursework_response.get('title')} (Modified by API request)"

# Issue a request to modify the assignment.
modify_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .patch(
        courseId=course_id,
        id=assignment_id,
        updateMask="title",
        body={"title": assignment_title},
    )
    .execute()
)

Add-on testen

Der Einfachheit halber werden in den bereitgestellten Beispielen hartcodierte Kurs- und Zuweisungs-IDs verwendet. Sie erhalten diese Kennungen, indem Sie Anfragen mit Anmeldedaten von Lehrkräften an die Methoden get und list der Ressourcen courses und courseWork senden. Sie werden auch in der Antwort zurückgegeben, wenn courseWork-Zuweisungen erstellt werden.

Führen Sie Ihren Server aus, rufen Sie die Indexseite auf und melden Sie sich als Lehrkraft ohne Lizenz für Google Workspace for Education Teaching & Learning oder Plus an. Sie können den Lizenzstatus eines Nutzers über die Admin-Konsole Ihrer Testdomain umschalten. Klicken Sie auf die Schaltfläche Create a CourseWork Assignment (Kursaufgaben-Aufgabe erstellen). Öffnen Sie dann die Google Classroom-Benutzeroberfläche und prüfen Sie, ob eine Aufgabe mit einem Link Material-Anhang erstellt wurde. Der Anhang sollte den Titel der verlinkten Webseite und eine URL enthalten.

Erstellen von Add-on-Anhängen testen

Kehren Sie zur Indexseite zurück und melden Sie sich als Lehrkraft mit einer Google Workspace for Education-Lizenz für Teaching & Learning oder Google Plus an. Klicken Sie auf die Schaltfläche Kurswork-Aufgabe erstellen. Öffnen Sie dann die Google Classroom-Benutzeroberfläche und prüfen Sie, ob eine Aufgabe mit einem Add-on-Anhang erstellt wurde. Der Anhang sollte den Namen Ihrer Add-on-Anwendung und den im Code angegebenen Titel enthalten.

Änderung der Testzuweisung

Kehren Sie zur Indexseite zurück und prüfen Sie, ob Sie als Lehrkraft mit einer Teaching & Learning- oder Plus-Lizenz angemeldet sind. Klicken Sie auf die Schaltfläche Kurswork-Aufgabe ändern, kehren Sie zur Google Classroom-Benutzeroberfläche zurück und prüfen Sie, ob der Titel der Aufgabe geändert wurde.

Glückwunsch! Sie haben die Schritt-für-Schritt-Anleitung abgeschlossen.