2014-05-20 7 views
8

Ciao sto ottenendo google plus token di accesso senza utilizzare l'ID client OAuth 2.0 con gli ambiti. Ma con questo token di accesso non recupera l'indirizzo email. Come recuperare l'indirizzo email dell'utente?Android: come ottenere goken di accesso google plus?

C'è qualche differenza tra accesstoken con e senza ID client OAuth 2.0?

ho usato seguente codice,

String accessToken=""; 
        try { 
         accessToken = GoogleAuthUtil.getToken(
           getApplicationContext(), 
           mPlusClient.getAccountName(), "oauth2:" 
             + Scopes.PLUS_LOGIN + " " 
             + Scopes.PLUS_PROFILE); 

         System.out.println("Access token==" + accessToken); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
+0

Mostra del codice che hai provato. –

+0

Si prega di verificare la domanda aggiornata –

+0

Quale eccezione si ottiene? –

risposta

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

Ci sono 2 modi semplici per ottenere utente E-mail da Google plus,

1.Through Plus.AccountApi.getAccountName come qui di seguito,

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

2. Attraverso plus.profile.emails.read scope and REST end point come di seguito,

Prendi il GooglePlus access token

È necessario passare " https://www.googleapis.com/auth/plus.profile.emails.read" questo scopo di ottenere il AccessToken da GooglePlus come qui di seguito,

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

Effettuare una chiamata REST per il punto finale e fare semplice JSON parsing

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

È necessario dichiarare il permesso <uses-permission android:name="android.permission.GET_ACCOUNTS" /> nel proprio AndroidManifest.xml per utilizzare questi metodi.

Esempio completa dal sito dello sviluppatore di Google,

fare qualcosa di simile qui sotto per recuperare e-mail dell'utente autenticato da 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 maggiori informazioni leggere questo

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

+0

Grazie. . –

+0

Ho modificato la mia risposta con qualche informazione in più. Spero ti possa aiutare. –