2013-04-23 13 views
12

Ho un problema con l'ottenimento del userid per un metodo endpoint cloud. Ho usato l'autenticazione oauth2 nel mio client Android e ho passato le credenziali al mio servizio. Il sotto è simile a come appare il mio metodo (semplificato per renderlo più chiaro).Funzione User.getUserId() nell'endpoint Cloud api restituisce null per un oggetto utente che non è nullo

Ho notato che issue 8848 per python sembra essere molto simile a questo problema.

Lo stesso problema è presente anche in java api? Il metodo

public SuccessCode doSomething(WireFormat wire, User user){ 
    log.info("User id: "+user.getUserId()); 
    log.info("Federated identity: "+user.getFederatedIdentity()); 
    log.info("Email address: "+user.getEmail()); 
} 

mostrerà nullo per l'identità federata e userId anche se le credenziali di client Android hanno avuto l'autenticazione OAuth2 eseguita. L'indirizzo email viene visualizzato correttamente nel registro. Questo è tutto su un'applicazione distribuita btw.

Qualcuno ha altri suggerimenti su cosa è sbagliato? Eventuali soluzioni alternative per il problema? Ho seguito il metodo suggerito in https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls per configurare il mio client Android.

risposta

5

Sei corretto che il problema 8848 è la stessa causa. Il problema di fondo è indipendente dalla lingua e influenza entrambi i tempi di esecuzione. Al momento non dovresti aspettarti che il campo ID utente sia popolato in un oggetto User passato tramite l'argomento del metodo in Endpoint.

Una soluzione alternativa super-ottimale consiste nel persistere l'oggetto User nell'archivio dati e rileggerlo. L'oggetto riletto avrà l'ID utente incluso.

+0

Grazie. Proverò la soluzione alternativa, immagino. Almeno so e posso aspettare una correzione ora. – user2072160

+0

Sembra che questo non è ancora stato risolto. Ho un backend endpoint cloud che restituisce null ogni volta che chiamo getUserId. Tuttavia, è necessario utilizzare l'id utente? L'e-mail è anche unica e non credo sia possibile per un utente cambiare il suo indirizzo e-mail. – sthomps

+0

Qualche confidenza con il funzionamento? Cercando di decidere di implementare questo pessimo lavoro, o utilizzare l'e-mail come chiave. – Patrick

-1

Ho seguito lo stesso riferimento documento nella domanda e ho avuto lo stesso esatto problema.

finalmente l'endpoint che lavorano con OAuth2 effettuando le seguenti operazioni:

C'è stato un aggiornamento per Google Play Services, che ho aggiornato a; ora sulla versione 15 (Android SDK).

La documentazione dell'endpoint è stata aggiornata per indicare che è necessario abilitare le API di Google Plus per l'applicazione, anche se si utilizza solo l'ambito userinfo.email per gli endpoint del motore dell'app. L'ho fatto tramite la console cloud.

Inoltre, infine, c'era una nuova nota che affermava che OAuth2 non funziona dall'emulatore. Ho confermato questo. Ricevo ancora l'errore utente null da un emulatore Android, anche quando si punta al motore dell'app di produzione. Quindi posso ancora testare solo gli endpoint da un dispositivo reale.

Sono stato in grado di confermare che avevo bisogno di tutti e tre i passaggi precedenti.

+0

Potrebbe fornire collegamenti a dichiarazioni menzionate? Ho iniziato a sviluppare app utilizzando l'endpoint ma non ho mai visto nulla sull'abilitazione dell'API di Google+. –

+0

Questa soluzione sembra irrilevante alla domanda. Il problema indicato è negli end-end appengine/cloud. Quello che stai descrivendo è nel codice Android di frontend. – sthomps

Problemi correlati