Notification PUSH de Python vers Android à l'aide de l'API de Google

Afficher le mémo de PUSH sur l'appareil Android et la notification sur la barre d'état à l'aide de l'API Google

Client (Android)

Les préparatifs pour la notification PUSH sur Android sont décrits dans http://dev.classmethod.jp/smartphone/android/gcm/. .. C'était vraiment utile.

À partir de là, les modifications et les ajouts à partir du lien ci-dessus.

La procédure dans la Google Developers Console a légèrement changé, je vais donc l'expliquer.

Tout d'abord, accédez à https://console.developers.google.com/project et sélectionnez un projet existant ou "CRÉER UN PROJET".

Créez ou sélectionnez un projet pour ouvrir la page du projet. Notez le «numéro de projet» en haut de la page. Ensuite, activez l'état de "Google Cloud Messaging pour Android" dans "API et auth"> "API" dans le menu de gauche. Le document officiel est ici.

Ensuite, dans "API et authentification"> "Identifiants", sélectionnez "CRÉER UNE NOUVELLE CLÉ" dans "Accès API public" pour obtenir une nouvelle clé API. Dans la boîte de dialogue qui s'ouvre, sélectionnez "Clé serveur" et saisissez 0.0.0.0 comme adresse IP. Changez ici si nécessaire. 0.0.0.0 est parfait pour les tests. Peut-être.

GcmBroadcastReceiver.java utilisera celui lié ci-dessus tel quel. Réécrivez ensuite GcmIntentService.java pour notification.

GcmIntentService.java


public class GcmIntentService extends IntentService {
    private static final String TAG = GcmIntentService.class.getSimpleName();
    private Notification notification;
    private NotificationManager nm;

    public GcmIntentService() {
        super("GcmIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.v(TAG, "onHandleIntent");
        Bundle extras = intent.getExtras();
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        String messageType = gcm.getMessageType(intent);

        if (!extras.isEmpty()) {
            if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                Log.d(TAG, "messageType: " + messageType + ",body:" + extras.toString());
            } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
                Log.d(TAG,"messageType: " + messageType + ",body:" + extras.toString());
            } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
                Log.d(TAG,"messageType: " + messageType + ",body:" + extras.toString());
            }
        }

		//Jusqu'ici http://dev.classmethod.jp/smartphone/android/gcm/Presque le même que
		//extras contient des données du serveur
		//Ici, tout est stocké sous forme de chaîne de caractères
        Log.v(TAG, extras.toString());
        int userId = Integer.parseInt(extras.getString("user_id"));
        String text = extras.getString("text");

		//Rendre MainActivity visible lorsque vous ouvrez une notification
        Intent i = new Intent(getApplicationContext(), MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        i.setType("notification");
        i.putExtra("user_id", userId);
        i.putExtra("text", text);

		//Si le 4ème argument est défini sur 0, seuls les extras de l'intention ne seront pas mis à jour et le texte de notification sera différent, mais les extras seront les mêmes.
		//Dans le cas où vous ne pouvez obtenir la même valeur que lorsque vous obtenez des extras dans MainActivity of Intent destination
        PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

        Notification.Builder notificationBuilder =
                new Notification.Builder(getApplicationContext())
                        .setContentIntent(pi)
                        .setSmallIcon(R.drawable.icon_small)
                        .setTicker("J'ai une notification")  //Texte affiché dans la barre d'état lorsqu'une notification arrive
                        .setContentTitle("Titre de la notification")  //Le titre qui apparaît lorsque vous ouvrez la barre de notification
                        .setContentText("Texte de notification") //Texte affiché sous le titre
                        .setWhen(System.currentTimeMillis());  //Quand la notification est-elle affichée?

        long[] vibrate_ptn = {0, 100, 300, 1000}; //Modèle de vibration (approprié)
        notification = notificationBuilder.build();
        notification.vibrate = vibrate_ptn;
        notification.defaults |= Notification.DEFAULT_LIGHTS; //Définir le modèle de clignotement par défaut
        notification.flags = Notification.FLAG_ONGOING_EVENT;

        //Obtenir une instance de NotificationManager
        nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(R.string.app_name, notification); //Notifier la notification définie
        GcmBroadcastReceiver.completeWakefulIntent(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        nm.cancel(R.string.app_name);
    }
}

