Android - how to get google plus access token?

前端 未结 2 434
有刺的猬
有刺的猬 2020-12-09 12:40

Hello i am getting google plus access token without using OAuth 2.0 client ID with scopes. But with this access token does not fetch email address. How to fetch user email

相关标签:
2条回答
  • 2020-12-09 12:47
    String accessToken = "";
    try {
      URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo");
      // get Access Token with Scopes.PLUS_PROFILE
      String sAccessToken;
      sAccessToken = GoogleAuthUtil.getToken(
        LoginCheckActivity.this,
        mPlusClient.getAccountName() + "",
        "oauth2:"
          + Scopes.PLUS_PROFILE + " "
          + "https://www.googleapis.com/auth/plus.login" + " "
          + "https://www.googleapis.com/auth/plus.profile.emails.read");
    } catch (UserRecoverableAuthException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();                  
      Intent recover = e.getIntent();
      startActivityForResult(recover, 125);
      return "";
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (GoogleAuthException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    0 讨论(0)
  • 2020-12-09 12:48

    There are 2 simple ways to get user Email from Google plus,

    1.Through Plus.AccountApi.getAccountName like below,

    String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

    2.Through plus.profile.emails.read scope and REST end point like below,

    Get the GooglePlus AccessToken

    You need to pass " https://www.googleapis.com/auth/plus.profile.emails.read" this scope to get the AccessToken from GooglePlus like below,

    accessToken = GoogleAuthUtil.getToken(
                                    getApplicationContext(),
                                    mPlusClient.getAccountName(), "oauth2:"
                                            + Scopes.PLUS_LOGIN + " "
                                            + Scopes.PLUS_PROFILE+" https://www.googleapis.com/auth/plus.profile.emails.read");
    

    Make a REST call to the endpoint and do simple JSON parsing

    https://www.googleapis.com/plus/v1/people/me?access_token=XXXXXXXXXXXXX

    You must declare the permission <uses-permission android:name="android.permission.GET_ACCOUNTS" /> in your AndroidManifest.xml to use these methods.

    Full Example from Google Developer site,

    Do something like below to retrieve the authenticated user's Email from Google plus,

    class UserInfo {
      String id;
      String email;
      String verified_email;
    }
    
    final String account = Plus.AccountApi.getAccountName(mGoogleApiClient);
    
    AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
    
      @Override
      protected UserInfo doInBackground(Void... params) {
        HttpURLConnection urlConnection = null;
    
        try {
          URL url = new URL("https://www.googleapis.com/plus/v1/people/me");
          String sAccessToken = GoogleAuthUtil.getToken(EmailTest.this, account,
            "oauth2:" + Scopes.PLUS_LOGIN + " https://www.googleapis.com/auth/plus.profile.emails.read");
    
          urlConnection = (HttpURLConnection) url.openConnection();
          urlConnection.setRequestProperty("Authorization", "Bearer " + sAccessToken);
    
          String content = CharStreams.toString(new InputStreamReader(urlConnection.getInputStream(),
              Charsets.UTF_8));
    
          if (!TextUtils.isEmpty(content)) {
            JSONArray emailArray =  new JSONObject(content).getJSONArray("emails");
    
            for (int i = 0; i < emailArray.length; i++) {
              JSONObject obj = (JSONObject)emailArray.get(i);
    
              // Find and return the primary email associated with the account
              if (obj.getString("type") == "account") {
                return obj.getString("value");
              }
            }
          }
        } catch (UserRecoverableAuthException userAuthEx) {
          // Start the user recoverable action using the intent returned by
          // getIntent()
          startActivityForResult(userAuthEx.getIntent(), RC_SIGN_IN);
          return;
       } catch (Exception e) {
          // Handle error
          // e.printStackTrace(); // Uncomment if needed during debugging.
        } finally {
          if (urlConnection != null) {
            urlConnection.disconnect();
          }
        }
    
        return null;
      }
    
      @Override
      protected void onPostExecute(String info) {
          // Store or use the user's email address
      }
    
    };
    
    task.execute();
    

    Fore more info read this

    https://developers.google.com/+/mobile/android/people

    0 讨论(0)
提交回复
热议问题