我面临以下问题:授权后,我需要获取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
也许,这可能会有所帮助,这是整个fb逻辑:
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";
答案 0 :(得分:1)
您是否向Facebook登录按钮添加了权限
function startGame() {
myGamePiece = new component(50, 10, "grey", 240, 20);
myAponent = new component(50, 10, "grey", 240, 460);
myScore = new component("30px", "Consolas", "black", 280, 40, "text");
myGameArea.start();
}
答案 1 :(得分:0)
这就是我的使用方式
我不确定FB_EMAIL_PERMISSION
FB_ID_PERMISSION
final GraphRequest request = GraphRequest.newMeRequest(
AccessToken.getCurrentAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
String id = "", user_email = "", name = "";
Log.d("EHREIUIU", String.valueOf(object));
if (response.getJSONObject() != null) {
JSONObject data = response.getJSONObject();
if (data.has("id"))
id = data.getString("id");
if (data.has("email"))
user_email = data.getString("email");
}
getOneSignalToken();
socialLogin(user_email, name, null, id, "facebook");
} catch (JSONException e) {
e.printStackTrace();
}
}
});