2016-06-05 6 views
2

ich den folgenden Code bin mit E-Mail und den Namen des BenutzersErste E-Mail von Facebook - FB Android SDK

von facebook
protected void onCreate(Bundle savedInstanceState) { 

    //Display page 
    setContentView(R.layout.activity_main); 
    AppEventsLogger.activateApp(MainActivity.this); 

    FBloginButton = (Button) findViewById(R.id.fb_login_button); 
    callbackManager = CallbackManager.Factory.create(); 

    FBloginButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     //Login the user through facebook when button is clicked 
      onFblogin(); 
     } 
    }); 

} 

private void onFblogin() { 
    callbackManager = CallbackManager.Factory.create(); 

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

    //Try logging in the user 
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 

     @Override 
     public void onSuccess(LoginResult loginResult) { 

      GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 

       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 
        Log.i("LoginActivity", response.toString()); 

        // Get facebook data from login 
        try { 
         email = object.getString("email"); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

        try { 
         name = object.getString("name"); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        //new fbLogin().execute(); 

       } 
      }); 

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

     } 

     @Override 
     public void onCancel() { 
     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 
} 

jedoch zu bekommen, dies gibt nur den Namen und die E-Mail des Benutzers. Wie kann ich beides bekommen?

+0

gibt es viele Threads darüber schon, kann es viel sein Verwenden Sie einfach die Suchfunktion. (E-Mail nicht genehmigt, Token enthält keine korrekte Berechtigung, ...) – luschn

+0

object.optString ("email"); –

+0

@luschn Das Problem, das ich jetzt habe, ist, dass ich die E-Mail bekomme, wenn ich zum zweiten Mal auf die Login-Taste klicke – Ankush

Antwort

3

Meine Arbeitsweise wie:

public void getUserDetailsFromFB(AccessToken accessToken) { 

    GraphRequest req=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
     @Override 
     public void onCompleted(JSONObject object, GraphResponse response) { 
      Toast.makeText(getApplicationContext(),"graph request completed",Toast.LENGTH_SHORT).show(); 
      try{ 
       String email = object.getString("email"); 
       String birthday = object.getString("birthday"); 
       String gender = object.getString("gender"); 
       String name = object.getString("name"); 
       String id = object.getString("id"); 
       String photourl =object.getJSONObject("picture").getJSONObject("data").getString("url"); 

      }catch (JSONException e) 
      { 
       Toast.makeText(getApplicationContext(),"graph request error : "+e.getMessage(),Toast.LENGTH_SHORT).show(); 

      } 

     } 
    }); 
    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "id,name,email,gender,birthday,picture.type(large)"); 
    req.setParameters(parameters); 
    req.executeAsync(); 
} 

Dann in Ihrem LoginButton:

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(final LoginResult loginResult) { 
      getUserDetailsFromFB(loginResult.getAccessToken()); 

     } 
     @Override 
     public void onCancel() { 
      Toast.makeText(getApplicationContext(),"fb user canceled",Toast.LENGTH_SHORT).show(); 
     } 
     @Override 
     public void onError(FacebookException e) { 
      Toast.makeText(getApplicationContext(),"fb error",Toast.LENGTH_SHORT).show(); 
     } 
    }); 

Init wie:

LoginButton loginButton =(LoginButton)findViewById(R.id.facebook_login_button); 

<com.facebook.login.widget.LoginButton 
       android:id="@+id/facebook_login_button" 
       xmlns:facebook="http://schemas.android.com/apk/res-auto" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       facebook:com_facebook_login_text="Fb login button" 
       android:layout_gravity="center_horizontal|bottom" 
       android:textSize="20dp" 
       android:layout_centerHorizontal="true" /> 
+0

Ich bekomme Name, Bild, ID und Geschlecht, aber keine E-Mail – Ankush

+0

Sie haben diesen Artikel gelesen: http://stackoverflow.com/questions/17532476/facebook-email-field-return-null-even-if-the-email-permission-is-set-and-acce –

+0

Yeah, ich bin mir dessen bewusst. Ich habe gerade gemerkt, dass ich die E-Mail-Adresse erhalte, wenn ich zum zweiten Mal wieder auf den Login-Button klicke! Irgendeine Idee, warum das passiert – Ankush

Verwandte Themen