2010-01-21 6 views
14

J'ai l'autorisation oauth avec google fonctionne correctement et je reçois des données de l'api de contacts. Maintenant, je veux programmer le prénom, le nom et l'image d'un utilisateur gmail. Quelle API Google puis-je utiliser pour obtenir ces données?Quelle API Google utiliser pour obtenir le nom, le prénom, l'image, etc. de l'utilisateur?

+6

Personne n'a la moindre idée de ce? J'ai été surpris moi-même quand je n'ai pas trouvé de réponse simple sur le site de google ... – Pranav

+0

Est-ce que oauth est identique à openid? – anon

+0

Essayez-vous d'obtenir le nom et l'image des contacts ou de l'utilisateur authentifié? –

Répondre

0

J'ai trouvé la réponse en regardant autour de moi dans le forum de l'API des contacts. Lorsque vous obtenez le résultat d'alimentation, il suffit de ce qui suit dans Java-

String Name = resultFeed.getAuthors().get(0).getName(); 

String emailId = resultFeed.getId(); 

Je cherche toujours un moyen d'obtenir l'image de profil d'utilisateur.

+0

pouvez-vous poster un échantillon de code pour obtenir le prénom, le nom, l'adresse e-mail de google. L'URL que vous demandez. Je fais la même chose dans l'application Android. Merci d'avance. – Panache

+1

Qu'est-ce que Java a à voir avec les API Google? –

1

Pour l'image, vous pouvez utiliser les contacts Google API de données aussi: voir http://code.google.com/intl/fr/apis/contacts/docs/3.0/developers_guide_protocol.html#retrieving_photo

+1

mais comment récupérer la photo pour l'utilisateur connecté? J'ai essayé https: //www.google.com/m8/feeds/photos/media/default/[email protected]? Access_token = ... mais j'ai reçu l'erreur "Echec de la requête photo - ID de contact invalide". –

+0

Dans votre URL, URLencode juste l'adresse e-mail (écrire% 40 au lieu de @) et cela devrait fonctionner ... – olivierlemasle

+0

