Push-Benachrichtigungen

Übersicht

Die Gmail API bietet Server-Push-Benachrichtigungen, mit denen Sie auf Änderungen an Gmail-Postfächern achten können. Sie können dieses Feature verwenden, um die Leistung Ihrer Anwendung zu verbessern. Auf diese Weise können Sie die zusätzlichen Netzwerk- und Computing-Kosten eliminieren, die mit Abfrageressourcen verbunden sind, um festzustellen, ob sie sich geändert haben. Jedes Mal, wenn sich ein Postfach ändert, benachrichtigt die Gmail API die Back-End-Serveranwendung.

Ersteinrichtung von Cloud Pub/Sub

Die Gmail API verwendet die Cloud Pub/Sub API, um Push-Benachrichtigungen zu senden. Benachrichtigungen sind über verschiedene Methoden möglich, einschließlich Webhooks und Abfragen an einem einzigen Aboendpunkt.

Voraussetzungen

Für den Rest dieser Einrichtung müssen Sie die Cloud Pub/Sub-Voraussetzungen erfüllen und anschließend einen Cloud Pub/Sub-Client einrichten.

Thema erstellen

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

Wir empfehlen, aufgrund von Cloud Pub/Sub-Limits für die Anzahl der Themen ein einzelnes Thema für alle Gmail API-Push-Benachrichtigungen für Ihre Anwendung zu verwenden.

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 Abotyp entweder als Webhook-Push (z.B. HTTP POST-Callback) oder per Pull (d.h. durch Ihre App initiiert). So erhält Ihre Anwendung Benachrichtigungen über Updates.

Veröffentlichungsrechte für Ihr Thema erteilen

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

Dazu müssen Sie gmail-api-push@system.gserviceaccount.com publish-Berechtigungen gewähren. Dazu können Sie die Berechtigungsoberfläche für Cloud Pub/Sub Developer Console gemäß der Anleitung zur Zugriffssteuerung auf Ressourcenebene verwenden.

Aktuelle Informationen zum Gmail-Postfach

Nachdem die Ersteinrichtung von Cloud Pub/Sub abgeschlossen ist, konfigurieren Sie Gmail-Konten so, dass Benachrichtigungen über Postfachaktualisierungen gesendet werden.

Anfrage ansehen

Wenn Sie Gmail-Konten zum Senden von Benachrichtigungen an Ihr Cloud Pub/Sub-Thema konfigurieren möchten, rufen Sie mit Ihrem Gmail API-Client einfach watch im Gmail-Nutzerpostfach auf, ähnlich wie bei jedem anderen Gmail API-Aufruf. Geben Sie dazu den oben erstellten Themennamen und alle anderen Optionen in Ihrer watch-Anfrage an, z. B. labels, nach denen gefiltert werden soll. So können Sie beispielsweise festlegen, dass Sie bei jeder Änderung im Posteingang benachrichtigt werden:

Protokoll

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

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

Python

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

Antwort ansehen

Wenn die Anfrage watch erfolgreich war, erhalten Sie eine Antwort wie diese:

{
  historyId: 1234567890
  expiration: 1431990098200
}

mit dem aktuellen Postfach historyId für den Nutzer. Alle Änderungen nach diesem historyId werden Ihrem Client benachrichtigt. Wenn Sie Änderungen vor diesem historyId verarbeiten müssen, lesen Sie die Synchronisierungsanleitung.

Außerdem sollte ein erfolgreicher watch-Aufruf bewirken, dass sofort eine Benachrichtigung an Ihr Cloud Pub/Sub-Thema gesendet wird.

Wenn Sie eine Fehlermeldung vom watch-Aufruf erhalten, sollten Sie in den Details die Ursache des Problems erklären. In der Regel ist das das Cloud Pub/Sub-Thema und -Abo. In der Cloud Pub/Sub-Dokumentation können Sie nachlesen, ob die Einrichtung korrekt ist, und Hilfe bei der Behebung von Problemen mit Themen und Abos erhalten.

Verlängerte Postfachuhr

Sie müssen watch mindestens alle 7 Tage noch einmal aufrufen, sonst werden Sie keine Updates mehr für den Nutzer erhalten. Wir empfehlen, watch einmal täglich aufzurufen. Die Antwort watch hat auch ein Ablauffeld mit dem Zeitstempel für den Ablauf (watch).

Benachrichtigungen erhalten

Jedes Mal, wenn ein Postfach aktualisiert wird, das mit watch ü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 dem 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 tatsächliche Nutzlast der Gmail-Benachrichtigung befindet sich im Feld message.data. Das Feld message.data ist ein base64url-codierter String, der in ein JSON-Objekt decodiert, das die E-Mail-Adresse und die neue Postfachverlaufs-ID für den Nutzer enthält:

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

Sie können dann history.list verwenden, um die Änderungsdetails für den Nutzer seit dem letzten bekannten Verlaufs-ID gemäß dem Synchronisierungsleitfaden abzurufen.

Wenn Sie stattdessen ein Pull-Abo konfiguriert haben, finden Sie in den Codebeispielen in der Cloud Pub/Sub-Pull-Anleitung für Abonnenten weitere Informationen zum Empfang von Nachrichten.

Auf Benachrichtigungen reagieren

Du musst alle Benachrichtigungen bestätigen. Wenn Sie die Webhook-Zustellung mit Webhooks verwenden, wird die Benachrichtigung erfolgreich beantwortet, z.B. mit HTTP 200.

Wenn Sie die Pull-Zustellung (REST Pull, RPC Pull oder RPC StreamingPull) verwenden, müssen Sie einen nachfolgenden Aufruf zur Bestätigung (REST oder RPC) ausführen. Weitere Informationen zur Bestätigung von Nachrichten asynchron oder synchron mithilfe der offiziellen RPC-basierten Clientbibliotheken finden Sie in den Codebeispielen in der Cloud Pub/Sub-Pull-Anleitung für Abonnenten.

Wenn die Benachrichtigungen nicht bestätigt werden (z.B. wenn der Webhook-Callback einen Fehler zurückgibt oder eine Zeitüberschreitung auftritt), versucht Cloud Pub/Sub die Benachrichtigung später noch einmal.

Updates für Postfach beenden

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

Beschränkungen

Maximale Benachrichtigungsrate

Jeder überwachte Gmail-Nutzer hat eine maximale Benachrichtigungsrate von 1 Ereignis/Sekunde. Alle Nutzerbenachrichtigungen über dieser Rate werden gelöscht. Seien Sie bei der Verarbeitung von Benachrichtigungen vorsichtig, damit Sie keine weitere Benachrichtigung auslösen und so eine Benachrichtigungsschleife starten.

Zuverlässigkeit

Normalerweise sollten alle Benachrichtigungen binnen weniger Sekunden zuverlässig zugestellt werden. In einigen extremen Situationen können Benachrichtigungen jedoch verzögert oder gelöscht werden. Achten Sie darauf, dass diese Möglichkeit reibungslos verarbeitet wird, damit die Anwendung auch dann synchronisiert wird, wenn keine Push-Nachrichten empfangen werden. Ein Beispiel dafür wäre, wenn history.list nach einem bestimmten Zeitraum ohne Benachrichtigungen für einen Nutzer regelmäßig aufgerufen wird.

Cloud Pub/Sub-Einschränkungen

Für die Cloud Pub/Sub API gelten außerdem eigene Einschränkungen, die in der jeweiligen Dokumentation zu Preisen und Kontingenten genauer erläutert werden.