java – Android Facebook SDK 4.X,如何获取电子邮件地址和Facebook访问令牌将其传递给Web服务

编辑:
我的问题是如何通过Facebook SDK 4.X获取电子邮件,UserId,Facebook身份验证,此刻,与Ming Respond,我知道如何获取电子邮件,用户ID,所以我的问题是如何从会话后获取Facebook身份验证GraphUser刚刚被LoginManager和Accesstoken所替代,并没有关于它的信息?
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.facebook.Accesstoken;
import com.facebook.AccesstokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import java.util.Arrays;

public class Registeractivity extends Activity {
    private String fbUserID;
    private String fbProfileName;
    private String fbAuthToken;
    private LoginButton fbLoginBtn;
    private static final String TAG = "FacebookLogin";
    CallbackManager callbackManager;
    private AccesstokenTracker accesstokenTracker;
    private ProfileTracker profileTracker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_activity);
        fbLoginBtn = (LoginButton) findViewById(R.id.connect_with_facebook_button);
        fbLoginBtn.setReadPermissions(Arrays.asList("email","user_photos","public_profile"));
        fbLoginBtn.setBackgroundResource(R.drawable.connect_facebook_button);


        accesstokenTracker = new AccesstokenTracker() {
            @Override
            protected void onCurrentAccesstokenChanged(
                    Accesstoken oldAccesstoken,Accesstoken currentAccesstoken) {
                fbAuthToken = currentAccesstoken.getToken();
                fbUserID = currentAccesstoken.getUserId();


                Log.d(TAG,"User id: " + fbUserID);
                Log.d(TAG,"Access token is: " + fbAuthToken);


            }
        };

        profileTracker = new ProfileTracker() {
            @Override
            protected void onCurrentProfileChanged(
                    Profile oldProfile,Profile currentProfile) {
                fbProfileName = currentProfile.getName();

                Log.d(TAG,"User name: " + fbProfileName );
            }
        };


        fbLoginBtn.registerCallback(callbackManager,new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

            }

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

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

    }


    @Override
    public void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
callbackManager.onActivityResult(requestCode,data);



    }

GraphRequest request = GraphRequest.newMeRequest(
        accesstoken,new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                    JSONObject user,GraphResponse response) {
                String id = user.optString("id");
                String firstName = user.optString("first_name");
                String lastName = user.optString("last_name");
                String email = user.optString("email");

            }

    @Override
    public void onSaveInstanceState(Bundle savedState) {
        super.onSaveInstanceState(savedState);
    }

解决方法

fbLoginBtn.registerCallback(callbackManager,new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        GraphRequest.newMeRequest(
            loginResult.getAccesstoken(),new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject me,GraphResponse response) {
                    if (response.getError() != null) {
                        // handle error
                    } else {
                        String email = me.optString("email");
                        String id = me.optString("id");
                        // send email and id to your web server
                    }
                }
            }).executeAsync();
    }

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

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...