我尝试使用以下代码通过我的应用获取我的Facebook电子邮件地址,但返回值为空。
我不知道是什么原因,但我可以使用<a href="javascript:prova();">prova</a>
<!-- Or Javascript alternative: -->
<img id="image" src="mini.jpg" width="200" height="200" />
<script type="text/javascript">
function prova() {
$('#image').triggerHandler('frameChange',2);
console.log("ssss");
/*
$('#image').reel('images', 'mini2/###.jpg');
console.log("qqqqqqq");
$('#image').reel('draggable', 'true');
console.log("qqqqqqq")
*//*
console.log($('#image').reel('frame'));
console.log($('#image').reel('row'));
$('#image').reel('draggable','true');
$('#image').reel('frame',1);
console.log($('#image').reel('frame'));
}
</script>
获取电子邮件地址。有没有人知道这段代码有什么问题?
Graph API explorer
答案 0 :(得分:3)
最后,我找到了解决方案,使用newMeRequest方法从用户对象中获取字段。在这种情况下,我需要将电子邮件作为附加字段,因此将“email”添加到fields参数和请求特定字段中:
GraphRequest request = GraphRequest.newMeRequest(
//...
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
答案 1 :(得分:1)
在发出请求之前设置读取权限,并按以下方式执行:
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();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}).executeAsync();
答案 2 :(得分:0)
您必须在请求之前设置权限。
无论如何,email
字段可能会返回null,原因有两个:
1 - 用户在注册期间未确认电子邮件地址
2 - 用户可以使用电话号码而不是电子邮件在Facebook上注册。
文档说:
请注意,即使您申请电子邮件权限,也不能保证 你会得到一个电子邮件地址。例如,如果有人注册了 Facebook上有电话号码而不是电子邮件地址,电子邮件 字段可能是空的。