2013-04-23 5 views
12

Ich habe ein Problem mit dem Abrufen der Benutzer-ID für eine Cloud-Endpunkt-Methode. Ich habe die Oauth2-Authentifizierung in meinem Android-Client verwendet und die Zugangsdaten an meinen Dienst weitergegeben. Das Folgende ist ähnlich wie meine Methode (vereinfacht, um es klarer zu machen).Funktion User.getUserId() in Cloud-Endpunkt-API gibt Null für ein Benutzerobjekt, das nicht Null ist

Ich bemerke, dass issue 8848 für Python zu diesem Problem sehr ähnlich zu sein scheint.

Ist das gleiche Problem ein Problem in Java API? Das Verfahren

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()); 
} 

wird null für föderierte Identität zeigen und userId obwohl Anmeldeinformationen in Android-Client haben oauth2 Authentifizierung durchgeführt haben. Die E-Mail-Adresse wird im Protokoll korrekt angezeigt. Dies ist alles auf einer bereitgestellten Anwendung BTW.

Hat jemand andere Vorschläge, was falsch ist? Bekannte Problemumgehungen für das Problem? Ich habe die in https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls vorgeschlagene Methode verwendet, um meinen Android-Client einzurichten.

Antwort

5

Sie haben richtig, dass das Problem 8848 die gleiche Ursache ist. Das zugrunde liegende Problem ist sprachunabhängig und betrifft beide Laufzeiten. Im Moment sollten Sie nicht erwarten, dass das Benutzer-ID-Feld in einem User Objekt gefüllt wird, das über das Methodenargument in Endpoints übergeben wird.

Eine sehr suboptimale Problemumgehung besteht darin, das Objekt User im Datenspeicher zu belassen und wieder einzulesen. Das wiedergelesene Objekt enthält die Benutzer-ID.

+0

Danke. Ich werde die Problemumgehung versuchen, denke ich. Zumindest weiß ich es und kann jetzt auf einen Bugfix warten. – user2072160

+0

Es scheint, dass dies immer noch nicht behoben ist. Ich habe ein Cloud-Endpunkte-Backend, das bei jedem Aufruf von getUserId null zurückgibt. Muss die Benutzer-ID verwendet werden? E-Mail ist auch einzigartig und ich denke nicht, dass es für einen Benutzer möglich ist, seine E-Mail-Adresse zu ändern. – sthomps

+0

Irgendwelche Zuversicht, dass das funktioniert? Versuchen Sie, diese schlechte Arbeit zu implementieren, oder gehen Sie mit E-Mail als Schlüssel. – Patrick

-1

Ich folgte dem gleichen Dokument Verweis in der Frage und hatte das gleiche genaue Problem.

schließlich die Endpunkte bekam mit OAuth2 arbeiten indem Sie folgendermaßen vorgehen:

Es gab ein Update für Google Play-Dienste, die ich aktualisiert; jetzt auf Version 15 (Android SDK).

Die Endpunktidokumentation wurde aktualisiert, sodass Sie die Google Plus-APIs für Ihre Anwendung aktivieren sollten, selbst wenn Sie nur den Bereich Userinfo.email für die Endpunkte Ihrer App-Engine verwenden. Ich habe dies über die Cloud Console getan.

Außerdem gab es schließlich eine neue Notiz, die besagt, dass OAuth2 nicht vom Emulator funktioniert. Ich habe das bestätigt. Ich erhalte immer noch den Nullbenutzerfehler von einem Android-Emulator, selbst wenn er auf die Produktions-App-Engine verweist. Ich kann also nur Endpunkte von einem echten Gerät testen.

Ich konnte bestätigen, dass ich alle drei der oben genannten Schritte benötigte.

+0

Könnten Sie bitte Links zu den erwähnten Aussagen geben? Ich habe mit der Entwicklung einer App über den Endpunkt begonnen, aber nie etwas über die Aktivierung der Google+ API gesehen. –

+0

Diese Lösung scheint für die Frage irrelevant. Das angegebene Problem liegt in den Backend-Appengine/Cloud-Endpunkten. Was Sie beschreiben, ist im Frontend-Android-Code. – sthomps

Verwandte Themen