Śledziłem wersję demonstracyjną podaną pod numerem http://developer.android.com/google/gcm/gs.html i otrzymałem aplikację próbną, GCMTrial, aby działała poprawnie.Błąd Androida GCM. Serwer zwraca niezarejestrowany, gdy klient jest zarejestrowany pod numerem
Ale próbowałem wykonać te same kroki na istniejącej aplikacji, ale nie działa. Zrobiłem całkowicie nowy projekt. Ale nawet wtedy, po tych samych dokładnych krokach, nie mogłem uzyskać GCM, aby wysłać wiadomość z powodzeniem. Próbowałem zmienić nazwę GCMTrial na wymaganą nazwę, ale nie to też nie działa.
zarejestrować się na GCM poprzez głównej działalności i uzyskać następujące log:
12-19 21:30:13.102: V/GCMRegistrar(15889): Registering receiver
12-19 21:30:13.112: D/GCMBaseIntentService(15889): handleRegistration: registrationId = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, error = null, unregistered = null
12-19 21:30:13.112: D/GCMRegistrar(15889): resetting backoff for com.XXX.XXX
12-19 21:30:13.117: V/GCMRegistrar(15889): Saving regId on app version 1
Ale gdy próbuję wysłać wiadomość GCM, zwraca następujący błąd
[ errorCode=NotRegistered ]
kod klienta:
public class MainActivity extends Activity {
TextView tve;
String TAG = "GCMTrial";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, "XXXXXX");
Log.v(TAG, "Reg");
} else {
Log.v(TAG, "Already registered");
}
}
GCMIntentService :
public class GCMIntentService extends GCMBaseIntentService {
@Override
protected void onError(Context arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.d("GCM", "RECIEVED A MESSAGE");
// Get the data from intent and send to notificaion bar
}
@Override
protected void onRegistered(Context arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
// TODO Auto-generated method stub
}
}
Oczywisty:
KodSerwer:
System.out.println("Sending GCM");
String key = "XXX"; //Server API key taken from the site
clientID = "XXXXXXXXX"; // copied from the logs
Sender sender = new Sender(key);
Message message = new Message.Builder().build();
Result result = sender.send(message, clientID, 1);
System.out.println(result.toString());
To doprowadza mnie do szaleństwa .. To pokazuje, jak zarejestrowane w telefonie z systemem Android, nawet nazywa onRegistered metodę klasy GCMIntentService .. ale gdy próbuję wysłać wiadomość, to flagi jest „NotRegistered błąd” ... nie wiem co robię źle .. proszę mi pomóc faceci ....
Nie mam pojęcia, co się dzieje. Ale, ponownie zainstalowałem dodatki GCM dla Androida, stworzył zupełnie nową aplikację, i tym razem działa !! :) Użyłem MulticastResult result = sender.send (wiadomość, urządzenia, 5); zamiast wyniku Result = sender.send (message, clientID, 1); dunno, jeśli to był problem, ale teraz działa ...! – user1657709
Myślę, że powód, dla którego otrzymujesz to działa po ponownym zainstalowaniu, ponieważ masz już zgłoszenie nowego identyfikatora Reg. – neferpitou