Google plus:无法加载人员

我想在我的应用程序中loginGoogle Plus。 我可以连接,但无法获取当前用户的configuration文件信息

@Override public void onConnected() { String accountName = mPlusClient.getAccountName(); mPlusClient.loadPerson(this, "me"); } @Override public void onPersonLoaded(ConnectionResult status, Person person) { Log.d("onPersonLoaded - ConnectionResult", "" + status); Log.d("onPersonLoaded - person", "" + person); if (status.getErrorCode() == ConnectionResult.SUCCESS) { Log.d(TAG, "Display Name: " + person.getDisplayName()); } } 

我可以在onConnected获取帐户名称,但是onPersonLoaded会为person提供null

日志显示:

 onPersonLoaded - ConnectionResult(29861): ConnectionResult{statusCode=NETWORK_ERROR, resolution=null} onPersonLoaded - person(29861): null 

从这里的文档

公共静态最终诠释NETWORK_ERROR

发生networking错误。 重试应该可以解决问题。

常量值:7(0x00000007)

但是无论我重试多less次,我都会得到同样的错误。 这些是我使用的许可:

 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PROFILE" /> 

我不知道如何解决这个问题,一直在寻找过去的2个小时。 任何帮助,高度赞赏,谢谢。

Solutions Collecting From Web of "Google plus:无法加载人员"

最后我find了答案。 🙂

loadPerson()loadPeople()只会返回您预期的数据,在导出的APK中使用有效的密钥进行签名。 在这里有效,我的意思是它应该与SHAI和你的API密钥控制台的其他规范相匹配。

下面的示例代码是在PlusClient构造函数中定义范围的时候可能会丢失的一件事情

 mPlusClient = new PlusClient.Builder(this, this, this).setScopes(Scopes.PLUS_LOGIN) .setVisibleActivities("http://schemas.google.com/AddActivity").build(); 
 private class connectAsyncTask extends AsyncTask<String, Void, String> { String sAccessToken = null; @Override protected void onPostExecute(String info) { Log.d("JSONData = ", "" + info); //This contains all the data you wanted. } @Override protected String doInBackground(String... params) { HttpURLConnection urlConnection = null; try { URL url = new URL( "https://www.googleapis.com/oauth2/v1/userinfo"); sAccessToken = GoogleAuthUtil .getToken( MainActivity.this, mPlusClient.getAccountName() + "", "oauth2:" + Scopes.PLUS_PROFILE + " https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"); //This is probably not the right way to do. //What I am doing here is, get an AccessToken, invalidate it and get a new //AccessToken again. Because I couldn't find a way to check whether the //AccessToken is expired or not. GoogleAuthUtil.invalidateToken(MainActivity.this, sAccessToken); sAccessToken = GoogleAuthUtil .getToken( MainActivity.this, mPlusClient.getAccountName() + "", "oauth2:" + Scopes.PLUS_PROFILE + " https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestProperty("Authorization", "Bearer " + sAccessToken); BufferedReader r = new BufferedReader(new InputStreamReader( urlConnection.getInputStream(), "UTF-8")); StringBuilder total = new StringBuilder(); String line; while ((line = r.readLine()) != null) { total.append(line); } line = total.toString(); if (!TextUtils.isEmpty(line)) { return line; } else { return null; } } catch (UserRecoverableAuthException userAuthEx) { // Start the user recoverable action using the intent returned // by getIntent() userAuthEx.printStackTrace(); mActivity.this.startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE); return null; } catch (FileNotFoundException e) { //You get this exception when the AccessToken is expired. //I don't know how its a FileNotFoundException //Thats why instead of relying on this, I did the above to get //new AccessToken } catch (Exception e) { e.printStackTrace(); return null; } finally { if (urlConnection != null) { urlConnection.disconnect(); } } } @Override protected void onPreExecute() { } }