[PYTHON] Envoyer un message du serveur à l'extension Chrome à l'aide de Google Cloud Messaging pour Chrome

(En date du 09/07/2013)

Il y a déjà deux mois, Google a annoncé Google Cloud Messaging, qui envoie des notifications push aux extensions Chrome, etc. Maripo a écrit l'article suivant à un stade précoce.

J'ai essayé Google Cloud Messaging pour Chrome

J'ai écrit une démo qui envoie un identifiant de chaîne de l'extension Chrome à GAE et envoie un message de GAE à l'identifiant envoyé, je vais donc l'écrire pour le moment.

Dans cet article, j'écrirai ce que j'ai remarqué lorsque j'ai essayé GCM. De plus, étant donné que la technologie de travail Web de l'auteur est faible, il serait utile que vous me parliez des points qui peuvent être piqués dans le référentiel ci-dessus.

J'écrirai sur les deux projets ci-dessus à la fin.

Commencez par créer une extension pour le moment

J'avais déjà créé une extension Chrome pour un certain point, mais j'ai commencé par recommencer en me basant sur le tutoriel original.

Enregistrez votre extension Chrome sur le Chrome Web Store.

L'enregistrement étendu lui-même n'a rien à voir avec GCM à première vue, mais il est utilisé pour obtenir l'ID de canal. L'ID de chaîne est la destination qui pointe vers les extensions Chrome installées dans Chrome de chaque utilisateur.

Cliquez ici pour une citation de Honke:

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.

Je m'inscris sur le serveur de Google qui réalise GCM, mais pour le moment, il ne coûte 5 $ qu'une seule fois pour m'inscrire en tant que développeur. Il devrait également être efficace lors de l'utilisation d'API autres que GCM. La plupart des lecteurs ici pensent que cette étape a été franchie il y a quelques années.

Dans le document original, il y a aussi "Obtenir l'ID de canal au moment de l'installation en utilisant app.runtime.onLaunched." Comme méthode pour obtenir l'ID de canal pour le test, j'ai donc pensé que je pourrais expérimenter sans l'enregistrement ci-dessus, mais cela semble inutile. Cette description ressemble en premier lieu à une description des applications packagées. En d'autres termes, il ne semble pas être accessible depuis les extensions Chrome.

Maintenant, téléchargez l'extension que vous avez créée avec zip. Bien sûr, vous pouvez limiter les utilisateurs autorisés à télécharger. Cette fois, je l'ai téléchargé sous la forme de Trusted Tester uniquement == Pratiquement uniquement moi-même.

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

Je pense que c'est basique, mais lorsque vous téléchargez une extension Chrome sur Google Play, les changements ne sont pas immédiatement reflétés. Plus précisément, il dit:

L'article est en cours de publication. Cela peut prendre jusqu'à 60 minutes pour qu'il apparaisse dans le Chrome Web Store.

En fait, cela ne semble pas prendre 60 minutes pour s'afficher, mais il ne se met pas à jour en 1 seconde.

Il est subtilement ennuyeux de toujours ressentir ce décalage pendant le développement, c'est donc une bonne idée de définir manuellement la clé comme décrit plus loin dans l'article de Maripo. Vous pouvez rechercher la clé et l'intégrer manuellement dans manifest.json. Si vous utilisez google-chrome sous Linux, il semble y avoir une extension sous ~ / .config / google-chrome / Default / Extensions /, vous pouvez donc en extraire la clé et la mettre dans celle en cours de développement.

Rendre l'extension Chrome GCM compatible

L'extension Chrome doit faire quatre choses pour recevoir un message:

Je n'ai pas d'autre choix que d'écrire des autorisations dans manifest.json, donc je vais le faire.

"Prepare channel ID" est une extension enregistrée dans le Chrome Web Store, et vous pouvez l'obtenir en cliquant sur l'API appropriée (chrome.pushMessaging.getChannelId ()).

Vous devez créer vous-même la partie "Indiquez l'ID du canal au serveur" en fonction de la forme du service que vous souhaitez fournir à la fin. Je l'ai implémenté cette fois comme si elle avait été envoyée lors de l'ouverture du popup.

"Implémenter un rappel pour recevoir un message" n'est pas dans le tutoriel, mais cela peut être fait naturellement en utilisant le mécanisme d'arrière-plan.

Je n'avais pas d'exemple d'implémentation fonctionnelle de cette partie, donc je l'ai écrit au cas où, mais ce n'était pas un gros problème. Cependant, il y a quelque chose comme une habitude propre à l'extension Chrome, alors j'ai appris cela.

