Externe Anhänge und abgeben

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

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

Sie können Ihrem Add-on auch eine Funktion hinzufügen, um Zuweisungen mit Add-on-Anhängen programmatisch zu ändern. Sie können jede Zuweisung mit einem Ihrer Add-on-Anhänge ändern, unabhängig davon, wer die Zuweisung erstellt hat. Dies ist besonders nützlich, um Aufgaben abzugeben, nachdem ein Schüler oder Student eine Aktivität abgeschlossen hat, um der Lehrkraft zu signalisieren, dass die zugewiesenen Aufgaben abgeschlossen sind und die Arbeit des Schülers zur Überprüfung bereit ist.

Sie erweitern die finale Version Ihres Add-ons, die content-type- oder activity-type-Anhänge unterstützt. Der Inhaltstyp-Anhang wird in diesem Leitfaden verwendet.

OAuth-Bereich für Aufgabenverwaltung 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 wird verwendet, um CourseWork-Zuweisungen zu erstellen oder zu ändern. Fügen Sie diesen Bereich der Liste der Bereiche im Google Workspace Marketplace SDK Ihres Cloud-Projekts, im OAuth-Zustimmungsbildschirm und in Ihrem Servercode 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 iFrames hinzufügen

Mit dem in dieser Schritt-für-Schritt-Anleitung beschriebenen Ablauf können Nutzer Google Classroom-Aufgaben und -Anhänge aus einem nicht von Google stammenden Produkt erstellen. In der Praxis ist dies wahrscheinlich Ihre bestehende Website oder Anwendung. Für dieses Beispiel müssen Sie eine simulierte Webseite erstellen, die als externe Website fungiert. Zum Erstellen einer neuen Zuweisung benötigen Sie eine Schaltfläche oder einen Link, der beim Anklicken eine neue Route öffnet und den vorgeschlagenen CourseWork-Vorgang ausführt.

Du musst außerdem eine Schaltfläche oder einen Link hinzufügen, über die sich der Nutzer anmelden kann, falls noch nicht geschehen. Für die nachfolgenden API-Anfragen sind Nutzeranmeldedaten erforderlich, sodass diese den OAuth 2.0-Handshake ausführen müssen. Genaue Informationen findest du in der Schritt-für-Schritt-Anleitung für die 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. Diese Seite enthält den Inhalt, der an Ihre CourseWork-Zuweisung angehängt wird.

<!-- /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 auf KursWork bezogenen Routen zu verarbeiten. In unserem Beispiel ist dies coursework_routes.py. Fügen Sie die folgenden drei Routen hinzu. Einen Teil des Inhalts werden Sie später einfügen.

# /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 der Nutzer berechtigt ist, Add-ons zu erstellen

Ein Nutzer muss mehrere Voraussetzungen erfüllen, bevor Sie in seinem Namen Add-on-Anhänge erstellen können. Der Einfachheit halber stellt Google die courses.checkAddOnCreationEligibility-Methode 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. Wenn Sie die Voraussetzungen erfüllen, folgen Sie der Logik zum Erstellen einer Zuweisung mit Add-on-Anhang. Andernfalls erstellen Sie ein Link Material. Sie müssen die ID des Kurses kennen, in dem der Nutzer eine Aufgabe erstellen möchte. Normalerweise fordern Sie den Nutzer auf, anzugeben, welcher Kurs verwendet werden soll. 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 berechtigt ist, Add-on-Anhänge zu erstellen, 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 Zuweisung.
  3. Erstellen Sie eine neue 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 Zuweisung ändern

Sie können auf jedes Google Classroom-Stream-Element mit mindestens einem Ihrer Add-on-Anhänge zugreifen, es ändern, abgeben, zurückfordern oder zurückgeben. Dabei spielt es keine Rolle, wer das Streamelement erstellt hat. Streamelemente sind eine beliebige Announcement-, CourseWork-Zuweisung oder CourseWorkMaterial.

Zur Veranschaulichung fügen Sie eine Route zum Ändern eines bestimmten Stream-Elements hinzu. Mit dieser Methode können Sie prüfen, ob Sie über die API erstellte Streamelemente aufrufen und ändern können und die von einer Lehrkraft über die Google Classroom-Benutzeroberfläche erstellt wurden.

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 Route /index 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 auf CourseWork bezogenen 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

Zur Vereinfachung werden in den bereitgestellten Beispielen hartcodierte Kurs- und Zuweisungs-IDs verwendet. Sie können diese IDs abrufen, indem Sie Anfragen mit Lehrkraft-Anmeldedaten 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 dann die Indexseite auf und melden Sie sich als Lehrkraft ohne Google Workspace for Education Teaching and Learning Plus-Lizenz an. Sie können in der Admin-Konsole Ihrer Testdomain den Lizenzstatus eines Nutzers umschalten.Klicken Sie auf die Schaltfläche Create a CourseWork Assignment (Aufgabe erstellen), öffnen Sie dann die Google Classroom-Benutzeroberfläche und prüfen Sie, ob eine Aufgabe mit einem Linkmaterial-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-Teaching & Learning- oder Plus-Lizenz an. Klicken Sie auf die Schaltfläche Create a CourseWork Assignment (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 der Add-on-Anwendung und den im Code angegebenen Titel enthalten.

Zuweisungsänderung testen

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 Modify a CourseWork Assignment (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.