【问题标题】:Can not get Email from Facebook in Android无法在 Android 中从 Facebook 获取电子邮件
【发布时间】:2018-03-06 20:20:07
【问题描述】:

我尝试使用以下代码通过我的应用程序获取我的 Facebook 电子邮件地址,但返回值为 null。

public class MainActivity extends AppCompatActivity {
private CallbackManager callbackManager;
private Button fb;
private LoginButton loginButton;
private AccessToken accessToken;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    callbackManager = CallbackManager.Factory.create();

    fb = (Button) findViewById(R.id.fb);
    loginButton = (LoginButton) findViewById(R.id.login_button);

    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(
            callbackManager,
            new FacebookCallback < LoginResult > () {
                @Override
                public void onSuccess(LoginResult loginResult) {

                    accessToken= loginResult.getAccessToken();

                    GraphRequestAsyncTask request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject user, GraphResponse response) {
                            final Profile profile = Profile.getCurrentProfile();

                            if ((user != null) && (profile != null)) {

                                accessToken = AccessToken.getCurrentAccessToken();

                                if (accessToken.getDeclinedPermissions().isEmpty()) {


                                    try {
                                        String email = user.get("email").toString();
                                        Log.e("facebook response email",email+"mm");
                                        Log.e("facebook response",user.toString()+"mm");
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }


                                }


                            }
                        }
                    }).executeAsync();

                }

                @Override
                public void onCancel() {
                }

                @Override
                public void onError(FacebookException exception) {
                }
            }
    );

}

public void onClick(View v) {
    if (v == fb) {
        LoginManager.getInstance().logInWithReadPermissions(
                this,
                Arrays.asList("email","public_profile")
        );
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
    accessToken = AccessToken.getCurrentAccessToken();
    if (accessToken != null) {
        Log.e("Token", "Token: " + accessToken.getToken());
        Log.e("UserID", "UserID: " + accessToken.getUserId());
    }
}

}

我写了一些代码但结果为空? 如何从 Facebook SDK 获取电子邮件? 我不知道是什么原因,但我可以使用 Graph API explorer 获取电子邮件地址。有人知道这段代码有什么问题吗?

【问题讨论】:

  • 你需要指定你想要的字段
  • 我想要来自 Facebook 的令牌和电子邮件。这就是@WizKid
  • 我知道。当您向 Facebook 发出请求时,您必须指定您想要的字段。否则 Facebook 不会将它们退还给您
  • 如何解决我的问题? @WizKid
  • 您指定您需要电子邮件字段,Facebook 会返回给您

标签: android facebook email android-facebook


【解决方案1】:

要检索电子邮件,您必须在用户的电子邮件地址上显式设置ReadPermission。因此,请在初始化 loginButton 后在代码中插入以下行

loginButton.setReadPermissions("email");

之后它应该开始返回电子邮件 ID。

一切顺利!

【讨论】:

  • 我认为问题出在 logInWithReadPermissions 这一行
  • @Baggio - 如果要设置 LoginButton,则不需要设置 LoginManager。 LoginButton 内置了 LoginManager。所以你不需要2个按钮。一个登录按钮就可以了。此外,您还没有将回调注册到 LoginButton 中,而是注册到单独的 LoginManager 实例中。请简化您的代码 - 仅使用 FB 登录按钮,不需要额外的按钮或 LoginManager 实例。
猜你喜欢
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2017-04-30
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多