如何从Facebook LoginButton小部件获取用户的电子邮件? [英] How to get the email of a user from the facebook LoginButton widget?

查看:266
本文介绍了如何从Facebook LoginButton小部件获取用户的电子邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从Facebook LoginButton小部件获取用户的电子邮件?

How can I get the email of a user from the facebook LoginButton widget?

我越来越空了.我正在使用的应用ID是正确的.我也可以获得正确的名称,但是电子邮件丢失了.我有权限.

I am getting null. The App Id I am using is correct. I can also get the correct name, but the email is missing. I do have permissions.

这是我的代码:

import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;

// ...

public class MainActivity extends FragmentActivity {

    // ...

    @Override
    public void onCreate(Bundle savedInstanceState) {

        //

        LoginButton loginBtn = (LoginButton) findViewById(R.id.fb_login_button);

        loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
            @Override
            public void onUserInfoFetched(GraphUser user) {
                if (user != null) {
                    userName.setText("Hello, " + user.getName());
                    Toast.makeText(getApplicationContext(),
                            "User Name is , " + user.getName(), Toast.LENGTH_LONG)
                            .show();
                    Toast.makeText(getApplicationContext(),
                            "Email Id is , " + user.getProperty("email") , Toast.LENGTH_LONG)
                            .show();
                } else {
                    userName.setText("You are not logged");
                }
            }  
        });
    }


    // ...

    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions","email","basic_info");

    public void requestPermissions() {
        Session s = Session.getActiveSession();
        if (s != null)
            s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
                    this, PERMISSIONS));
    }

推荐答案

public class Login extends ActionBarActivity {

    private CallbackManager callbackManager;
    String emailid, gender, bday, username;
    private LoginButton loginButton;

    ProfilePictureView profilePictureView;

    TextView info;
    private AccessTokenTracker accessTokenTracker;

    private ProgressDialog pDialog;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);

        FacebookSdk.sdkInitialize(this.getApplicationContext());

        callbackManager = CallbackManager.Factory.create();

        setContentView(R.layout.login);

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

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

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

                    }

                    @Override
                    public void onCancel() {

                    }

                    @Override
                    public void onError(FacebookException e) {

                    }
                });

    }

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

    class fblogin extends AsyncTask<AccessToken, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("wait.");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        protected String doInBackground(AccessToken... params) {
            GraphRequest request = GraphRequest.newMeRequest(params[0],
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object,
                                GraphResponse response) {

                            Log.v("LoginActivity", response.toString());

                            try {

                                username = object.getString("first_name");

                                emailid = object.getString("email");

                                gender = object.getString("gender");

                                bday = object.getString("birthday");

                            } catch (JSONException e) {
                                // TODO Auto-generated catch
                                // block
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields",
                    "id,first_name,email,gender,birthday");
            request.setParameters(parameters);
            request.executeAndWait();

            return null;
        }

        protected void onPostExecute(String file_url) {

            pDialog.dismiss();

        }

    }


}

此方法以异步方式工作.

This method work in Async manner.

完成. !!

这篇关于如何从Facebook LoginButton小部件获取用户的电子邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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