2013-04-16 9 views
5

ho lottato per ottenere l'esempio in esecuzione dal basso:Google App Engine Java e Android Guida introduttiva

https://developers.google.com/eclipse/docs/getting_started

Il primo problema che ho avuto è stato non aver installato 'Google Cloud Messaging per Android Libreria 'nell'SDK Android (ovvio che lo so).

ma ora ho un problema con il codice generato automaticamente in due file nel progetto Android: GCMIntentService.java e RegisterActivity.java

Gli errori sono:

  • Il metodo getDeviceInfo (stringa) è definito per il tipo Deviceinfoendpoint GCMIntentService.java
  • I listMessages metodo() è definito per il tipo MessageEndpoint RegisterActivity.java
  • procedimento insertDeviceIn fo (DeviceInfo) non è definito per il tipo di Deviceinfoendpoint GCMIntentService.java
  • Il metodo removeDeviceInfo (String) non è definito per il tipo di Deviceinfoendpoint GCMIntentService.java

sto usando Java SDK v1.7.0_15 su Ubuntu, ma Ho anche provato su Windows 7 con Java SDK v1.6 e ho avuto lo stesso problema. Ultima piattaforma Android 4.2.2 e Google App Engine 1.7.7. Eclipse è Juno Service Release 2.

Il problema sembra che stiano commettendo un errore, perché esiste un metodo getDeviceInfo per la classe interna DeviceInfoEndpoint all'interno di Deviceinfoendpoint (diverse capatilizzazioni).

Potrei provare a risolverlo, ma mi chiedo solo se ho qualcosa di sbagliato nel mio setup perché questo accada?

Qualsiasi aiuto sarebbe apprezzato.

+0

Il tuo problema riguarda il tuo progetto di app o progetto appengine? Puoi pubblicare qualche stacktrace per quegli errori? –

+0

Il problema riguarda il progetto dell'app. Non c'è stacktrace in quanto non si compilerà ancora. – reubenb87

+0

Stavo lottando con lo stesso identico problema di ieri sera. Ho provato anche con due macchine diverse con diverse configurazioni software. – Heigo

risposta

3

Nella classe GCMIntentService.java, aggiungere .deviceInfoEndpoint() dopo che l'oggetto endpoint nelle linee con errori come illustrato di seguito:

DeviceInfo existingInfo = endpoint.getDeviceInfo(registration) 
DeviceInfo existingInfo = endpoint.deviceInfoEndpoint().getDeviceInfo(registration) 

In RegisterActivity.java modificare la riga

messageEndpoint.listMessages().setLimit(5).execute(); 

t o

messageEndpoint.messageEndpoint().listMessages().setLimit(5).execute(); 
+0

Grazie mille!Deve esserci qualche errore nel loro codice di auto-generazione allora. – reubenb87

+0

Nessun problema. Ma hai effettivamente realizzato il progetto di esempio? Ho fatto funzionare l'app per Android, che è stata registrata correttamente ma il back-end non ha visto alcun dispositivo. – Heigo

2

Accertarsi che si stia utilizzando la stessa versione di API GCM per i propri JAR. Ci sono state alcune revisioni.

Sto usando il seguente codice con gcm-server.jar, elencato a 19718 byte.

Il codice che uso con successo per inviare messaggi GCM a un dispositivo è:

public void sendMessage() { 
    String notificationToken = mobileDevice.getPushNotificationCode(); 
    String deviceType = mobileDevice.getDeviceType(); 

    Sender sender = new Sender(BROWSER_API_KEY); 
    Message message = new Message.Builder().addData("message", "blah blah").build(); 
    String device = "<the key for the device you are sending to goes here>"; 

    try { 
     System.out.println("Sending message..."); 
     Result result = sender.send(message, device, 5); 
     System.out.println("Done sending message"); 
     if (result.getMessageId() != null) { 
      System.out.println("Got message ID: " + result.getMessageId()); 
      System.out.println("Got error code name: " + result.getErrorCodeName()); 
      System.out.println("result: " + result); 
      String canonicalRegId = result.getCanonicalRegistrationId(); 
      if (canonicalRegId != null) { 
       // Database has more than one record for this device. 
       // Replace all of this device's records with this new id 
       System.out.println("Got new canonical reg id: " + canonicalRegId); 
      } 
     } else { 
      String error = result.getErrorCodeName(); 
      if (error.equals(com.google.android.gcm.server.Constants.ERROR_NOT_REGISTERED)) { 
       // application has been removed from device - unregister from database 
       System.out.println("Got error: " + error); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}