gpt4 book ai didi

java - 无法获取 Facebook ID 和电子邮件

转载 作者:行者123 更新时间:2023-12-02 09:51:12 26 4
gpt4 key购买 nike

我遇到以下问题:授权后我需要获取 FB id 和电子邮件。这是我的代码:

@Override
public void onSuccess(LoginResult loginResult) {

final String[] email = new String[1];
final String[] id = new String[1];

GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
(object, response) -> {
try {
email[0] = object.getString(FB_EMAIL_PERMISSION);
id[0] = object.getString(FB_ID_PERMISSION);
} catch (JSONException e) {
e.printStackTrace();
}
response.getRawResponse();
});

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

Bundle bundle = new Bundle();
bundle.putString(EXTRA_TOKEN, loginResult.getAccessToken().getToken());
bundle.putString(EXTRA_EMAIL, email[0]);
bundle.putString(EXTRA_ID, id[0]);

mPresenter.saveUserData(bundle);
}

但是当我运行我的应用程序时,我没有得到这个字段。我检查了调试器和部分

GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
(object, response) -> {
try {
email[0] = object.getString(FB_EMAIL_PERMISSION);
id[0] = object.getString(FB_ID_PERMISSION);
} catch (JSONException e) {
e.printStackTrace();
}
response.getRawResponse();
});

根本没有被调用。我不明白为什么会这样。那么,这是怎么回事,我该如何解决呢?

UPD

也许,也许会有帮助,这是整个 Facebook 逻辑:

mCallbackManager = CallbackManager.Factory.create();
mFacebookButton.setReadPermissions(Collections.singletonList(FB_EMAIL_PERMISSION));
mFacebookButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {

final String[] email = new String[1];
final String[] id = new String[1];

GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
(object, response) -> {
try {
email[0] = object.getString(FB_EMAIL_PERMISSION);
id[0] = object.getString(FB_ID_PERMISSION);
} catch (JSONException e) {
e.printStackTrace();
}
response.getRawResponse();
});

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

Bundle bundle = new Bundle();
bundle.putString(EXTRA_TOKEN, loginResult.getAccessToken().getToken());
bundle.putString(EXTRA_EMAIL, email[0]);
bundle.putString(EXTRA_ID, id[0]);

mPresenter.saveUserData(bundle);
}

UPD 2

我对这个问题有一个想法,该请求是异步的,当我在 mPresenter.saveUserData(bundle); 行上放置断点时,信息尚未加载,但我该如何加载同步?或者也许我错了?

UPD 3

我按照以下方式更改了我的请求,但它仍然不起作用,并且在这部分中跳过了断点。

GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
(object, response) -> {
try {
if (response.getJSONObject() != null) {
JSONObject data = response.getJSONObject();
if (data.has(FB_EMAIL_PERMISSION)) {
email[0] = response.getJSONObject().getString(FB_EMAIL_PERMISSION);
}
if (data.has(FB_ID_PERMISSION)) {
id[0] = response.getJSONObject().getString(FB_ID_PERMISSION);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
response.getRawResponse();
});

这是权限的值:

private static final String FB_EMAIL_PERMISSION = "email";
private static final String FB_ID_PERMISSION = "id";

最佳答案

您是否为 Facebook 登录按钮添加了权限

fbLoginButton.setPermissions(Arrays.asList("public_profile,email,user_birthday"));

关于java - 无法获取 Facebook ID 和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com