Zeigen Sie das PUSH-Memo auf dem Android-Gerät und die Benachrichtigung in der Statusleiste mithilfe der Google-API an
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.
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