2013-02-17 63 views
0

我在使用Google Play服务获取Google身份验证以在我的Android应用中工作时遇到了一些问题。 首先,我用库提供的样本以获得使用范围令牌波纹管通过服务器端验证设置获取Android Google身份验证中的用户信息

GoogleAuthUtil.getToken(getActivity(), mEmail,"oauth2:https://www.googleapis.com/auth/userinfo.profile"); 

然后我用令牌来获取有关用户的详细信息:

URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + token); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

这工作。然后,我使用Google Developers Blog上的Verifying Back-End Calls from Android Apps发布来验证应用用户访问我的网络服务器。所以我取代了为gettoken的范围与

audience:server:client_id:<webapp_clientId_for_localhost>.apps.googleusercontent.com 

,并采用了类似的检查与一个在文章中,以验证在服务器端的观众和的clientId(Android客户端ID)。这也工作了,但如果我试图获取有关用户(姓和名)的详细信息,无论是从Android应用或Web应用程序,使用用户信息API获得:

{“错误” :“错误”:[“域名”:“全球”, “原因”:“authError”, “消息”:“无效凭证”, “locationType”:“标头”, “location” “授权”}], “代码”:401, “消息”: “无效凭证”}}

我使用的代码是:

URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo"); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
con.setRequestProperty("Authorization", "OAuth " + token); 
con.setRequestProperty("ContentType", "application/json; charset=UTF-8"); 

任何想法为什么userinfo无法正常工作?还有什么我应该添加到范围?

回答

3

用于后端验证的令牌适用于您的服务器,而使用oauth2的令牌适用于Google。此时,没有任何机制可以同时请求这两个令牌,因此您需要对GoogleAuthUtil进行两次调用。在一个同意步骤之后,您应该可以同时请求两个(一次一个)。实际上,oauth2:令牌的使用频率应该较低,因为您可以将用户的配置文件数据与您的家庭服务器中的帐户相关联。

+0

是的,这就是我最终做的。 – 2013-02-18 05:54:27

+0

嘿@breno,这个用于为我工作,但仅仅在几天前它停止工作,现在它引发了这个错误com.google.android.gms.auth.GoogleAuthException:Unknown。任何想法为什么?我的示波器有问题吗? https://gist.github.com/lawloretienne/7351151 – toobsco42 2013-11-07 17:04:44

+0

糟糕,没有注意到这个问题。你还在遇到这个问题吗? – breno 2014-02-08 21:28:44