【问题标题】:Facebook API doesn't return emailFacebook API 不返回电子邮件
【发布时间】:2017-05-16 13:52:14
【问题描述】:

我知道有人问过这个问题,但几乎只有一个答案或什至没有答案。

我不知道是我缺乏理解还是缺乏 Facebook 文档,但到目前为止我有这段代码来检索用户电子邮件。

callbackManager = CallbackManager.Factory.create();
    mFbLoginManager.registerCallback(
            callbackManager,
            new FacebookCallback < LoginResult > () {
                @Override
                public void onSuccess(final LoginResult loginResult) {
                    // Handle success
                    Log.i(TAG, "callBack Login Result: LoginManager success - " + loginResult.toString());
                    GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject userObject, GraphResponse response) {
                            if (response.getError() == null) {
                                try {
                                    AccessToken token = AccessToken.getCurrentAccessToken();
                                    Log.e(TAG, token.getToken());
                                    Log.e(TAG, userObject.toString());
                                    email = userObject.getString("email");
                                } catch (JSONException ex) {
                                    Log.e(TAG, "Not such permissions for email!");
                                    ex.printStackTrace();
                                }
                                Log.d(TAG, "Email fetched: " + email);
                            }else{
                                Log.e(TAG, "Something went wrong with fetching email with GraphRequest");
                            }
                        }
                    }).executeAsync();
                }

JSON 字符串只返回名称和 ID,因此我的电子邮件变量为空。

让我感到困扰的部分是,当我在 Graph Explorer 或 link 上测试它时,我收到了电子邮件。

我在开发人员网站仪表板和我的代码(当用户按下 facebook 登录按钮时位于 onClick() 内部)也拥有 se 权限: mFbLoginManager.logInWithReadPermissions(LoginActivity.this, Arrays.asList("user_photos", "email", "public_profile")

所以我不确定我的代码有什么问题。登录按钮是自定义的,而不是 facebook LoginButton,我不知道这是否重要。

欢迎任何帮助

【问题讨论】:

标签: java android facebook-graph-api facebook-android-sdk


【解决方案1】:

在 Gradle 中添加以下 depandancy

implementation 'com.facebook.android:facebook-android-sdk:4.11.0'

在此处输入代码

 FacebookSdk.sdkInitialize(this);
    callbackManager =CallbackManager.Factory.create();

    // -----start putting in oncreate-----------------------

    LoginManager.getInstance().logInWithReadPermissions(UserActivity.this, Arrays.asList("public_profile", "user_friends","email"));

    facebookTime();

    //----onclicklisterner ---------------/

            callbackManager.onActivityResult(requestCode,resultCode,data);

    //---onactivityresult-------------/

    public void facebookTime() {
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        System.out.println("Success");
                        GraphRequest request = GraphRequest.newMeRequest(
                                loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(JSONObject object, GraphResponse response) {
                                        //   Util.showCenteredToast(getActivity(), "object" + object);
                                        //     Util.showCenteredToast(getActivity(), "GraphResponse" + response);
                                        try {
                                            strEmail = object.getString("email");
                                            strUserName = object.getString("name");
                                            String id = object.getString("id");
                                            // write your code here
                                            //asyncTask.iSocialMediaResponse = LoginFragment.this;
                                            asyncTask.execute();


                                        } catch (JSONException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                });
                        Bundle parameters = new Bundle();
                        parameters.putString("fields", "email,name");
                        //parameters.putString("fields", "user_friends");
                        request.setParameters(parameters);
                        //Log.e(" About to Graph Call", " ");
                        request.executeAsync();
                    }

                    @Override
                    public void onCancel() {
                        // App code
                        Util.showCenteredToast(UserActivity.this, "oncancel");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                        Util.showCenteredToast(UserActivity.this, "exception" + exception);
                    }
                });
    }

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

    }

【讨论】:

  • 在 sn-p 上困扰我的部分是如何实际存储电子邮件。另外我必须在异步任务完成后获取数据
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2013-08-25
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2017-11-16
相关资源
最近更新 更多