2015-04-12 5 views
11

Ich versuche, die E-Mail-Adresse des Benutzers zu erhalten, sobald er in meiner Android App mit Facebook (sdk 4.0) eingeloggt ist. Ich habe viele Beiträge gelesen, die dasselbe fragen, aber ich konnte es immer noch nicht schaffen. Ich log einfach den Benutzer mit dem CodeWie bekomme ich die E-Mail-Adresse des angemeldeten Benutzers mit Graph Anfrage in Facebook Android SDK 4.0

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

Dann habe ich die Graph API-Anfrage machen mit

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 
       } 
      }); 

Der Ausgang ist nur

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

Auch wenn ich die "Felder" entfernen Teil, ich bekomme ein JSON mit einer Reihe von öffentlichen Informationen des Benutzers, aber nie das E-Mail-Feld. Ich teste das auf meinem eigenen Facebook-Konto und ich habe eine E-Mail-Adresse damit verbunden.

+0

Haben Sie eine Antwort auf Ihre Frage gefunden? Wenn ja, bitte posten Sie es hier als Antwort. –

+0

Eigentlich arbeitete der Code in Ihrer Frage für mich vor allem die Antworten unten, danke Mann –

Antwort

11

Sie können die angemeldeten Benutzer E-Mail erhalten, wie folgt, aber beachten Sie, dass

  1. Sie garantiert nicht Sie eine E-Mail-Adresse read here bekommen.

  2. In einigen Fällen, obwohl der Benutzer eine E-Mail angegeben hat, wird die Anfrage nicht angezeigt, wenn die E-Mail nicht gültig ist.

    @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

Herr pRaNay, danke für die Bearbeitung, zu schätzen, dass –

11

Dies ist die komplette Code, durch die ich die Daten alles, was wir von Facebook benötigen bekommen

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 
     } 
    }); 

Und die Antwort des Anrufs in Protokoll:

{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} 

Hoffe das wird dir helfen.

+1

Danke, das ist die einzige Lösung, die in meinem Fall funktioniert. – Lucia

+0

Danke dude .. es hat mir auch geholfen :) –

+0

Siehe alle Parameter hier 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" ist die E-Mail-Erlaubnis, ich fehlte, dass, wenn ich es ich die Dinge wurden hinzugefügt arbeiten.

Verwandte Themen