【问题标题】:Facebook throws a JSONException when fetching email valueFacebook 在获取电子邮件值时抛出 JSONException
【发布时间】:2017-05-24 07:35:38
【问题描述】:

我正在编写一个 Facebook Android 应用程序,我遇到的问题之一是获取用户的电子邮件地址。对于除一个以外的所有 Facebook 帐户,电子邮件地址都会引发异常。这是我的代码:

    loginButton = (LoginButton) findViewById(R.id.login_button);
    callbackManager = CallbackManager.Factory.create();

    loginButton.registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    String accessToken = 
                    loginResult.getAccessToken().getToken();
                    Log.i("accessToken", accessToken);

                    GraphRequest request = GraphRequest.newMeRequest
                            (loginResult.getAccessToken(), new 
                             GraphRequest.GraphJSONObjectCallback()
                            {
                                @Override
                                public void onCompleted(JSONObject object, 
                                  GraphResponse response)
                                {
                                    SharedPreferences.Editor editor = 
                                      sharedPref.edit();
                                    try
                                    {

                                        editor.putString("user_ID", 
                                          object.getString("id"));
                                        user_ID = object.getString("id");
                                        editor.putString("user_name." + 
                                          user_ID, object.isNull("name") ? 
                                          "" : object.getString("name"));
                                        editor.putString("email_addr." + 
                                          user_ID, object.isNull("email") ? 
                                          "" : object.getString("email"));
                                        editor.commit();
                                    }
                                    catch (Exception e)
                                    {
                                        Toast.makeText(LaunchPage.this, getString(R.string.login_error) + e.getMessage(), Toast.LENGTH_LONG).show();
                                        e.printStackTrace();
                                    }

                                }
                            });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id, name, email, gender, birthday, timezone, picture, locale, age_range");
                    request.setParameters(parameters);
                    request.executeAsync();
                }

我在这个问题上花了几天时间,我想我正在做其他几个发布的解决方案中建议的事情,但我的代码仍然失败。我尝试在失败的 Facebook 帐户中公开我的电子邮件地址,但这没有帮助。

【问题讨论】:

  • 是什么让您认为不应在问题中包含错误日志?
  • 您的setReadPermissions 是否在您的loginButton 中?
  • @Denny 是什么让您认为错误日志与此问题相关?我想知道哪个傻瓜对我的问题投了反对票。
  • 因为在你的问题中它说有一个异常,并且不知道它在哪里崩溃,它只是在猜测
  • @Denny 崩溃的地方很明显:它在 object.getString("email") 上。我使用 Android Studio 的调试器来获取我需要的所有信息,但信息并不多。

标签: android email facebook-graph-api facebook-android-sdk facebook-graph-api-v2.3


【解决方案1】:

试试这个代码:

在您的LoginButton 中添加setReadPermissions

 loginButton = (LoginButton) findViewById(R.id.login_button);
 loginButton.setReadPermissions(Arrays.asList(
            "public_profile", "email", "user_birthday", "user_friends"));

还要确保您的 Email 在您的 Facebook 帐户中是公开的。否则Graph api 不会返回。

【讨论】:

  • 公开电子邮件地址没有任何效果,正如我在原始帖子中提到的那样。无论如何,如果他们必须发布他们的电子邮件地址,就不会有很多应用用户。
【解决方案2】:

我突然想到,被退回的电子邮件地址是我自己的一个帐户,这可能与我是开发者这一事实有关。所以我检查了我的 Facebook 开发者控制台并发现了一个部分,角色,它可以让你识别测试人员。所以我添加了几个我的测试 FB ID,你瞧,我能够得到他们的电子邮件地址。生活又美好了。

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多