Skip to content Skip to sidebar Skip to footer

I Need User's Email Address After Successful Facebook Login In Android Using Sdk 4.0

I have integrated latest Facebook android sdk 4.0. In SDK 3.0+ user's email address is retreived using user.getProperty('email') after successful login. I am looking for correspond

Solution 1:

Yeah, it worked. The only thing required was to change GraphRequest to GraphRequestAsyncTask in onSuccess method of FacebookCallBack, and then user details could easily be fetched from the JSONObject.

@OverridepublicvoidonSuccess(LoginResult loginResult) {
            finalAccessTokenaccessToken= loginResult.getAccessToken();
            finalFBUserfbUser=newFBUser();
            GraphRequestAsyncTaskrequest= GraphRequest.newMeRequest(accessToken, newGraphRequest.GraphJSONObjectCallback() {
                @OverridepublicvoidonCompleted(JSONObject user, GraphResponse graphResponse) {
                    fbUser.setEmail(user.optString("email"));
                    fbUser.setName(user.optString("name"));
                    fbUser.setId(user.optString("id"));
                }
            }).executeAsync();
        }

FBUser Model Class

publicclassFBUser {
privateString displayName;
privateString email;

publicFBUser(String displayName, String email) {
    this.displayName= displayName;
    this.email = email;
}

publicFBUser() {

}

publicStringgetName() {
    return displayName;
}

publicvoidsetName(String displayName) {
    this.displayName = displayName;
}


publicStringgetEmail() {
    return email;
}

publicvoidsetEmail(String email) {
    this.email = email;
}

}

Solution 2:

In the new facebook graph you need to ask permissions for access that information. for example on the activity you have put the LoginButton you add this line in the OnCreate method

loginButtonFacebook.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday"));

Then you get that information

loginButtonFacebook.registerCallback(callbackManager, newFacebookCallback<LoginResult>() {
@OverridepublicvoidonSuccess(LoginResult loginResult) {
    GraphRequest.newMeRequest(
        loginResult.getAccessToken(), newGraphRequest.GraphJSONObjectCallback() {
            @OverridepublicvoidonCompleted(JSONObject me, GraphResponse response) {
                if (response.getError() != null) {
                    // handle error
                } else {
                    String email = me.optString("email");
                }
            }
        }).executeAsync();
}

Solution 3:

This will give you all the information from facebook sdk 4.0.0

fbloginButton.setReadPermissions("email");

    fbloginButton.registerCallback(callbackmanager, newFacebookCallback<LoginResult>() {
        @OverridepublicvoidonSuccess(LoginResult loginResult) {
            AccessToken accessToken = loginResult.getAccessToken();
           GraphRequest graphRequest=GraphRequest.newMeRequest(accessToken, newGraphRequest.GraphJSONObjectCallback() {
               @OverridepublicvoidonCompleted(JSONObject object, GraphResponse response) {

                   if (response.getError()!=null)
                   {
                       Log.e(TAG,"Error in Response "+ response);
                   }
                   else
                   {
                       email=object.optString("email");
                       Log.e(TAG,"Json Object Data "+object+" Email id "+ email);
                   }


               }
           });

            Bundle bundle=newBundle();
            bundle.putString("fields","id,email,name");
            graphRequest.setParameters(bundle);
            graphRequest.executeAsync();

        }

Solution 4:

Apart from that, test if you have permission, otherwise ask to your users again:

AccessToken accessToken=AccessToken.getCurrentAccessToken();
if (accessToken.getPermissions().contains("email")) {

} else {

}

Post a Comment for "I Need User's Email Address After Successful Facebook Login In Android Using Sdk 4.0"