【问题标题】:Android Programming -- Retrieving User's Facebook Email and NameAndroid 编程——检索用户的 Facebook 电子邮件和姓名
【发布时间】:2016-03-08 22:50:31
【问题描述】:

当要求用户通过 Facebook 登录登录我的应用程序时,我想检索他们的电子邮件和姓名,以便他们为我们的应用程序创建一个自定义帐户。但是,在要求他们通过 Facebook 登录并授权我们的应用获取用户名和电子邮件后,应用不会转换到注册片段并将信息输入到电子邮件和姓名字段中。

在 LoginFragment 中,我有这段代码专门用于检索用户的电子邮件和姓名。

    mFaceLogin = (LoginButton) v.findViewById(R.id.login_button);
    mFaceLogin.setReadPermissions(Arrays.asList("email", "public_profile"));
    mFaceLogin.setFragment(this);
    mFaceLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            final AccessToken accessToken = loginResult.getAccessToken();
            GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    if (graphResponse.getError() == null) {
                        ((MyRegisterListener) getActivity()).myStartRegisterFacebook(user.optString("first_name"), user.optString("email"));
                    }
                }
            });
        }

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

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

myStartRegisterFacebook 方法假设调用 Activity 以切换到 RegisterFragment 并将名称和电子邮件发送到 RegisterFragment 的 xml 布局中显示的 EditText 字段。

登录活动

@Override
public void myStartRegisterFacebook(String name, String email) {
    RegisterFragment registerFragment = new RegisterFragment();
    getSupportFragmentManager().beginTransaction().replace(R.id.lr_container,
            new RegisterFragment()).addToBackStack(null).commit();
    registerFragment.updateInformation(name, email);
}

注册片段

    public void updateInformation(String name, String email) {
    mFname.setText(name);
    mEmail.setText(email);
}

【问题讨论】:

标签: android facebook email


【解决方案1】:

您可以使用 GraphAPI 获取电子邮件和姓名

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");
                                    final String userName =me.optString("name");

                                }
                            }
                }).executeAsync();

【讨论】:

    【解决方案2】:

    尝试替换这一行:

    if (graphResponse.getError() == null) {
        ((MyRegisterListener) getActivity()).myStartRegisterFacebook(user.optString("first_name"), user.optString("email"));
    }
    

    用这一行:

    if (graphResponse != null) {
        JSONObject obj = graphResponse.getJSONObject();
    
        try {
            ((MyRegisterListener) getActivity()).myStartRegisterFacebook(obj.getString("first_name"), obj.getString("email"));
        } catch (JSONException e) {
            Log.e("JSONError:", e.toString());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多