2013-04-23 6 views
12

クラウドエンドポイントメソッドのuseridの取得に問題があります。私はアンドロイドクライアントでoauth2認証を使用し、資格情報を私のサービスに渡しました。以下は、私のメソッドがどのように見えるか(簡略化するために単純化されたもの)と似ています。機能クラウドエンドポイントAPIのUser.getUserId()は、nullではないユーザーオブジェクトに対してnullを返します。

私は、pythonのissue 8848はこの問題と非常によく似ているようです。

java apiでも同じ問題が発生していますか?方法

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

、フェデレーテッド・アイデンティティとAndroidクライアントでの資格情報はのOAuth2認証が行わ持っていたにもかかわらず、useridにはヌルが表示されます。電子メールアドレスがログに正しく表示されます。これは、すべて展開されたアプリケーションbtw上にあります。

何が間違っているか他の提案はありますか?問題の既知の回避策はありますか?私はhttps://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-callsで提案された方法に従って、アンドロイドクライアントを設定しました。

答えて

5

8848の問題は同じ原因です。根本的な問題は言語に依存せず、両方のランタイムに影響します。現時点では、エンドポイントのメソッド引数で渡されたUserオブジェクトにユーザーIDフィールドが設定されているとは限りません。

Userオブジェクトをデータストアに永続化して読み戻すことを極力避けてください。再読み込みオブジェクトには、ユーザーIDが含まれます。

+0

ありがとうございました。私は私が推測する回避策を試してみます。少なくとも私は知っているし、バグフィックスを待つことができる。 – user2072160

+0

これはまだ修正されていないようです。私はgetUserIdを呼び出すたびにnullを返すクラウドエンドポイントバックエンドを持っています。しかし、ユーザーIDを使用する必要はありますか?電子メールもユニークで、ユーザーが電子メールアドレスを変更する可能性はないと思う。 – sthomps

+0

これを取得することに自信がありますか?この悪い方法を実装するか、電子メールをキーとして使用するかを決定しようとしています。 – Patrick

-1

私はこの問題の同じ文書参照に従い、同じ正確な問題を抱えていました。 Googleは私がに更新サービスを再生するためのアップデートがありました

;:

は最後に次のようにしてのOAuth2での作業エンドポイントを得ました今はバージョン15(Android SDK)です。

エンドポイントのドキュメントが更新され、アプリケーションエンジンのエンドポイントにuserinfo.emailスコープを使用している場合でも、アプリケーションにGoogle Plus APIを有効にする必要があることが記載されています。私はこれをCloud Console経由で行った。

最後に、OAuth2がエミュレータから機能しないという新しいメモがありました。私はこれを確認した。私はまだ、プロダクションアプリエンジンを指していても、Androidエミュレータからヌルユーザエラーを受け取ります。だから私はまだ実際のデバイスからエンドポイントだけをテストすることができます。

上記の3つの手順がすべて必要であることを確認できました。

+0

上記の声明へのリンクを教えてください。私はエンドポイントを使ってアプリケーションを開発し始めましたが、私はGoogle+ APIを有効にすることについて何も見たことがありません。 –

+0

このソリューションは、この質問とは関係がないようです。明示された問題は、バックエンドのappengine/cloudエンドポイントにあります。あなたが説明しているのは、フロントエンドのアンドロイドコードです。 – sthomps

関連する問題