Je viens de découvrir une nouvelle API Google que vous pouvez utiliser: Portable Contacts API (http: // code. google.com/intl/fr-FR/apis/contacts/docs/poco/1.0/developers_guide.html) Il est plus facile de récupérer la photo de l'utilisateur: vous authentifiez avec la portée https://www-opensocial.googleusercontent.com/api/gens /, vous obtenez des informations d'utilisateur avec la demande https://www-opensocial.googleusercontent.com/api/people/@me/@self et il contient l'URL de la photo ... – olivierlemasle

15

L'API de contacts fonctionne peut-être, mais vous devez demander la permission de l'utilisateur d'accéder à tous les contacts. Si j'étais un utilisateur, cela me rendrait méfiant d'accorder la permission (parce que cela vous donne essentiellement la permission de spammer tous mes contacts ...)

J'ai trouvé la réponse ici pour être utile, et ne demande que "basic" informations sur le profil ":

Get user info via Google API

J'ai utilisé avec succès cette approche, et peut le confirmer retourne l'objet JSON suivant:

{ 
    "id": "..." 
    "email": "...", 
    "verified_email": true, 
    "name": "....", 
    "given_name": "...", 
    "family_name": "...", 
    "link": "...", 
    "picture": "...", 
    "gender": "male", 
    "locale": "en" 
} 
+1

+1 pour cette réponse car elle adresse réellement les API Google que la question posée, par opposition à la réponse acceptée actuellement qui est juste du code Java aléatoire. –

1

la façon la plus simple d'obtenir cette information serait de Google + API Plus précisément, le

https://developers.google.com/+/api/latest/people/get

Lorsque vous utilisez l'api utiliser les éléments suivants HTTP GET:

GET https://www.googleapis.com/plus/v1/people/me 

Cela renverra toutes les informations ci-dessus demandée à l'utilisateur.

-1

Utilisez ce code pour accéder Google Gmail Connexion Credential oauth2:

Nom de la classe: OAuthHelper

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 
import java.util.Map.Entry; 
import java.util.SortedSet; 

import oauth.signpost.OAuth; 
import oauth.signpost.OAuthConsumer; 
import oauth.signpost.OAuthProvider; 
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; 
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider; 
import oauth.signpost.commonshttp.HttpRequestAdapter; 
import oauth.signpost.exception.OAuthCommunicationException; 
import oauth.signpost.exception.OAuthExpectationFailedException; 
import oauth.signpost.exception.OAuthMessageSignerException; 
import oauth.signpost.exception.OAuthNotAuthorizedException; 
import oauth.signpost.http.HttpParameters; 
import oauth.signpost.signature.HmacSha1MessageSigner; 
import oauth.signpost.signature.OAuthMessageSigner; 

import org.apache.commons.codec.binary.Base64; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.util.Log; 

public class OAuthHelper { 

private static final String TAG = "OAuthHelper"; 
private OAuthConsumer mConsumer; 
private OAuthProvider mProvider; 
private String mCallbackUrl; 

public OAuthHelper(String consumerKey, String consumerSecret, String scope, String callbackUrl) throws UnsupportedEncodingException { 


    mConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret); 
    mProvider = new CommonsHttpOAuthProvider("https://www.google.com/accounts/OAuthGetRequestToken?scope=" + URLEncoder.encode(scope, "utf-8"), "https://www.google.com/accounts/OAuthGetAccessToken", "https://www.google.com/accounts/OAuthAuthorizeToken?hd=default"); 
    mProvider.setOAuth10a(true); 
    mCallbackUrl = (callbackUrl == null ? OAuth.OUT_OF_BAND : callbackUrl); 
} 

public String getRequestToken() throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { 
    String authUrl = mProvider.retrieveRequestToken(mConsumer, mCallbackUrl); 
    System.out.println("Gautam AUTH URL : " + authUrl); 
    return authUrl; 
} 

public String[] getAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { 
    mProvider.retrieveAccessToken(mConsumer, verifier); 
    return new String[] { mConsumer.getToken(), mConsumer.getTokenSecret() }; 
} 

public String[] getToken() { 
    return new String[] { mConsumer.getToken(), mConsumer.getTokenSecret() }; 
} 

public void setToken(String token, String secret) { 
    mConsumer.setTokenWithSecret(token, secret); 
} 

public String getUrlContent(String url) throws OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException, IOException { 
    HttpGet request = new HttpGet(url); 
    // sign the request 
    mConsumer.sign(request); 
    // send the request 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse response = httpClient.execute(request); 
    // get content 
    BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    StringBuffer sb = new StringBuffer(""); 
    String line = ""; 
    String NL = System.getProperty("line.separator"); 
    while ((line = in.readLine()) != null) 
     sb.append(line + NL); 
    in.close(); 
    System.out.println("gautam INFO : " + sb.toString()); 
    return sb.toString(); 
} 

public String getUserProfile(String t0, String t1, String url) { 

    try { 
     OAuthConsumer consumer = new CommonsHttpOAuthConsumer(t0, t1); 
     HttpGet request = new HttpGet(url); 
     // sign the request 
     consumer.sign(request); 
     // send the request 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpResponse response = httpClient.execute(request); 


     BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     //String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) 
      sb.append(line); 
     in.close(); 
     System.out.println("Gautam Profile : " + sb.toString()); 
     return sb.toString(); 

    } catch (Exception e) { 
     System.out.println("Error in Geting profile Info : " + e); 
     return ""; 
    } 

} 

public String buildXOAuth(String email) { 
    String url = String.format("https://mail.google.com/mail/b/%s/smtp/", email); 
    HttpRequestAdapter request = new HttpRequestAdapter(new HttpGet(url)); 

    // Sign the request, the consumer will add any missing parameters 
    try { 
     mConsumer.sign(request); 
    } catch (OAuthMessageSignerException e) { 
     Log.e(TAG, "failed to sign xoauth http request " + e); 
     return null; 
    } catch (OAuthExpectationFailedException e) { 
     Log.e(TAG, "failed to sign xoauth http request " + e); 
     return null; 
    } catch (OAuthCommunicationException e) { 
     Log.e(TAG, "failed to sign xoauth http request " + e); 
     return null; 
    } 

    HttpParameters params = mConsumer.getRequestParameters(); 
    // Since signpost doesn't put the signature into params, 
    // we've got to create it again. 
    OAuthMessageSigner signer = new HmacSha1MessageSigner(); 
    signer.setConsumerSecret(mConsumer.getConsumerSecret()); 
    signer.setTokenSecret(mConsumer.getTokenSecret()); 
    String signature; 
    try { 
     signature = signer.sign(request, params); 
    } catch (OAuthMessageSignerException e) { 
     Log.e(TAG, "invalid oauth request or parameters " + e); 
     return null; 
    } 
    params.put(OAuth.OAUTH_SIGNATURE, OAuth.percentEncode(signature)); 

    StringBuilder sb = new StringBuilder(); 
    sb.append("GET "); 
    sb.append(url); 
    sb.append(" "); 
    int i = 0; 
    for (Entry<String, SortedSet<String>> entry : params.entrySet()) { 
     String key = entry.getKey(); 
     String value = entry.getValue().first(); 
     int size = entry.getValue().size(); 
     if (size != 1) 
      Log.d(TAG, "warning: " + key + " has " + size + " values"); 
     if (i++ != 0) 
      sb.append(","); 
     sb.append(key); 
     sb.append("=\""); 
     sb.append(value); 
     sb.append("\""); 
    } 
    Log.d(TAG, "xoauth encoding " + sb); 

    Base64 base64 = new Base64(); 
    try { 
     byte[] buf = base64.encode(sb.toString().getBytes("utf-8")); 
     return new String(buf, "utf-8"); 
    } catch (UnsupportedEncodingException e) { 
     Log.e(TAG, "invalid string " + sb); 
    } 

    return null; 
} 

} 

