Push-Benachrichtigungen in der Gmail API konfigurieren

In diesem Dokument wird erläutert, wie Push-Benachrichtigungen in der Gmail API verwaltet werden.

Die Gmail API bietet Server-Push-Benachrichtigungen, über die Sie auf Änderungen an Ihren Gmail-Postfächern achten können. Mit dieser Funktion können Sie die Leistung Ihrer Anwendung verbessern. Sie macht die zusätzlichen Netzwerk- und Rechenkosten für das Abrufen von Ressourcen überflüssig, um festzustellen, ob sie sich geändert haben. Immer wenn sich ein Postfach ändert, benachrichtigt die Gmail API Ihre Backend-Serveranwendung.

Erste Cloud Pub/Sub-Einrichtung

Die Gmail API verwendet die Cloud Pub/Sub API, um Push Benachrichtigungen zu senden. So können Benachrichtigungen mit verschiedenen Methoden gesendet werden, darunter Webhooks und Abrufe an einem einzelnen Abo-Endpunkt.

Vorbereitung

Führen Sie die Cloud Pub/Sub Voraussetzungen aus und richten Sie dann einen Cloud Pub/Sub-Client ein.

Thema erstellen

Erstellen Sie mit Ihrem Cloud Pub/Sub-Client das Thema, an das die Gmail API Benachrichtigungen senden soll. Der Themenname kann ein beliebiger Name sein, den Sie für Ihr Projekt auswählen (z. B. passend zu projects/myproject/topics/*, wobei myproject die Projekt-ID ist, die für Ihr Projekt in der Google Cloud Console aufgeführt ist).

Abo erstellen

Folgen Sie der Anleitung zum Cloud Pub/Sub Abo, um ein Abo für das von Ihnen erstellte Thema einzurichten. Konfigurieren Sie den Abo-Typ entweder als Webhook-Push (d. h. ein HTTP-POST-Callback) oder als Pull (d. h. von Ihrer App initiiert). So erhält Ihre Anwendung Benachrichtigungen zu Updates.

Veröffentlichungsrechte für Ihr Thema gewähren

In Cloud Pub/Sub müssen Sie Gmail Berechtigungen gewähren, um Benachrichtigungen in Ihrem Thema zu veröffentlichen.

Gewähren Sie dazu die Berechtigung publish für gmail-api-push@system.gserviceaccount.com. Sie können dies in der Cloud Pub/Sub-Berechtigungskonsole in der Google Cloud Console tun. Folgen Sie dazu dieser Anleitung zur Zugriffssteuerung.

Die eingeschränkte Domain -Freigabe -Konfiguration Ihrer Organisation verhindert möglicherweise, dass Sie Veröffentlichungsberechtigungen gewähren. Um dieses Problem zu beheben, können Sie eine Ausnahme für dieses Dienstkonto konfigurieren.

Gmail-Postfach-Updates erhalten

Nachdem die erste Cloud Pub/Sub-Einrichtung abgeschlossen ist, konfigurieren Sie Gmail-Konten so, dass Benachrichtigungen für Postfach-Updates gesendet werden.

Anfrage beobachten

Wenn Sie Gmail-Konten so konfigurieren möchten, dass Benachrichtigungen an Ihr Cloud Pub/Sub-Thema gesendet werden, rufen Sie mit Ihrem Gmail API-Client die watch Methode für das Gmail-Nutzerpostfach auf. Dies ähnelt jedem anderen Gmail API-Aufruf. Geben Sie in Ihrer watch Anfrage den von Ihnen erstellten Themennamen und alle anderen Optionen an, z. B. labels zum Filtern. Mit der folgenden Anfrage werden Sie beispielsweise benachrichtigt, wenn eine Änderung am Posteingang vorgenommen wird:

Protokoll

POST "https://www.googleapis.com/gmail/v1/users/me/watch"
Content-type: application/json

{
  topicName: "projects/myproject/topics/mytopic",
  labelIds: ["INBOX"],
  labelFilterBehavior: "INCLUDE",
}

Python

request = {
  'labelIds': ['INBOX'],
  'topicName': 'projects/myproject/topics/mytopic',
  'labelFilterBehavior': 'INCLUDE'
}
gmail.users().watch(userId='me', body=request).execute()

Antwort beobachten

Wenn die watch-Anfrage erfolgreich ist, erhalten Sie eine Antwort wie die folgende:

{ historyId: 1234567890 expiration: 1431990098200 }

Die Antwort enthält das aktuelle Postfach historyId für den Nutzer. Ihr Client erhält Benachrichtigungen für alle Änderungen nach dieser historyId. Wenn Sie Änderungen vor dieser historyId verarbeiten müssen, lesen Sie den Leitfaden Synchronisieren von Clients mit der Gmail API.

Außerdem wird bei einem erfolgreichen watch-Aufruf sofort eine Benachrichtigung an Ihr Cloud Pub/Sub-Thema gesendet.

Wenn Sie eine Fehlermeldung vom watch-Aufruf erhalten, sollten die Details die Ursache des Problems erläutern. In der Regel liegt ein Problem mit der Einrichtung des Cloud Pub/Sub-Themas und des Abos vor. In der Cloud Pub/Sub Dokumentation finden Sie Informationen dazu, wie Sie überprüfen können, ob die Einrichtung korrekt ist, und wie Sie Probleme mit Themen und Abos beheben können.

Postfach-Überwachung erneuern

Sie müssen watch mindestens einmal alle 7 Tage aufrufen, sonst erhalten Sie keine Updates mehr für den Nutzer. Wir empfehlen, watch einmal pro Tag aufzurufen. Die Antwort der Methode watch enthält auch das expiration Feld mit dem Zeitstempel für den Ablauf von watch.

Benachrichtigungen erhalten

Immer wenn ein Postfach-Update erfolgt, das mit Ihrer watch-Konfiguration übereinstimmt, erhält Ihre Anwendung eine Benachrichtigung, in der die Änderung beschrieben wird.

Wenn Sie ein Push-Abo konfiguriert haben, entspricht eine Webhook-Benachrichtigung an Ihren Server einer PubsubMessage:

POST https://yourserver.example.com/yourUrl
Content-type: application/json

{
  message:
  {
    // This is the actual notification data, as Base64URL-encoded JSON.
    data: "eyJlbWFpbEFkZHJlc3MiOiAidXNlckBleGFtcGxlLmNvbSIsICJoaXN0b3J5SWQiOiAiMTIzNDU2Nzg5MCJ9",

    // This is a Cloud Pub/Sub message id, unrelated to Gmail messages.
    "messageId": "2070443601311540",

    // This is the publish time of the message.
    "publishTime": "2021-02-26T19:13:55.749Z",
  }

  subscription: "projects/myproject/subscriptions/mysubscription"
}

Der HTTP-POST-Text ist JSON und die eigentliche Gmail-Benachrichtigungsnutzlast befindet sich im Feld message.data. Das Feld message.data ist ein Base64URL-codierter String, der in ein JSON-Objekt decodiert wird, das die E‑Mail-Adresse und die neue Postfach-Verlaufs-ID für den Nutzer enthält:

{"emailAddress": "user@example.com", "historyId": "9876543210"}

Anschließend können Sie die history.list Methode verwenden, um die Details der Änderungen für den Nutzer seit seiner letzten bekannten historyIdabzurufen, wie im Leitfaden Synchronisieren von Clients mit der Gmail API beschrieben.

Verwenden Sie beispielsweise die history.list Methode, um Änderungen zu ermitteln, die zwischen Ihrer ersten watchAnfrage und dem dem Empfang der Benachrichtigung im vorherigen Beispiel aufgetreten sind. Übergeben Sie 1234567890 als startHistoryId an history.list. Anschließend können Sie 9876543210 als letzte bekannte historyId für zukünftige Anwendungsfälle speichern.

Wenn Sie stattdessen ein Pull-Abo konfiguriert haben, finden Sie in der Anleitung zu Cloud Pub/Sub's Pull-Abos weitere Informationen zum Empfangen von Nachrichten.

Auf Benachrichtigungen reagieren

Alle Benachrichtigungen müssen bestätigt werden. Wenn Sie die Webhook-Push Zustellung verwenden, wird die Benachrichtigung durch eine erfolgreiche Antwort (z. B. HTTP 200) bestätigt.

Wenn Sie die Pull-Zustellung verwenden (REST Pull, RPC Pull, oder RPC StreamingPull), müssen Sie einen Bestätigungsaufruf ausführen (REST oder RPC). In den Codebeispielen in der Anleitung zu Cloud Pub/Sub-Pull-Abos finden Sie weitere Informationen zum Bestätigen von Nachrichten entweder asynchron oder synchron mit den offiziellen RPC-basierten Clientbibliotheken.

Wenn Sie die Benachrichtigungen nicht bestätigen (z. B. wenn Ihr Webhook-Callback einen Fehler zurückgibt oder eine Zeitüberschreitung auftritt), versucht Cloud Pub/Sub, die Benachrichtigung zu einem späteren Zeitpunkt noch einmal zu senden.

Postfach-Updates beenden

Wenn Sie keine Updates mehr zu einem Postfach erhalten möchten, rufen Sie die stop Methode auf. Alle neuen Benachrichtigungen sollten innerhalb weniger Minuten beendet werden.

Beschränkungen

Die folgenden Beschränkungen gelten für die Arbeit mit Server-Push-Benachrichtigungen:

Maximale Benachrichtigungsrate

Für jeden überwachten Gmail-Nutzer gilt eine maximale Benachrichtigungsrate von einem Ereignis pro Sekunde. Alle Benachrichtigungen, die diese Rate überschreiten, werden verworfen. Achten Sie beim Verarbeiten von Benachrichtigungen darauf, keine weitere Benachrichtigung auszulösen, da dies zu einer Benachrichtigungsschleife führen kann.

Zuverlässigkeit

In der Regel werden alle Benachrichtigungen innerhalb weniger Sekunden zuverlässig zugestellt. In einigen extremen Fällen können sich Benachrichtigungen jedoch verzögern oder verworfen werden. Gehen Sie mit dieser Möglichkeit sorgfältig um, damit die Anwendung auch dann synchronisiert wird, wenn keine Push-Nachrichten empfangen werden. Sie können beispielsweise nach einer bestimmten Zeit ohne Benachrichtigungen für einen Nutzer regelmäßig die Methode history.list aufrufen.

Cloud Pub/Sub-Beschränkungen

Die Cloud Pub/Sub API unterliegt auch eigenen Beschränkungen, die in der Dokumentation zu Preisen und Kontingenten beschrieben werden.