PUSH-Benachrichtigung von Python an Android mithilfe der Google-API

Zeigen Sie das PUSH-Memo auf dem Android-Gerät und die Benachrichtigung in der Statusleiste mithilfe der Google-API an

Client (Android)

Die Vorbereitungen für die PUSH-Benachrichtigung unter Android sind in http://dev.classmethod.jp/smartphone/android/gcm/ beschrieben. .. Es war sehr hilfreich.

Ab hier die Änderungen und Ergänzungen über den obigen Link.

Das Verfahren in der Google Developers Console hat sich geringfügig geändert, daher werde ich es erläutern.

Gehen Sie zunächst zu https://console.developers.google.com/project und wählen Sie ein vorhandenes Projekt oder "CREATE PROJECT" aus.

Erstellen oder wählen Sie ein Projekt aus, um die Projektseite zu öffnen. Notieren Sie sich die "Projektnummer" oben auf der Seite. Aktivieren Sie dann den STATUS von "Google Cloud Messaging für Android" unter "APIs & auth"> "APIs" im Menü auf der linken Seite. Das offizielle Dokument ist hier.

Wählen Sie als Nächstes unter "APIs & auth"> "Anmeldeinformationen" unter "Öffentlicher API-Zugriff" die Option "NEUEN SCHLÜSSEL ERSTELLEN" aus, um einen neuen API-Schlüssel zu erhalten. Wählen Sie im daraufhin angezeigten Dialogfeld "Server Key" und geben Sie 0.0.0.0 als IP-Adresse ein. Bei Bedarf hier ändern. 0.0.0.0 ist gut zum Testen. Vielleicht.

GcmBroadcastReceiver.java verwendet den oben verlinkten so wie er ist. Schreiben Sie dann GcmIntentService.java zur Benachrichtigung neu.

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());
            }
        }

		//Bis hierher http://dev.classmethod.jp/smartphone/android/gcm/Fast das gleiche wie
		//Extras enthält Daten vom Server
		//Hier wird alles als Zeichenkette gespeichert
        Log.v(TAG, extras.toString());
        int userId = Integer.parseInt(extras.getString("user_id"));
        String text = extras.getString("text");

		//Machen Sie MainActivity sichtbar, wenn Sie eine Benachrichtigung öffnen
        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);

		//Wenn das 4. Argument auf 0 gesetzt ist, werden nur die Extras der Absicht nicht aktualisiert, und der Benachrichtigungstext ist unterschiedlich, aber die Extras sind gleich.
		//In der Situation, in der Sie nur dann denselben Wert erhalten können, wenn Sie Extras im Ziel MainActivity of Intent erhalten
        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("Ich habe eine Benachrichtigung erhalten")  //Text, der in der Statusleiste angezeigt wird, wenn eine Benachrichtigung eingeht
                        .setContentTitle("Benachrichtigungstitel")  //Der Titel, der beim Öffnen der Benachrichtigungsleiste angezeigt wird
                        .setContentText("Benachrichtigungstext") //Text unter dem Titel angezeigt
                        .setWhen(System.currentTimeMillis());  //Wann wird die Benachrichtigung angezeigt?

        long[] vibrate_ptn = {0, 100, 300, 1000}; //Vibrationsmuster (entsprechend)
        notification = notificationBuilder.build();
        notification.vibrate = vibrate_ptn;
        notification.defaults |= Notification.DEFAULT_LIGHTS; //Stellen Sie das Standard-LED-Blinkmuster ein
        notification.flags = Notification.FLAG_ONGOING_EVENT;

        //Holen Sie sich eine Instanz von NotificationManager
        nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(R.string.app_name, notification); //Benachrichtigen Sie die eingestellte Benachrichtigung
        GcmBroadcastReceiver.completeWakefulIntent(intent);
    }

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

Als nächstes wird die Hauptaktivität als Vorgang aktiviert, wenn Sie auf die Benachrichtigung tippen. Der obige Link ist in Ordnung, aber fügen Sie den folgenden Code zu "onCreate" hinzu.

