【问题标题】:Facebook Android SDK — no 'email' in meRequestFacebook Android SDK — meRequest 中没有“电子邮件”
【发布时间】:2015-11-17 07:01:39
【问题描述】:

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

    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
                          // Obtaining 
                        }
                    }).executeAsync();

通过调试器检查以下内容:

  • AccessToken 实例包含权限“email”和“public_profile”
  • AccessToken 实例拒绝权限集为空
  • 生成的 JSONObject 仅包含用户 ID 和名称,但不包含电子邮件

个人资料有电子邮件 - 我正在通过电子邮件进行身份验证。

我正在使用 Facebook SDK 4.5

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

如何解决?

【问题讨论】:

  • 您用于测试的配置文件是真实配置文件吗?是否通过真实电话号码关联确认?
  • @AlexeyKorolev,我已经使用真实(我的)配置文件和测试“机器人”配置文件进行了测试。他们俩都没有电话号码。另请参阅编辑。
  • 有什么消息吗?我有同样的问题..

标签: android facebook facebook-sdk-4.0 facebook-sdk-4.x


【解决方案1】:

试试这个,你需要发送“电子邮件”作为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();

【讨论】:

    【解决方案2】:

    也许我们面临同样的问题,试试这个:

    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();
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,我知道这一点(并准备好应对这种情况),但我已经使用我自己的两个配置文件进行了测试,并且从未限制此应用程序的电子邮件访问。另外,请参阅编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      相关资源
      最近更新 更多