2015-04-12 5 views
11

Sto cercando di ottenere l'indirizzo email dell'utente una volta che ha effettuato l'accesso alla mia app Android con Facebook (sdk 4.0). Ho letto molti post chiedendo la stessa cosa ma non riuscivo ancora a farlo funzionare. I log semplicemente l'utente con il codiceCome ottenere l'indirizzo email dell'utente registrato con Richiesta grafico in Facebook Android sdk 4.0

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email")); 

Poi faccio la richiesta API Grafico con

LoginManager.getInstance().registerCallback(fbCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        System.out.println(loginResult.getAccessToken().toString()); 

        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(
             JSONObject object, 
             GraphResponse response) { 
            System.out.println(object.toString()); 

           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "email"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        // App code 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        // App code 
       } 
      }); 

L'uscita è solo

{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[public_profile, contact_email, user_friends, email, basic_info]} 
{"id":"xxxxxxxxxxxxxxx"} 

Anche se rimuovere i "campi" parte, ottengo un JSON con un gruppo di informazioni pubbliche dell'utente, ma mai il campo email. Sto testando questo sul mio account Facebook, e ho un indirizzo email associato ad esso.

+0

hai trovato una risposta per la tua domanda? Se sì, per favore postalo qui come risposta. –

+0

In realtà il codice nella tua domanda ha funzionato per me sopra tutte le risposte qui sotto, grazie uomo –

risposta

11

è possibile ottenere l'e-mail utente collegato come segue, Ma nota che,

  1. Essi non garantiti si otterrà un indirizzo email read here.

  2. In alcuni casi, sebbene l'utente abbia fornito un'e-mail, non verrà inviata tramite richiesta, se l'e-mail non è valida.

    @Override 
    public void onSuccess(LoginResult loginResult) { 
    
    
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object,GraphResponse response) { 
          try { 
           String email=object.getString("email"); 
           Log.d(TAG + "user email ", email); 
           } catch (JSONException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
    
          } 
    
          }); 
    
          request.executeAsync();       
    } 
    
+1

Mr pRaNay, grazie per il montaggio, apprezzo che –

11

Ecco il codice completo attraverso il quale io ottenere tutti i dati che ci servono da facebook

login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button); 
    login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday")); 
    //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    // Callback registration 
    login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
      Log.e("onSuccess", "--------" + loginResult.getAccessToken()); 
      Log.e("Token", "--------" + loginResult.getAccessToken().getToken()); 
      Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions()); 
      Profile profile = Profile.getCurrentProfile(); 
      Log.e("ProfileDataNameF", "--" + profile.getFirstName()); 
      Log.e("ProfileDataNameL", "--" + profile.getLastName()); 

      Log.e("Image URI", "--" + profile.getLinkUri()); 

      Log.e("OnGraph", "------------------------"); 
      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(
           JSONObject object, 
           GraphResponse response) { 
          // Application code 
          Log.e("GraphResponse", "-------------" + response.toString()); 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,link,gender,birthday,email"); 
      request.setParameters(parameters); 
      request.executeAsync(); 

     } 

     @Override 
     public void onCancel() { 
      // App code 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }); 

E la risposta della chiamata in log è:

{Response: responseCode: 200, graphObject: {"id":"896337040431723","name":"Aneh Thakur","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/896337040431723\/","gender":"male","birthday":"08\/05\/1992","email":"[email protected]"}, error: null} 

Spero che questo ti possa aiutare.

+1

Grazie, questa è l'unica soluzione che ha funzionato nel mio caso. – Lucia

+0

Grazie amico ... mi ha aiutato anche io :) –

+0

Vedere tutti i parametri qui https://developers.facebook.com/docs/graph-api/reference/v2.6/user –

0
fbLoginButton.setReadPermissions("public_profile", "user_friends", "user_photos", "email", "user_birthday", "public_profile", "contact_email"); 

"contact_email" è l'autorizzazione e-mail, mi mancava che quando ho aggiunto al ho ottenuto le cose di lavoro.