// ================ ===================

Créer: WebViewActivity.class

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.Window; 
import android.webkit.CookieManager; 
import android.webkit.CookieSyncManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


public class WebViewActivity extends Activity { 

//WebView webview; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_PROGRESS); 

    WebView webview = new WebView(this); 
    webview.getSettings().setJavaScriptEnabled(true); 
    setContentView(webview); 

    // Load the page 
    Intent intent = getIntent(); 
    if (intent.getData() != null) { 
     webview.loadUrl(intent.getDataString()); 
    } 

    webview.setWebChromeClient(new WebChromeClient() { 
     // Show loading progress in activity's title bar. 
     @Override 
     public void onProgressChanged(WebView view, int progress) { 
      setProgress(progress * 100); 
     } 
    }); 
    webview.setWebViewClient(new WebViewClient() { 
     // When start to load page, show url in activity's title bar 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      setTitle(url); 

      if (url.startsWith("my-activity")) { 
       Intent result = new Intent(); 
       System.out.println("Gautam my-activity : " + url); 
       result.putExtra("myurl", url); 
       setResult(RESULT_OK, result); 
       finish(); 

      } 


     } 


     @Override 
     public void onPageFinished(WebView view, String url) { 
      System.out.println("Gautam Page Finish..."); 
      CookieSyncManager.getInstance().sync(); 
      // Get the cookie from cookie jar. 
      String cookie = CookieManager.getInstance().getCookie(url); 
      System.out.println("Gautam Cookie : " + cookie); 
      if (cookie == null) { 
      return; 
      } 
      // Cookie is a string like NAME=VALUE [; NAME=VALUE] 
      String[] pairs = cookie.split(";"); 
      for (int i = 0; i < pairs.length; ++i) { 
      String[] parts = pairs[i].split("=", 2); 
      // If token is found, return it to the calling activity. 

      System.out.println("Gautam=> "+ parts[0] + " = " + parts[1]); 
       if (parts.length == 2 && parts[0].equalsIgnoreCase("oauth_token")) { 
        Intent result = new Intent(); 
        System.out.println("Gautam AUTH : " + parts[1]); 
        result.putExtra("token", parts[1]); 
        setResult(RESULT_OK, result); 
        finish(); 
       } 
      } 
     } 



    }); 


} 
} 

