2013-04-23 10 views
12

Mam problem z uzyskaniem identyfikatora użytkownika dla metody punktu końcowego w chmurze. Użyłem autoryzacji Oauth2 w moim Androidzie i przekazałem dane uwierzytelniające do mojej usługi. Poniższe jest podobne do mojej metody (uproszczone, aby było bardziej zrozumiałe).Funkcja User.getUserId() w interfejsie API punktu końcowego w chmurze zwraca wartość null dla obiektu użytkownika, który nie ma wartości null

Zauważam, że issue 8848 dla Pythona wydaje się być bardzo podobny do tego problemu.

Czy ten sam problem występuje również w java api? Metoda

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

pokaże null dla stowarzyszonym tożsamości i userid mimo poświadczenia Android klienta miały uwierzytelniania OAuth2 wykonywane. Adres e-mail wyświetla się poprawnie w dzienniku. Wszystko to dotyczy wdrożonej aplikacji.

Ktoś ma jakieś inne sugestie co do tego, co jest nie tak? Jakieś znane rozwiązania problemu? Zastosowałem metodę sugerowaną w https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls, aby skonfigurować klienta Android.

Odpowiedz

5

Masz rację, że problem 8848 jest tą samą przyczyną. Podstawową kwestią jest agnostyka językowa i wpływa ona na oba środowiska wykonawcze. W tej chwili nie należy oczekiwać, że pole ID użytkownika zostanie wypełnione w obiekcie User przekazywanym za pośrednictwem argumentu method w punktach końcowych.

Sposób na obejście problemu polega na tym, że obiekt User należy przechowywać w magazynie danych i odczytywać go ponownie. Obiekt ponownie odczytany będzie zawierał identyfikator użytkownika.

+0

Dzięki. Spróbuję obejść, jak sądzę. Przynajmniej wiem i mogę teraz czekać na poprawkę. – user2072160

+0

Wygląda na to, że nie zostało to naprawione. Mam serwer zaplecza chmury, która zwraca wartość null, gdy wywołuję getUserId. Chociaż czy jest potrzeba użycia identyfikatora użytkownika? E-mail jest również wyjątkowy i nie sądzę, aby użytkownik mógł zmienić swój adres e-mail. – sthomps

+0

Czy masz pewność, że to działa? Próbuję zdecydować się na wdrożenie tej złej pracy lub użyć poczty e-mail jako klucza. – Patrick

-1

Zastosowałem to samo odniesienie do dokumentu w pytaniu i miałem ten sam dokładny problem.

wreszcie punktów końcowych pracujących z OAuth2 wykonując następujące czynności:

Wystąpił aktualizacja dla usługi Google Play do której aktualizowane; teraz w wersji 15 (Android SDK).

Dokumentacja punktu końcowego została zaktualizowana, aby potwierdzić, że należy włączyć interfejsy API Google Plus dla aplikacji, nawet jeśli po prostu używasz zakresu userinfo.email dla punktów końcowych silnika aplikacji. Zrobiłem to za pośrednictwem Cloud Console.

Wreszcie pojawiła się nowa notatka stwierdzająca, że ​​OAuth2 nie działa z emulatora. Potwierdziłem to. Nadal dostaję zerowy błąd użytkownika z emulatora Androida, nawet jeśli wskazuje na aparat aplikacji. Mogę więc nadal testować tylko punkty końcowe z prawdziwego urządzenia.

Udało mi się potwierdzić, że potrzebowałem wszystkich trzech powyższych kroków.

+0

Czy możesz podać linki do wspomnianych stwierdzeń? Rozpocząłem tworzenie aplikacji przy użyciu punktu końcowego, ale nigdy nie widziałem niczego na temat włączania interfejsu Google+ API. –

+0

To rozwiązanie wydaje się nie mieć znaczenia dla pytania. Podany problem dotyczy backendu aplikacji/chmurki zaplecza. To, co opisujesz, znajduje się w androidowym kodzie frontendowym. – sthomps

Powiązane problemy