Facebook Android SDK—;否';电子邮件';在梅雷克斯特

Facebook Android SDK—;否';电子邮件';在梅雷克斯特,android,facebook,facebook-sdk-4.0,facebook-sdk-4.x,Android,Facebook,Facebook Sdk 4.0,Facebook Sdk 4.x,我正在使用以下代码获取用户的电子邮件: AccessToken accessToken = AccessToken.getCurrentAccessToken(); GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCom

我正在使用以下代码获取用户的电子邮件:

    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
                          // Obtaining 
                        }
                    }).executeAsync();
通过调试器检查以下内容:

  • AccessToken实例包含权限“电子邮件”和“公共配置文件”
  • AccessToken实例拒绝的权限集为空
  • 结果JSONObject只包含用户id和名称,但不包含电子邮件
个人资料有电子邮件-我正在通过电子邮件进行身份验证

我正在使用Facebook SDK 4.5

编辑:通过直接HTTP图形api调用的请求返回电子邮件。但安卓SDK没有


如何修复?

我认为用户在通过facebook登录时可以指定没有电子邮件权限。因此,即使您期望它,您也可能无法获得电子邮件地址。

也许我们面临同样的问题,请尝试以下方法:

Bundle params=new Bundle();
params.putString("fields","id,name,email,verified"); //must specify the "fields" param, otherwise FB always return id and name only.
new GraphRequest(
    AccessToken.getCurrentAccessToken(),
    "/me",
    params,
    HttpMethod.GET,
    new GraphRequest.Callback() {
        public void onCompleted(GraphResponse response) {
        //do something...
        }
    }
).executeAsync();

尝试一下,您需要发送“电子邮件”,作为
GraphRequest
参数的一部分

GraphRequest request = GraphRequest.newMeRequest(
                            loginResult.getAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(
                                        JSONObject object,
                                        GraphResponse response) {
                                }
                            });

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();

您用于测试的配置文件是真实的配置文件吗?它是否与真实的电话号码关联并得到确认?@AlexeyKorolev,我已经用真实(我的)个人资料和测试“机器人”个人资料进行了测试。他们俩都没有电话号码。另外,参见编辑。参见“声明性字段”有什么新闻吗?我也有同样的问题。是的,我知道(并准备好了这个案例),但我已经用我自己的两个配置文件进行了测试,并且从来没有限制这个应用程序的电子邮件访问。另外,请参见编辑。