GCM Beispiel von Google funktioniert nicht? - Was mache ich falsch?

  • Antworten:13
Yannik
  • Forum-Beiträge: 8

26.08.2013, 14:16:52 via Website

Hallo zusammen,

ich habe das Beispiel von hier developer.android.com/google/gcm/client.html durchgearbeitet. (Sorry darf noch keine links posten)

Dazu muss man sagen, dass ich auf den senden Teil verzichte und die Reg_ID verwende um Nachrichten via Web Interface an den Dienst zu senden.
Anders als im Beispiel habe ich das ganze auch in einer FragmentActivity verwurschtelt.

Leider werden mir scheinbar keinerlei Nachrichten zugestellt denn ich bekomme keine Notification und auch im Log trägt er nichts ein.

Im Grunde habe ich von code.google.com/p/gcm/source/browse/gcm-client/#gcm-client%2Fsrc%2Fcom%2Fgoogle%2Fandroid%2Fgcm%2Fdemo%2Fapp die Klassen GcmBroadcastReceiver und GcmIntentService komplett übernommen und das relevante aus DemoActivity.java in meine Main eingefügt. Sender ID habe ich angepasst und Reg_ID bekomme ich wie gesagt von GCM Server. Evtl. liegt es an der Manifest?

1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="schemas.android.com/apk/res/android" ("http" entfernt weil sonst als Link gewertet -.-)
3 package="de.mypackage.test_app"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="11" android:targetSdkVersion="18" />
9 <uses-permission android:name="android.permission.INTERNET"/>
10 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
11 <uses-permission android:name="android.permission.WAKE_LOCK" />
12 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
13
14 <permission android:name="de.mypackage.test_app.permission.C2D_MESSAGE"
15 android:protectionLevel="signature" />
16 <uses-permission android:name="de.mypackage.test_app.permission.C2D_MESSAGE" />
17
18
19 <application
20 android:allowBackup="true"
21 android:icon="@drawable/ic_launcher"
22 android:label="@string/app_name"
23 android:theme="@style/AppTheme" >
24 <activity
25 android:name="de.mypackage.test_app.MainActivity"
26 android:label="@string/app_name" >
27 <intent-filter>
28 <action android:name="android.intent.action.MAIN" />
29
30 <category android:name="android.intent.category.LAUNCHER" />
31 </intent-filter>
32 </activity>
33 <activity
34 android:name=".menu_fms" android:label="@string/app_name"
35 android:theme="@android:style/Theme.Holo.Dialog">
36 <intent-filter >
37 <action android:name="de.mypackage.test_app.FMS" />
38 <category android:name="android.intent.category.DEFAULT"/>
39 </intent-filter>
40 </activity>
41 <activity
42 android:name=".AboutUs" android:label="@string/app_name"
43 android:theme="@android:style/Theme.Holo.Dialog">
44 <intent-filter >
45 <action android:name="de.mypackage.test_app.ABOUT" />
46 <category android:name="android.intent.category.DEFAULT"/>
47 </intent-filter>
48 </activity>
49 <activity
50 android:name=".Prefs" android:label="@string/app_name"
51 android:theme="@android:style/Theme.Holo.Dialog">
52 <intent-filter >
53 <action android:name="de.mypackage.test_app.PREFS" />
54 <category android:name="android.intent.category.DEFAULT"/>
55 </intent-filter>
56 </activity>
57
58
59 <receiver
60 android:name=".GcmBroadcastReceiver"
61 android:permission="com.google.android.c2dm.permission.SEND" >
62 <intent-filter>
63 <!-- Receives the actual messages. -->
64 <action android:name="com.google.android.c2dm.intent.RECEIVE" />
65 <category android:name="com.google.android.gcm.demo.app" />
66 </intent-filter>
67 </receiver>
68 <service android:name=".GcmIntentService" />
69 </application>
70</manifest>

Evtl. hat jemand Zeit und Lust sich das anzusehen? Ich würde mich sehr freuen! Danke...
LG Yannik

Antworten
Christian
  • Forum-Beiträge: 307

26.08.2013, 15:08:46 via Website

Hi Yannik,

sollte hier:

1<category android:name="com.google.android.gcm.demo.app" />

nicht dein Package stehen und nicht das aus der Demoanwendung?

mfg christian

Antworten
Yannik
  • Forum-Beiträge: 8

26.08.2013, 15:17:35 via Website

oO :*)

Hallo Christian,

da hast du natürlich Recht! Danke. Leider war das wohl nicht der einzige Fehler.
Evtl. hast du noch eine andere Idee?

Danke und Gruß
Yannik

Antworten
Christian
  • Forum-Beiträge: 307

27.08.2013, 19:08:00 via Website

Hi Yannik,

wird die Nachricht von deinem Server verschickt?
Ist das ein richtiger Server oder läuft das ding bei dir aufm Rechner?
hast du den richtigen API Key für den Server genommen? (Creating a Google API project)

Hast eine Log in dem BroadCast Receiver (GcmBroadcastReceiver)?
Weil wenn der nicht anspringt könnte es sein das deine Nachricht nicht vom Server raus geht?
Die "Reg_ID" wurde auch mit den Gerät erstellt auf dem der Test läuft?

Mfg Christian

Antworten
Yannik
  • Forum-Beiträge: 8

28.08.2013, 17:38:49 via Website

Hallo Christian,

ja, der Server ist ein gewöhnlicher Webserver. Das es mit manchen lokalen Serveranwendungen Probleme gibt habe ich gelesen.

Google Api Key hab ich und sollte so richtig sein.

Ich hatte den Server bereits mit einem anderen GCM Tutorial am laufen. Dort hat es einwandfrei funktioniert. Leider hat der dort gezeigte Code eine Menge Fehler ausgespuckt, woraufhin ich dieses versuchte.

Muss ich den BroadCastReceiver noch irgendwie "starten" oder reicht die Erwähnung im Manifest?

Danke!
LG Yannik

Antworten
Michele
  • Forum-Beiträge: 1.525

28.08.2013, 18:16:46 via Website

Hallo.

Na den BroadCastReceiver musste schon selbst starten oder du lässt ihn selbst starten nach dem Hochfahren
des Handys.



LG

— geändert am 28.08.2013, 18:17:00

Antworten
Yannik
  • Forum-Beiträge: 8

28.08.2013, 21:45:37 via Website

Hallo Michele,

danke für deine Antwort!

Leider kriege ich nicht ganz auf den Schirm wo der Fehler liegt. In dem BeispielCode fehlt die "Aktivierung" des Broadcastreceivers doch auch?

Haben die das blos vergessen und ich muss noch etwas ergänzen?

Hier in der DemoActivity.java müsste es doch drin vorkommen?
code.google.com/p/gcm/source/browse/gcm-client/#gcm-client%2Fsrc%2Fcom%2Fgoogle%2Fandroid%2Fgcm%2Fdemo%2Fapp

Danke für alle weiteren Antworten!

LG Yannik

Antworten
Christian
  • Forum-Beiträge: 307

29.08.2013, 19:24:48 via Website

@Michele:


Na den BroadCastReceiver musste schon selbst starten oder du lässt ihn selbst starten nach dem Hochfahren
des Handys.
Ich glaube du verwechselst da gerade was mit einen Services. BroadCast Receiver werden entweder in der AndroidMannifest.xml registriert oder du machst das Dynamisch im Code. In dem Augenblick wo sie registriert wurden lauschen sie auf die jeweilige Nachricht die sie empfangen sollen. Ein starten ist dabei NICHT nötig,

@Yannik:

Ich hatte den Server bereits mit einem anderen GCM Tutorial am laufen. Dort hat es einwandfrei funktioniert. Leider hat der dort gezeigte Code eine Menge Fehler ausgespuckt, woraufhin ich dieses versuchte.
Heist das jetzt die Nachricht wird richtig verschickt oder nicht? Haste mal geschaut ob du einen positiven
Response bekommst?

