GCM - Wie gehts weiter?

  • 6 Antworten
  • Letztes Antwortdatum
StefMa

StefMa

Dauer-User
450
Ich beschäftige mich grade mit GCM und habe auch schon mich dort eingelesen.
Leider fehlt mir dort aber irgendwie der Rote pfaden... So ganz genau verstehe ich das alles nicht. Mir schon klar, dass ich damit Push-Benachrichten senden kann, wie das aber technisch funktioniert, verstehe ich noch nicht.

Also ich nun angefangen den Client zu schreiben:
MainActivity (zusammengefasst):
Code:
final GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext());
				
Button bttn = (Button) findViewById(R.id.reg_button);
bttn.setOnClickListener(new View.OnClickListener() {

	@Override
	public void onClick(View v) {
		new Thread_Register(gcm, "Meine-Sender-ID", MainActivity.this)
						.execute();

	}
});

Mein Thread_Register sieht dann so aus (zusammengefasst):
Code:
public Thread_Register(GoogleCloudMessaging gcm, String senderId, Activity c) {
	this.gcm = gcm;
	this.senderId = senderId;
}
...
protected Void doInBackground(Void... v) {

	try {
		regId = gcm.register(senderId);
	} catch (Exception exe) {
		exe.printStackTrace();
		regId = "";
	}

	return null;
}

protected void onPostExecute(Void result) {
	super.onPostExecute(result);
		
	new Thread_Send(gcm, senderId).execute();
}

Mein Sender:
Code:
protected Void doInBackground(Void... v) {

	try {
		Bundle data = new Bundle();
		data.putString("hello", "World");
		gcm.send(senderId + "@gcm.googleapis.com", "0", data);
	} catch (IOException ex) {
		ex.printStackTrace();
	}

	return null;
}

Und den Boradcast habe ich vom Tutorial abgeschirbene :)

Das ganze funktioniert auch. Allerdings weiß ich nicht so genau, wie nun was senden kann und empfangen.
Mir fehlt, wie schon gesagt, der rote pfaden.

Code:
gcm.send(senderId + "@gcm.googleapis.com", "0", data);
Was passiert hier zum beispiel? Wohin wird das ganze geschickt?

Und wie kann ich meinen BroadcastReviecer ansprechen vom server aus?!
Wie muss ich einen Server einrcihten?
Kann ich auch von device zu device senden?
Also beispiel würde mir ja schon reichen, dass ich vom handy zum (selben) handy direkt schicke. Statisch. Ohne server. Geht das?

Danke und Gruß
 
Also du brauchst auf jedenfall einen eigenen Server.
jedes Handy bekommt nach der registrierung eine eigene kennung.
Von deinem Server aus kannst du dann quasi eine benachrichtigung an dieses handy schicken.

Von Handy zu Handy geht mittlerweile glaub ich auch, müsste ich aber nochmal genauer nachgucken. Allerdings geht das auch nur wenn die handys sich gegenseitig kennen, das wiederum geht nur wenn du einen server dazwischen hast, der die bekannt macht.

Also theoretisch geht das natürlich auch auf dem selben handy, macht dort allerdings überhaupt keinen Sinn.
Du musst dir die Kennung merken und nutzt dann quasi die Funktionen, die eigentlich für den Server vorgesehen sind auf dem Telefon.
 
Hi, dann scheine ich ja mit dem oben genannten sources etwas im Dunkeln zu tappen?
Ich müsste dann quasi eine eindeutige Ernennung für mich + die fürs device auf meinen Server senden bei der Registrierung.

Wenn ich dann vom Handy an ein anderes schicken will, müsste ich also meinen Server sagen "schicke an die, die, die und die der Inhalt ist sources"

Mein Server sendet dann die ids + payload an den gcm server?

Ist das der richtige Weg? Hast du dann vielleicht ein paar Quellen, Quelltext oder ähnliches?

Gesendet von meinem Nexus 4 mit Tapatalk 4 Beta
 
Hi,

warst zwar nicht wirklich eine große Hilfe aber trotrdem danke :D
Bin gestern abend auch nochmal die Doku durch gegangen und bin genau darauf gestoßen, was du hier gepostet hast.
Die ganze zeit habe ich nur dieses CCS gelesen. Bis mir dann aufgefallen ist, dass das ganze noch gar nicht richtig scharf geschaltet ist :O

So ein Blödsinn aber auch. Die ganze doku richtet sich quasi nach diesem Verfahren, aber richtig öffentlich für jeden ist es noch nicht -.-'

Dennoch danke.
Jetzt habe ich auch verstnaden wie man daten an der GCM-Server schickt :)

Danke und Gruß
 
Wieder ich :D

Also ich habe etwas dran rum gearbeitet.
Wenn ich hier alle meine Daten eingebe funktioniert es soweit. Der push kommt an.

Jetzt möchte ich das ganze auf mein Live-System (Google App Engine) migrieren.
Dazu habe ich erstmal zum testen diesen code genommen: Laravel Paste Bucket

Ich bekomme im self.response.out.write leider nichts raus. Der error-log zeigt folgendes:
HTTPError: HTTP Error 401: Unauthorized
Laut Dokumentation autentifiziere ich mich falsch?! Aber was mache ich falsch?
Im Header habe ich doch mein API key hinzugefügt?!

Danke und Gruß
 
Zurück
Oben Unten