2014-05-20 30 views
8

Merhaba, kapsamları ile OAuth 2.0 istemci kimliğini kullanmadan google plus erişim belirteci alıyorum. Ancak bu erişim belirteci ile e-posta adresi almaz. Kullanıcı e-posta adresi nasıl alınır?Android - google plus erişim jetonu nasıl alınır?

OAuth 2.0 istemci kimliği olan ve olmayan accesstoken arasında herhangi bir fark var mı? Google'dan kullanıcı Email almak artı 2 basit yolu vardır

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

Denediğiniz bazı kodları gösterin. –

+0

Lütfen güncellenmiş soru kontrol edin –

+0

Ne tür bir istisna alıyorsunuz? –

cevap

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

kodu aşağıdaki

ben kullandım, aşağıda gibi

1.Through Plus.AccountApi.getAccountName,

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

2. Aşağıdaki gibi plus.profile.emails.read scope and REST end point,

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

bitiş noktasına REST arama yapma ve

ayrıştırma basit JSON yapmak
aşağıdaki gibi GOOGLEPLUS dan AccessToken almak için " https://www.googleapis.com/auth/plus.profile.emails.read" bu kapsam geçmesi gerekiyor

, GooglePlus AccessToken alın

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

Bu yöntemleri kullanmak için AndroidManifest.xml ürününüzde <uses-permission android:name="android.permission.GET_ACCOUNTS" /> iznini kullanın.

Google Geliştirici sitesinden Tam Örneği,

artı Google'dan yetkilendirilmiş kullanıcıların posta almak için aşağıdaki gibi bir şey yap,

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 daha fazla bilgi bu

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

okumak
+0

Teşekkürler. . –

+0

Cevabımı daha fazla bilgi ile düzenledim. Umarım size yardımcı olur. –