[PYTHON] Senden Sie mithilfe von Google Cloud Messaging für Chrome eine Nachricht vom Server an die Chrome-Erweiterung

(Stand 09.07.2013)

Bereits vor zwei Monaten kündigte Google Google Cloud Messaging an, das Push-Benachrichtigungen an Chrome-Erweiterungen und dergleichen sendet. Maripo hat den folgenden Artikel frühzeitig geschrieben.

Ich habe Google Cloud Messaging für Chrome ausprobiert

Ich habe eine Demo geschrieben, die eine Kanal-ID von der Chrome-Erweiterung an GAE sendet und eine Nachricht von GAE an die gesendete ID sendet, daher werde ich sie vorerst schreiben.

In diesem Artikel werde ich schreiben, was mir aufgefallen ist, als ich GCM ausprobiert habe. Da die webbasierte Arbeitstechnologie des Autors niedrig ist, wäre es außerdem hilfreich, wenn Sie mir die Punkte mitteilen könnten, die im obigen Repository gestochen werden können.

Ich werde am Ende über die beiden oben genannten Projekte schreiben.

Beginnen Sie zunächst mit einer Erweiterung

Ich hatte zuvor für eine bestimmte Angelegenheit eine Chrome-Erweiterung erstellt, diese jedoch zunächst basierend auf dem ursprünglichen Lernprogramm erneut ausgeführt.

Registrieren Sie Ihre Chrome-Erweiterung im Chrome Web Store.

Die erweiterte Registrierung selbst hat auf den ersten Blick nichts mit GCM zu tun, sondern dient zum Abrufen der Kanal-ID. Die Kanal-ID ist das Ziel, das auf die in Chrome jedes Benutzers installierten Chrome-Erweiterungen verweist.

Klicken Sie hier, um ein Angebot von Honke zu erhalten:

Similar to an email address, the channel ID is used to identify and send messages to a specific user of your app or extension. Your app or extension needs to send this value to its application server so that the server can trigger push messages back.

Ich registriere mich auf dem Server von Google, der GCM realisiert, aber derzeit kostet die Registrierung als Entwickler nur einmal 5 US-Dollar. Es sollte auch effektiv sein, wenn andere APIs als GCM verwendet werden. Die meisten Leser hier glauben, dass dieser Schritt vor einigen Jahren gemacht wurde.

Im Originaldokument gibt es auch "Kanal-ID zur Installationszeit mit app.runtime.onLaunched abrufen". Als Methode zum Abrufen der Kanal-ID für den Test dachte ich, ich könnte ohne die obige Registrierung experimentieren, aber es scheint nutzlos zu sein. Diese Beschreibung sieht in erster Linie wie eine Beschreibung zu gepackten Apps aus. Mit anderen Worten, es scheint nicht über Chrome-Erweiterungen zugänglich zu sein.

Laden Sie jetzt die Erweiterung hoch, die Sie mit zip erstellt haben. Natürlich können Sie einschränken, wer herunterladen darf. Dieses Mal habe ich es nur in Form eines vertrauenswürdigen Testers hochgeladen == Praktisch nur ich selbst.

https://chrome.google.com/webstore/developer/dashboard

Ich denke, es ist einfach, aber wenn Sie eine Chrome-Erweiterung auf Google Play hochladen, werden die Änderungen nicht sofort wiedergegeben. Im Einzelnen heißt es:

Der Artikel wird gerade veröffentlicht. Es kann bis zu 60 Minuten dauern, bis es im Chrome Web Store angezeigt wird.

Eigentlich scheint es nicht 60 Minuten zu dauern, bis es angezeigt wird, aber es wird nicht in 1 Sekunde aktualisiert.

Es ist auf subtile Weise ärgerlich, diese Verzögerung während der Entwicklung immer zu erleben. Daher ist es eine gute Idee, den Schlüssel manuell einzustellen, wie später in Maripos Artikel beschrieben. Sie können den Schlüssel nachschlagen und manuell in manifest.json einbetten. Wenn Sie Google-Chrome unter Linux verwenden, scheint es unter ~ / .config / google-chrome / Default / Extensions / eine Erweiterung zu geben, sodass Sie den Schlüssel herausziehen und in den in der Entwicklung befindlichen Schlüssel einfügen können.

Machen Sie die Chrome-Erweiterung GCM-kompatibel

Es gibt vier Dinge, die die Chrome-Erweiterung tun muss, um eine Nachricht zu erhalten:

Ich habe keine andere Wahl, als Berechtigungen in manifest.json zu schreiben, also werde ich dies tun.

"Kanal-ID vorbereiten" ist eine im Chrome Web Store registrierte Erweiterung, die Sie erhalten, indem Sie auf die entsprechende API (chrome.pushMessaging.getChannelId ()) klicken.

Sie müssen den Teil "Kanal-ID dem Server mitteilen" selbst gemäß der Form des Dienstes erstellen, den Sie am Ende bereitstellen möchten. Ich habe es diesmal so implementiert, als ob es beim Öffnen des Popups gesendet wurde.

"Implementieren eines Rückrufs zum Empfangen einer Nachricht" ist nicht im Lernprogramm enthalten, kann jedoch auf natürliche Weise mithilfe des Hintergrundmechanismus durchgeführt werden.