Ensuite, c'est l'activité principale qui démarre en tant qu'opération lorsque vous appuyez sur la notification. Le lien ci-dessus est très bien, mais ajoutez le code suivant à ʻonCreate`.

MainActivity.java


//relation d'affichage des notifications
Intent intent = getIntent();
String intentType = intent.getType();
if (intentType != null && intentType.equals("notification")) {
	Log.v(TAG + " extras", intent.getExtras().toString());
	//GcmIntentService des extras.Extraire les données saisies en java
	int user_id = intent.getIntExtra("user_id", 0);
	String text = intent.getStringExtra("text");

	NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

	//Afficher la boîte de dialogue
	Toast.makeText(this, text, Toast.LENGTH_LONG);
}

Notez le registrationId affiché dans Log cat par registerInBackground (). Si vous l'implémentez en tant qu'application, transmettez cet ID au serveur et enregistrez-le.

Serveur (Python)

Depuis python, utilisez requests pour envoyer des requêtes à Google.

api.py


import requests
import json

def push_notificate(user_id, text):
    '''Si une erreur survient, un message d'erreur sera entré dans r
Appelez ceci pour recevoir une notification sur Android
    '''
    gcm_url = 'https://android.googleapis.com/gcm/send'

	#RegistrationId et clé API indiqués ci-dessus
    regid = REGID
    key = "key=" + APIKEY

    headers = {'content-type': 'application/json', 'Authorization': key}
	#Les données à transmettre sont appropriées.
	#Faites correspondre la clé dict avec la clé extras Android
    params = json.dumps(\
            {'registration_ids': [regid], \
            'data': {'id': user_id, 'text': text}})

    r = requests.post(gcm_url, data=params, headers=headers)
    print r.text
    return

Pour effacer l'authentification de base avec requests, passez ʻauth = (nom d'utilisateur, mot de passe)` comme argument, mais cette fois, passez-le dans les en-têtes.

Je pense que ça va.

Recommended Posts

Notification PUSH de Python vers Android à l'aide de l'API de Google
Notification push du serveur Python vers Android
Exécutez Ansible à partir de Python à l'aide de l'API
De Python à l'utilisation de MeCab (et CaboCha)
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Explication API pour toucher mastodonte de python
Connectez-vous à l'API Websocket de Coincheck depuis Python
Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
Comment afficher la carte à l'aide de l'API Google Map (Android)
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
Envoyer des notifications push aux applications iOS avec Python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil
Requête de Python vers Amazon Athena (à l'aide du profil nommé)
Aplatir à l'aide du rendement Python de
Publier de Python vers Slack
Flirter de PHP à Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Utilisez l'API e-Stat de Python
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Envoyer des notifications push aux applications iOS avec Python2 (avec un exemple de code)
Appelez Matlab depuis Python pour optimiser
Comment installer Python à l'aide d'Anaconda
Utilisation de Rstan de Python avec PypeR
[Python3] Google translate google translation sans utiliser l'API
Remarques sur l'utilisation de MeCab depuis Python
Publication de Python sur la chronologie Facebook
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Connectez-vous à la base de données utf8mb4 à partir de python
Utiliser Cloud Storage depuis Python3 (Introduction)
Python (de la première fois à l'exécution)
Utilisez l'API kabu Station® de Python
Afficher les notifications du bureau Mac à partir de Python
Publier une image de Python sur Tumblr
Faire une demande de Device Farm (appium python) à API Gateway
Comment utiliser l'API Python d'OpenPose
Utilisez l'API Flickr de Python
Implémentation des notifications de bureau à l'aide de Python
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
python Obtenez la météo à venir de l'API météo
Essayez d'utiliser l'API d'action de Python argparse
Touchons l'API Vision de Google de Python pour le moment
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Recevez des notifications Android pour parler lentement