mfg Christian

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 19:31:15 via Website

Hallo.

Na du lässt Ihn doch Starten durch:

1<action android:name="android.intent.action.BOOT_COMPLETED"/>

oder durch den Service/Activity. So kenne ich es. So Starte ich meinen BroadcastReceiver immer.
Natürlich kenne ich mich nicht so gut aus wie du Christian mit BroadcastReceiver.
Kannst mich natürlich gerne aufklären oder lehren.:D



LG

— geändert am 29.08.2013, 19:35:40

Antworten
Christian
  • Forum-Beiträge: 307

29.08.2013, 19:43:23 via Website


Na du lässt Ihn doch Starten durch:

1<action android:name="android.intent.action.BOOT_COMPLETED"/>

oder durch den Service/Activity. So kenne ich es. So Starte ich meinen BroadcastReceiver immer.
Jein klar durch das Event wird er ausgeführt aber du startest ihn nicht direkt. Eher lauscht der Receicer auf dieses Event und wenn das System die Nachricht verschickt das das Gerät fertig hochgefahren ist wird dein Receiver ausgeführt.

Zum Beispiel kannst du auch Receiver dafür nutzten um darüber informiert zu werden wann der Batteriestand auf kritisch gesunken ist. So einen Receiver würdest nicht per "Boot_Completed" starten. mmhh ich hoffe das Beispiel ist verständliche.


Natürlich kenne ich mich nicht so gut aus wie du Christian mit BroadcastReceiver.
Danke aber ich denke ich bin genauso schlau und doof wie die meisten anderen hier auch.

Mfg Christian

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 19:54:02 via Website

Naja wie es aussieht bist du wohl nicht so doof :D

Wie gesagt ich bin noch nicht so schlau im bereich BroadcastReceiver.
Ich starte meinen immer über den Service mit Intent.

Das mit dem Batteriestand weiß ich. Nur noch nie gemacht.
Deswegen weiß ich auch nicht wie ich einen BroadcastReceiver anders anspreche wie du es meinst.


LG

Antworten
Yannik
  • Forum-Beiträge: 8

02.09.2013, 10:47:49 via Website

Ok und nun bitte noch einmal für den ganz dummen hier in der Runde ;-)

Die Main weis also vom Receiver gar nichts sondern dieser startet mehr oder weniger selber und sagt nur bei Empfang "Hey ich hab was für dich!".

Faktisch sollte also mein Beispiel funktionieren. Ich hatte vor geraumer Zeit schon einmal ein GCM Projekt zum laufen bekommen, evtl liegt es daran, dass ich den gleichen Api-Key verwenden wollte? Muss ich da einen neuen erstellen? Kann man überhaupt 2 GCM Apps haben (mit einem Entwicklerkonto). Aufgrund des 1. Projektes bin ich mir auch sicher, dass die Serverseite funktioniert. Allerdings lies sich der App Teil so nicht übernehmen weil das Gesamtprojekt komplexer ist.

Aktuell kann ich leider nicht daran basteln aber evtl. bekomme ich es ja doch noch hin.

Danke und LG Yannik

Antworten
Christian
  • Forum-Beiträge: 307

02.09.2013, 20:32:48 via Website


Ich hatte vor geraumer Zeit schon einmal ein GCM Projekt zum laufen bekommen, evtl liegt es daran, dass ich den gleichen Api-Key verwenden wollte?

Du musst/sollst für jedes Projekt einen eigenen API Key erstellen.

Mfg Christian

Antworten
Yannik
  • Forum-Beiträge: 8

05.09.2013, 23:39:38 via Website

Hallo Jungs!

Ich weiß zwar nach wie vor nicht, was es genau war, aber nachdem ich das Manifest noch einmal komplett neu geschrieben und zusätzlich einen neuen Api-Key angefordert habe, funktioniert alles.

Vielen Dank für eure Hilfe!

Antworten