Es gab kein funktionierendes Implementierungsbeispiel für diesen Teil, daher habe ich es für alle Fälle geschrieben, aber es war keine große Sache. Es gibt jedoch so etwas wie eine Gewohnheit, die der Chrome-Erweiterung eigen ist, also habe ich das gelernt.

Registrieren Sie Ihr Projekt in der Google APIs Console, damit Sie Nachrichten vom Server anfordern können

Die Google API-Konsole bietet Ihnen schließlich drei Informationen: Diese haben kein Ablaufdatum und scheinen für immer verwendbar zu sein.

Ich bin mir nicht sicher, warum ich hier zusätzlich zur Client-ID / zum Geheimnis ein Aktualisierungstoken benötige. Sie verstehen es möglicherweise nicht, weil Sie den Mechanismus von OAuth nicht verstehen.

Aus diesen drei Sätzen erhalten Sie ein zeitlich begrenztes Zugriffstoken. Dieses Zugriffstoken, die Kanal-ID (Ziel) und die Nutzlast (Nachrichtentext) senden die Nachricht tatsächlich an eine bestimmte Nebenstelle.

Einmal aus der Oberfamilie.

You need two types of OAuth 2.0 tokens to authorize each call to the push messaging service: the refresh token and the access token. The access token authorizes each call to the service; however, this token expires after about an hour. The refresh token is used to 'refresh' the access token over time. These tokens are scoped to only send messages on behalf of your application or extension and nothing else.

Die ersten drei müssen vorab manuell über die Google APIs Console abgerufen werden, und das Zugriffstoken muss vom Server entsprechend erneut abgerufen werden.

Implementieren Sie den Server mit GAE

Wenn Sie Nachrichten manuell mit dem Befehl curl senden, benötigen Sie keinen Server. Sie können ein Zugriffstoken aus drei Arten von Informationen abrufen: Client-ID, Client-Geheimnis und Aktualisierungstoken. Sie können eine Nachricht mithilfe des Zugriffstokens und der Kanal-ID senden.

Ich wollte die Chrome-Erweiterung mit GAE verknüpfen, daher habe ich die Serverseite entsprechend geschrieben.

Über zwei Projekte

Bei der Installation der Chrome-Erweiterung wird eine Schaltfläche platziert. Wenn Sie die Taste drücken, wird die Kanal-ID an den Server gesendet. Der Server merkt sich die Kanal-ID und kann eine einfache Nachricht an die Browser-Erweiterung senden, die die Kanal-ID gesendet hat.

Außerdem müssen Sie beim Spielen mindestens die folgenden Arbeiten ausführen. Es ist viel Ärger

Dies ist auch wichtig, da wir der Sicherheit nicht viel Aufmerksamkeit schenken.

Recommended Posts

Senden Sie mithilfe von Google Cloud Messaging für Chrome eine Nachricht vom Server an die Chrome-Erweiterung
Senden Sie eine Nachricht von Slack an einen Python-Server
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Senden Sie Protokolldaten vom Server an Splunk Cloud
Senden Sie eine E-Mail vom VirtualBox CentOS8-Server mit Ihrem Google-Konto als Sendeadresse und dem App-Passwort
Ich möchte eine Nachricht von Python an LINE Bot senden
Python-Skript, das den Status des Servers über den Browser überprüfen kann
Eine Geschichte über die Umstellung eines persönlich entwickelten Webdienstes von einem Mietserver auf GCP (Google Cloud Platform)
Senden Sie Push-Benachrichtigungen von iOS-Apps über Firebase Cloud Messaging
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Ich möchte nur ein Signal vom Sub-Thread zum Haupt-Thread senden
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Verbinden Sie Ihre SQL Server-Datenbank mit Python mit Alibaba Cloud Function Compute
So führen Sie einen Schnellstart für Google Cloud Text-to-Speech .NET in Unity aus
In Dataflow implementiert, um die hierarchische Struktur von Google Drive in Google Cloud Storage zu kopieren
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
So erstellen Sie eine Anwendung aus der Cloud mithilfe des Django-Webframeworks
Konvertieren der cURL-API in ein Python-Skript (mithilfe des IBM Cloud-Objektspeichers)
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
Anweisungen zum Verbinden von Google Colab mit der lokalen Laufzeit in einer Windows-Umgebung
Fordern Sie die Herausforderungen von Cyma weiterhin mit dem OCR-Dienst der Google Cloud Platform heraus
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
So senden Sie eine Nachricht mit Curl an LINE
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Schreiben Sie einen TCP-Server mit dem SocketServer-Modul
POST-Images von ESP32-CAM (MicroPython) an den Server
[Python] Wirf eine Nachricht an den Slack-Kanal
Eine echte Möglichkeit für Benutzer von Python 3.8.0-2 aus Windows, mit Multi-Byte-Zeichen zu arbeiten
[Für Anfänger] Sprachanalyse mit dem Verarbeitungswerkzeug "GiNZA" (von der morphologischen Analyse bis zur Vektorisierung)
Ich möchte mit swagger-codegen in Sekundenschnelle einen Mock-Server für Python-Flask einrichten.
Die Geschichte des Wechsels von WoSign zu Let's Encrypt für ein kostenloses SSL-Zertifikat
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Senden Sie eine Push-Nachricht an LINE Bot, wenn die LTE-M-Taste gedrückt wird [SORACOM]
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen