Android facebook sdk 4.x有什么问题吗?
我试图在两个不同的应用程序中获取用户电子邮件,但总是得到空响应。我的同事也有同样的问题,在网上我只能找到旧版本的回复 我知道Facebook并不能保证人们总能成功地检索到用户的电子邮件,但我在不同的Facebook用户上进行了测试,得到了相同的响应 我希望能得到一些帮助,甚至是确认我的代码没有错误Android facebook sdk 4.x有什么问题吗?,android,facebook,facebook-graph-api,facebook-login,Android,Facebook,Facebook Graph Api,Facebook Login,我试图在两个不同的应用程序中获取用户电子邮件,但总是得到空响应。我的同事也有同样的问题,在网上我只能找到旧版本的回复 我知道Facebook并不能保证人们总能成功地检索到用户的电子邮件,但我在不同的Facebook用户上进行了测试,得到了相同的响应 我希望能得到一些帮助,甚至是确认我的代码没有错误 FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.F
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
try {
trace("GRAPH RESPONSE" + response.getJSONObject().toString()); // returns {name:{}, id{}}
String token = AccessToken.getCurrentAccessToken().getToken();
String userProfilePicURL = "https://graph.facebook.com/me/picture?type=large&method=GET&access_token=" + token;
String fullName = response.getJSONObject().getString("name");
String email = response.getJSONObject().optString("email");
String[] names = fullName.split(" ");
UserProfile.getInstance().setLoginProfileParams(names[0], names[1], userProfilePicURL, token);
} catch (JSONException e) {
trace("json error " + e);
}
}
}
).executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void facebookLogin() {
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
Arrays.asList("public_profile", "email"));
}
FacebookSdk.sdkinInitialize(this.getApplicationContext());
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/我”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
试一试{
跟踪(“图形响应”+RESPONSE.getJSONObject().toString());//返回{name:{},id{}}
字符串标记=AccessToken.getCurrentAccessToken().getToken();
字符串userProfilePicURL=”https://graph.facebook.com/me/picture?type=large&method=GET&access_token=“+代币;
String fullName=response.getJSONObject().getString(“名称”);
字符串email=response.getJSONObject().optString(“电子邮件”);
String[]name=fullName.split(“”);
UserProfile.getInstance().setLoginProfileParams(名称[0],名称[1],userProfilePicURL,令牌);
}捕获(JSONException e){
跟踪(“json错误”+e);
}
}
}
).executeAsync();
}
@凌驾
公开作废{
}
@凌驾
公共无效onError(FaceBook例外e){
}
});
@凌驾
受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
私有void facebookLogin(){
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
asList(“public_profile”、“email”);
}
自Graph API v2.4以来,您需要专门添加电子邮件字段,而不是仅使用/me
您必须添加要获取的字段:
/me?fields=name,email
当然,这只是API调用的基本形式,正如您在文档中看到的,您需要在“GraphRequest”中添加“fields”参数作为参数:
在changelog中搜索“声明性字段”:谢谢您的输入,但现在我得到了{Response:responseCode:400,graphObject:null,error:{HttpStatus:400,errorCode:2500,errorType:OAuthException,errorMessage:必须使用活动访问令牌来查询有关当前用户的信息。}}我在网上找不到足够清晰的东西……或者我只是想知道,正如错误消息告诉你的,你必须使用活动访问令牌。确保用户已登录。我理解错误消息告诉我的内容,但我将为其提供AccessToken.getCurrentAccessToken();我还尝试传递一个包含AccessToken.getCurrentAccessToken实例的params包,而不是在执行新的GraphRequest时传递null。AccessToken很好…基本上,如果我使用“/me”,我会得到一个包含{“id”:“某物”,“名称”:“某物”}的graphResponse,如果我使用“/me?fields=name,email”我会得到null响应。。。我在这里慢慢发疯了好吧,你是否授权了电子邮件权限,它是否包含在访问令牌中?