【问题标题】:Cannot retrieve data from Facebook SDK无法从 Facebook SDK 检索数据
【发布时间】:2016-06-08 12:21:10
【问题描述】:

任何想法,为什么我无法从 Facebook 收到电子邮件?我收到了类似的错误 - “电子邮件”或类似的东西没有价值。

    private void fbInit() {
    // Initialize the SDK before executing any other operations,
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    callbackManager = CallbackManager.Factory.create();

    // get new instance of fb
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    loginResult.getAccessToken().getUserId();

                    getFbData(loginResult.getAccessToken().getUserId());
                }

                @Override
                public void onCancel() {

                }

                @Override
                public void onError(FacebookException error) {

                }
            });

    // access token tracker init
    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {
            // Set the access token using
            // currentAccessToken when it's loaded or set.
            accessToken = currentAccessToken;
            updateWithToken(currentAccessToken);
        }
    };

    // If the access token is available already assign it.
    accessToken = AccessToken.getCurrentAccessToken();
    updateWithToken(accessToken);

    // is this need?!
//        profileTracker = new ProfileTracker() {
//            @Override
//            protected void onCurrentProfileChanged(
//                    Profile oldProfile,
//                    Profile currentProfile) {
//                // App code
//            }
//        };
}

private void updateWithToken(AccessToken currentAccessToken) {
        // this way I check if there is email permission which is needed to register/login
        if (currentAccessToken != null
                && !currentAccessToken.getDeclinedPermissions().contains("email")
                && !currentAccessToken.getDeclinedPermissions().contains("basic_info")) {
            // go to other activity (?)
        } else {
            ActivityUtils.showToast(this, "no email permission");
        }
    }

private void getFbPermissions() {
    Collection<String> permissions = Arrays.asList("public_profile", "email", "user_photos", "user_birthday");
    LoginManager.getInstance().logInWithReadPermissions(this, permissions);
}

private void getFbData(String userId) {
    GraphRequest request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    if (response != null) {
                        try {
                            Log.i("LoginActivityFbResponse", response.toString());
                            ActivityUtils.showToast(getActivity(),
                                    object.getString("id") + object.getString("name") + object.getString("email")
                                            + object.getJSONArray("location").getString(1) + object.getString("locale")
                                            + object.getString("birthday") + object.getString("gender"));

                            // TODO: try to login
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id, name, email");
    request.setParameters(parameters);
    request.executeAsync();
}

顺便说一句。我想从 Facebook 至少获得以下数据:电子邮件、身份证、性别、生日、位置名称。

【问题讨论】:

标签: android facebook facebook-graph-api android-studio exception


【解决方案1】:

您收到生日错误,因为您在 GraphRequest 中没有生日权限。 像这样使用它:

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();

你可以试试这个并带来结果吗?

【讨论】:

  • 在我阅读了这篇文章中的 cmets 之后,我得到了这个:parameters.putString("fields", "id, name, email, gender, birthday, picture.type(large)");。但仍然只有生日没有错误的价值:No value for birthday...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2012-06-02
  • 1970-01-01
相关资源
最近更新 更多