MainActivity.java


//Benachrichtigungsanzeige-Beziehung
Intent intent = getIntent();
String intentType = intent.getType();
if (intentType != null && intentType.equals("notification")) {
	Log.v(TAG + " extras", intent.getExtras().toString());
	//GcmIntentService von Extras.Extrahieren Sie die in Java eingegebenen Daten
	int user_id = intent.getIntExtra("user_id", 0);
	String text = intent.getStringExtra("text");

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

	//Dialogfeld anzeigen
	Toast.makeText(this, text, Toast.LENGTH_LONG);
}

Notieren Sie sich die Registrierungs-ID, die in Log cat von "registerInBackground ()" angezeigt wird. Wenn Sie es als Anwendung implementieren, übergeben Sie diese ID an den Server und speichern Sie sie.

Server (Python)

Verwenden Sie in Python "Anfragen", um Anfragen an Google zu senden.

api.py


import requests
import json

def push_notificate(user_id, text):
    '''Wenn ein Fehler auftritt, wird eine Fehlermeldung in r eingegeben
Rufen Sie dies an, um eine Benachrichtigung an Android zu erhalten
    '''
    gcm_url = 'https://android.googleapis.com/gcm/send'

	#Registrierungs-ID und API-Schlüssel, wie oben angegeben
    regid = REGID
    key = "key=" + APIKEY

    headers = {'content-type': 'application/json', 'Authorization': key}
	#Die zu übergebenden Daten sind angemessen.
	#Ordnen Sie die Diktat-Taste der Android-Extras-Taste zu
    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

Um die Basisauthentifizierung mit "Anfragen" zu löschen, übergeben Sie "auth = (Benutzername, Passwort)" als Argument, diesmal jedoch in Headern.

Ich denke das ist okay.

Recommended Posts

PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Push-Benachrichtigung vom Python-Server an Android
Führen Sie Ansible über Python mithilfe der API aus
Von Python bis zur Verwendung von MeCab (und CaboCha)
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
API-Erklärung zum Berühren von Mastodon aus Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python
So zeigen Sie eine Karte mit der Google Map API (Android) an
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
Ich möchte mit Python eine E-Mail von Google Mail senden.
Senden Sie Push-Benachrichtigungen mit Python an iOS-Apps
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
MessagePack-Aufruf von Ruby to Python-Methoden (oder Python to Ruby-Methoden) mithilfe von RPC
Kopieren Sie S3-Dateien mit GSUtil von Python nach GCS
Abfrage von Python an Amazon Athena (unter Verwendung des benannten Profils)
Mit Python abflachen
Post von Python nach Slack
Flirte von PHP nach Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Verwenden Sie die e-Stat-API von Python
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Senden Sie Push-Benachrichtigungen mit Python2 an iOS-Apps (mit Beispielcode).
Rufen Sie Matlab von Python zur Optimierung auf
So installieren Sie Python mit Anaconda
Verwenden von Rstan aus Python mit PypeR
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Hinweise zur Verwendung von MeCab aus Python
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Verwenden von Cloud-Speicher aus Python3 (Einführung)
Python (vom ersten Mal bis zur Ausführung)
Verwenden Sie die kabu Station® API von Python
Anzeigen von Mac-Desktop-Benachrichtigungen in Python
Poste ein Bild von Python auf Tumblr
Stellen Sie eine Anfrage von der Gerätefarm (Appium Python) an das API-Gateway
Verwendung der Python-API von OpenPose
Verwenden Sie die Flickr-API von Python
Implementierung von Desktop-Benachrichtigungen mit Python
[Python] Sprechen mit OpenJTalk und Talk API (bis zur Sprachausgabe)
Python Holen Sie sich das kommende Wetter von der Wetter-API
Versuchen Sie es mit der Aktions-API von Python argparse
Lassen Sie uns vorerst Googles Vision API von Python berühren
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
Holen Sie sich Android-Benachrichtigungen, um langsam zu sprechen