Enregistrez votre projet dans la console des API Google afin de pouvoir demander des messages du côté serveur

La console API Google vous donne finalement trois informations: Ceux-ci n'ont pas de date d'expiration et semblent être utilisables pour toujours.

Je ne sais pas pourquoi j'ai besoin d'un jeton d'actualisation en plus de l'ID client / secret ici. Vous ne le comprendrez peut-être pas parce que vous ne comprenez pas le mécanisme d'OAuth.

À partir de ces trois ensembles, vous obtenez un jeton d'accès limité dans le temps. Ce jeton d'accès, l'ID de canal (destination) et la charge utile (corps du message) envoient en fait le message à une extension spécifique.

Une fois de la famille principale.

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.

Les trois premiers doivent être obtenus manuellement via la console des API Google à l'avance, et le jeton d'accès doit être obtenu à nouveau par le serveur, le cas échéant.

Implémenter le serveur avec GAE

Si vous envoyez des messages manuellement avec la commande curl, vous n'avez pas besoin d'un serveur. Vous pouvez obtenir un jeton d'accès à partir de trois types d'informations, l'ID client, le secret client et le jeton d'actualisation, et envoyer un message à l'aide du jeton d'accès et de l'ID de canal.

Je voulais lier l'extension Chrome à GAE, j'ai donc écrit le côté serveur comme il convient.

Environ deux projets

Un bouton sera placé lorsque vous installerez l'extension Chrome. Lorsque vous appuyez sur le bouton, l'ID du canal est envoyé au serveur. Le serveur se souvient de l'ID de canal et peut envoyer un message simple à l'extension de navigateur qui a envoyé l'ID de canal.

De plus, lorsque vous jouez, vous devez au moins effectuer le travail suivant. C'est beaucoup de problèmes

C'est également important parce que nous n'accordons pas beaucoup d'importance à la sécurité.

Recommended Posts

Envoyer un message du serveur à l'extension Chrome à l'aide de Google Cloud Messaging pour Chrome
Envoyer un message de Slack à un serveur Python
[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
Envoyer les données du journal du serveur vers Splunk Cloud
Envoyez un e-mail depuis le serveur VirtualBox CentOS8 en utilisant votre compte Google comme adresse d'envoi et en utilisant le mot de passe de l'application
Je souhaite envoyer un message de Python à LINE Bot
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Une histoire sur le passage d'un service Web développé personnellement d'un serveur de location à GCP (Google Cloud Platform)
Envoyez des notifications push depuis les applications iOS via Firebase Cloud Messaging
Publier un message d'IBM Cloud Functions sur Slack en Python
Je souhaite envoyer un signal uniquement du sous-thread au thread principal
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
Connectez votre base de données SQL Server à Alibaba Cloud Function Compute à l'aide de Python
Comment exécuter un démarrage rapide pour Google Cloud Text-to-Speech .NET dans Unity
Implémenté dans Dataflow pour copier la structure hiérarchique de Google Drive vers Google Cloud Storage
[python] Envoyez l'image capturée de la caméra Web au serveur et enregistrez-la
Comment créer une application à partir du cloud à l'aide du framework Web Django
Convertir l'API cURL en script Python (à l'aide du stockage d'objets IBM Cloud)
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Instructions pour connecter Google Colab. À l'environnement d'exécution local dans un environnement Windows
Continuer à relever les défis de Cyma en utilisant le service OCR de Google Cloud Platform
Envoyer un message à LINE avec Python (LINE Notify)
Comment envoyer un message à LINE avec curl
J'ai essayé d'utiliser l'API Google Cloud Vision
Ecrire un serveur TCP à l'aide du module SocketServer
POST des images depuis ESP32-CAM (MicroPython) vers le serveur
[Python] Lancer un message sur le canal Slack
Un véritable moyen pour les personnes utilisant python 3.8.0-2 à partir de Windows de travailler avec des caractères multi-octets
[Pour les débutants] Analyse du langage à l'aide de l'outil de traitement du langage naturel "GiNZA" (de l'analyse morphologique à la vectorisation)
Je veux configurer un serveur fictif pour python-flask en quelques secondes en utilisant swagger-codegen.
L'histoire du passage de WoSign à Let's Encrypt pour un certificat SSL gratuit
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Envoyer un message Push à LINE Bot lorsque le bouton LTE-M est enfoncé [SORACOM]
Trouvez une ligne directrice pour le nombre de processus / threads à définir sur le serveur d'applications