Google-plus: unable to load person

后端 未结 2 406
迷失自我
迷失自我 2020-12-29 15:34

I want to have Google Plus login in my application. I could connect but unable to get current user\'s profile information

@Override
public void onConnected()         


        
相关标签:
2条回答
  • 2020-12-29 16:17

    finally i found the answer . :)

    loadPerson() and loadPeople() will return you expected data only in exported APK signed with valid key . by valid here i mean it should match with SHAI and other specification of your API key console .

    one more thing you could missed when following sample code is define scope in PlusClient constructor, like

    mPlusClient = new PlusClient.Builder(this, this, this).setScopes(Scopes.PLUS_LOGIN)
                    .setVisibleActivities("http://schemas.google.com/AddActivity").build();
    
    0 讨论(0)
  • 2020-12-29 16:27
    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() {
        }
    }
    
    0 讨论(0)
提交回复
热议问题