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