// =========================

appeler depuis: MainActivity.class

import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import oauth.signpost.OAuthConsumer; 
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; 
import oauth.signpost.http.HttpResponse; 


import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity implements OnClickListener{ 

Button btnLogin; 

OAuthHelper MyOuthHelper; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnLogin = (Button)findViewById(R.id.btnLogin); 
    btnLogin.setOnClickListener(this); 


} 


@Override 
protected void onResume() { 


    /*System.out.println("On Resume call "); 
    try { 
     String[] token = getVerifier(); 
     if (token != null){ 
      String accessToken[] = MyOuthHelper.getAccessToken(token[1]);   
     }   
    } catch (Exception e) { 
     System.out.println("gautam error on Resume : " + e); 
    }*/ 



    super.onResume(); 
} 

private String[] getVerifier(String url) { 
    // extract the token if it exists 
    Uri uri = Uri.parse(url); 
    if (uri == null) { 
     return null; 
    } 
    String token = uri.getQueryParameter("oauth_token"); 
    String verifier = uri.getQueryParameter("oauth_verifier"); 
    return new String[] { token, verifier }; 
} 


@Override 
public void onClick(View v) { 

    try { 
     MyOuthHelper = new OAuthHelper("YOUR CLIENT ID", "YOUR SECRET KEY", "https://www.googleapis.com/auth/userinfo.profile", "my-activity://localhost");   
    } catch (Exception e) { 
     System.out.println("gautam errorin Class call : " + e); 
    } 

    try { 
     String uri = MyOuthHelper.getRequestToken(); 

     Intent intent = new Intent(MainActivity.this, WebViewActivity.class); 
     intent.setData(Uri.parse(uri)); 
     startActivityForResult(intent, 0); 


/*   startActivity(new Intent("android.intent.action.VIEW", 
     Uri.parse(uri)));*/ 
    } catch (Exception e) { 
     System.out.println("Gautm Error in getRequestTokan : " + e); 

    } 
} 



@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 0: 
     if (resultCode != RESULT_OK || data == null) { 
     return; 
     } 
     // Get the token. 
     String url = data.getStringExtra("myurl"); 
     try { 
      String[] token = getVerifier(url); 
      if (token != null){ 
       String accessToken[] = MyOuthHelper.getAccessToken(token[1]); 
       System.out.println("Gautam Final [0] : " + accessToken[0] + " , [1] : " + accessToken[1]); 

       //https://www.googleapis.com/oauth2/v1/userinfo?alt=json 

//     String myProfile = MyOuthHelper.getUserProfile(accessToken[0], accessToken[1], "https://www.googleapis.com/oauth2/v1/userinfo?alt=json"); 
       String myProfile = MyOuthHelper.getUrlContent("https://www.googleapis.com/oauth2/v1/userinfo?alt=json"); 

      }   
     } catch (Exception e) { 
      System.out.println("gautam error on Resume : " + e); 
     } 
     return; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 





} 

// =================================

Et enfin vos informations de profil à venir, il suffit de regarder dans votre Logcat message d'impression.

Note: Non oublié de mettre la permission Internet dans le fichier Manifest

Et votre application enregistrer dans Google Console ID client et clé secrète Pour App Inscription S'il vous plaît Recherche cette étape: App Registration Step

1

utiliser ce code se firstName et lastName d'un utilisateur Google

final HttpTransport transport = new NetHttpTransport(); 
    final JsonFactory jsonFactory = new JacksonFactory(); 
    GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory) 
      .setAudience(Arrays.asList(clientId)) 
      .setIssuer("https://accounts.google.com") 
      .build(); 

    GoogleIdToken idToken = null; 
    try { 
     idToken = verifier.verify(googleAuthenticationPostResponse.getId_token()); 
    } catch (GeneralSecurityException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    GoogleIdToken.Payload payload = null; 
    if (idToken != null) { 
     payload = idToken.getPayload(); 
    } 
    String firstName = payload.get("given_name").toString(); 
    String lastName = payload.get("family_name").toString(); 
Questions connexes