callbackManager = CallbackManager.Factory.create();
fbLoginButton.setReadPermissions("email");
fbLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequestAsyncTask request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Toast.makeText(getApplicationContext(), "Data" + object.toString(), Toast.LENGTH_LONG).show();
etEmail.setText(object.optString("email"));
etName.setText(object.optString("name"));
}
}).executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
buttonFbSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fbLoginButton.performClick();
}
});
答案 0 :(得分:0)
您设置了email
权限(并希望在登录弹出窗口中获得该权限),但没有API请求该电子邮件。确保您知道“声明字段”的含义,这将是获取用户电子邮件的api调用:/me?fields=email
有关于如何在官方文档中执行API调用的示例代码,请专门查看fields
参数:https://developers.facebook.com/docs/android/graph
例如,这应该返回用户的ID,名称和电子邮件 - 只要email
权限在登录过程中获得授权,并且只要在Facebook上确认电子邮件:
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
您还应该阅读整个页面,它解释了fields参数等等:https://developers.facebook.com/docs/graph-api/using-graph-api/
答案 1 :(得分:0)
错误是我的电子邮件未在Facebook注册
和
如果您真的被要求在登录过程中获得电子邮件许可,并且仍然没有电子邮件...请确保您甚至通过电子邮件登录facebook。例如,人们也可以使用电话号码登录。