Obecnie pracuję nad wprowadzeniem powiadomień GCM do mojej aplikacji.GcmListenerService.onMessageReceived() nie nazywane
Problem, który mam, polega na tym, że metoda onMessageReceived()
z mojej implementacji GcmListenerService
nie jest wywoływana. Otrzymuję dane z serwerów GCM w porządku, ponieważ automatycznie generują powiadomienie (chcę zastąpić to moim własnym powiadomieniem przy użyciu metody onMessageReceived()
), ale po tym czasie żadne z moich zgłoszeń dziennika nie są drukowane w dzienniku.
JSON, który jest wysyłany z serwera na serwer GCM
{
"notification" : {
"title" : "Title",
"text" : "Message",
"icon" : "@drawable\/ic_notification",
"click_action" : "OPEN_MAIN_ACTIVITY"
},
"registration_ids":[
"xxxx", "xxxx", "xxxx", "etc"
]
}
AndroidManifest.xml (tylko część GCM)
<!-- GCM START -->
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.my.package" />
</intent-filter>
</receiver>
<service
android:name=".Services.ListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name=".Services.IDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
<!-- GCM END -->
GcmListenerService (tylko szybkie druku, aby zobaczyć, czy jego w ogóle wywoływana)
public class ListenerService extends GcmListenerService {
private static final String TAG = "MyGcmListenerService";
@Override
public void onMessageReceived(String from, Bundle data) {
String message = data.getString("title");
Log.d(TAG, "From: " + from);
Log.d(TAG, "Message: " + message);
}
}
Nie wiem, czy metoda wnioskowania o tokeny jest istotna, ale mogę ją opublikować w razie potrzeby.
Jeśli jakaś część pytania jest niejasna, daj mi znać, nie jestem najlepszy w wyjaśnianiu.
Czy zarejestrowałeś swojego klienta? – Gordak
Otrzymuję token, a nawet powiadomienia (myślę, że auto GCM je generuje lub coś takiego), jeśli to masz na myśli? – Dan
Jeśli skonfigurowałeś klienta zgodnie z https://developers.google.com/cloud-messaging/android/client, wszystko powinno być w porządku. Nie zapomnij wysłać tokena gcm do swojej aplikacji na serwerze (nie widzę tu kodu rejestracyjnego). – Gordak