在使用SDK 4.0的Android中登录成功后,我需要用户的电子邮件地址 [英] I need user's email address after successful facebook login in android using SDK 4.0

查看:162
本文介绍了在使用SDK 4.0的Android中登录成功后,我需要用户的电子邮件地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经整合了最新的Facebook android sdk 4.0。在成功登录后,SDK 3.0+用户的电子邮件地址将使用user.getProperty(email)进行存储。我正在寻找相应的命令在Facebook Android sdk 4.0
参考链接:



https://developers.facebook.com/docs/facebook-login/android/v2.3#overview
< a href =https://developers.facebook.com/docs/android/upgrading-4.x =noreferrer> https://developers.facebook.com/docs/android/upgrading-4.x

  @Override 
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState );
FacebookSdk.sdkInitialize(getActivity()。getApplicationContext());
callbackManager = CallbackManager.Factory.create();
}

@Override
public void onViewCreated(View view,@Nullable Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
loginButton =(LoginButton)view.findViewById(R.id.login_button);
loginButton.setReadPermissions(email,user_likes,user_friends);
loginButton.setFragment(this);
setFacebookLoginText(loginButton);
//其他应用程序特定专门化

//回调注册
loginButton.registerCallback(callbackManager,new FacebookCallback< LoginResult>(){
@Override
public void onSuccess(LoginResult loginResult){
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(accessToken,new GraphRequest.GraphJSONObjectCallback(){
@Override
public void onCompleted(JSONObject user,GraphResponse graphResponse){

//登录成功后需要用户电子邮件地址

}
})executeAsync();


@Override
public void onCancel(){
Toast.makeText(getActivity(),fail,Toast.LENGTH_SHORT).show();
}

@Override
public void onError(FacebookException exceptio n){
Toast.makeText(getActivity(),error,Toast.LENGTH_SHORT).show();
}
});

}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){
查看视图= inflater.inflate(R。 layout.fragment_facebook_login,container,false);
返回视图;
}


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


解决方案

只需要在FacebookCallBack的onSuccess方法中将GraphRequest更改为GraphRequestAsyncTask,然后可以轻松地从JSONObject中获取用户详细信息。

  @Override 
public void onSuccess(LoginResult loginResult){
final AccessToken accessToken = loginResult.getAccessToken();
final FBUser fbUser = new FBUser();
GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken,new GraphRequest.GraphJSONObjectCallback(){
@Override
public void onCompleted(JSONObject user,GraphResponse graphResponse){
fbUser.setEmail .optString(email));
fbUser.setName(user.optString(name));
fbUser.setId(user.optString(id));
}
})。executeAsync();
}


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 corresponding command in Facebook Android sdk 4.0 Reference Links:

https://developers.facebook.com/docs/facebook-login/android/v2.3#overview https://developers.facebook.com/docs/android/upgrading-4.x

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("email", "user_likes", "user_friends");
    loginButton.setFragment(this);
    setFacebookLoginText(loginButton);
    // Other app specific specialization

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            AccessToken accessToken = loginResult.getAccessToken();
            GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {

                  //Need User email address after login success.

                }
            }).executeAsync();
        }

        @Override
        public void onCancel() {
            Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException exception) {
            Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show();
        }
    });

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_facebook_login, container, false);
    return view;
}


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

解决方案

Yeah it worked. 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.

        @Override
        public void onSuccess(LoginResult loginResult) {
            final AccessToken accessToken = loginResult.getAccessToken();
            final FBUser fbUser = new FBUser();
            GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    fbUser.setEmail(user.optString("email"));
                    fbUser.setName(user.optString("name"));
                    fbUser.setId(user.optString("id"));
                }
            }).executeAsync();
        }

这篇关于在使用SDK 4.0的Android中登录成功后,我需要用户的电子邮件地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