如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址
Posted
技术标签:
【中文标题】如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址【英文标题】:How to get the logged user's email address with Graph Request in Facebook Android sdk 4.0 【发布时间】:2015-04-12 14:08:11 【问题描述】:一旦用户使用 Facebook (sdk 4.0) 登录我的 android 应用程序,我将尝试获取用户的电子邮件地址。我读过很多帖子都问同样的问题,但我仍然无法让它发挥作用。我只是用代码登录用户
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email"));
然后我使用 Graph API 请求
LoginManager.getInstance().registerCallback(fbCallbackManager,
new FacebookCallback<LoginResult>()
@Override
public void onSuccess(LoginResult loginResult)
System.out.println(loginResult.getAccessToken().toString());
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback()
@Override
public void onCompleted(
JSONObject object,
GraphResponse response)
System.out.println(object.toString());
);
Bundle parameters = new Bundle();
parameters.putString("fields", "email");
request.setParameters(parameters);
request.executeAsync();
@Override
public void onCancel()
// App code
@Override
public void onError(FacebookException exception)
// App code
);
输出只是
AccessToken token:ACCESS_TOKEN_REMOVED permissions:[public_profile, contact_email, user_friends, email, basic_info]
"id":"xxxxxxxxxxxxxxx"
即使我删除了“字段”部分,我也会得到一个包含大量用户公共信息的 JSON,但绝不会包含电子邮件字段。我正在我自己的 Facebook 帐户上对此进行测试,并且我确实有一个与之关联的电子邮件地址。
【问题讨论】:
您找到问题的答案了吗?如果是,请在此处发布作为答案。 实际上,你问题中的代码对我有用,尤其是下面的所有答案,谢谢男人 【参考方案1】:这是完整的代码,我通过它从 facebook 获取我们需要的所有数据
login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button);
login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday"));
//LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
// Callback registration
login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
@Override
public void onSuccess(LoginResult loginResult)
// App code
Log.e("onSuccess", "--------" + loginResult.getAccessToken());
Log.e("Token", "--------" + loginResult.getAccessToken().getToken());
Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions());
Profile profile = Profile.getCurrentProfile();
Log.e("ProfileDataNameF", "--" + profile.getFirstName());
Log.e("ProfileDataNameL", "--" + profile.getLastName());
Log.e("Image URI", "--" + profile.getLinkUri());
Log.e("OnGraph", "------------------------");
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback()
@Override
public void onCompleted(
JSONObject object,
GraphResponse response)
// Application code
Log.e("GraphResponse", "-------------" + response.toString());
);
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,gender,birthday,email");
request.setParameters(parameters);
request.executeAsync();
@Override
public void onCancel()
// App code
@Override
public void onError(FacebookException exception)
// App code
);
日志中调用的响应是:
Response: responseCode: 200, graphObject: "id":"896337040431723","name":"Aneh Thakur","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/896337040431723\/","gender":"male","birthday":"08\/05\/1992","email":"anehkumar@gmail.com", error: null
希望这会对你有所帮助。
TrinityTuts【讨论】:
谢谢,这是唯一对我有用的解决方案。 谢谢老兄..它也帮助了我:) 在这里查看所有参数developers.facebook.com/docs/graph-api/reference/v2.6/user【参考方案2】:您可以通过如下方式获取登录用户的电子邮件,但请注意,
他们不保证您会收到电子邮件地址read here。
在某些情况下,虽然用户提供了电子邮件,但如果电子邮件无效,则不会通过请求。
@Override
public void onSuccess(LoginResult loginResult)
GraphRequest request = GraphRequest.newMeRequest( AccessToken.getCurrentAccessToken(),
new GraphRequest.GraphJSONObjectCallback()
@Override
public void onCompleted(JSONObject object,GraphResponse response)
try
String email=object.getString("email");
Log.d(TAG + "user email ", email);
catch (JSONException e)
// TODO Auto-generated catch block
e.printStackTrace();
);
request.executeAsync();
【讨论】:
【参考方案3】:fbLoginButton.setReadPermissions("public_profile", "user_friends", "user_photos", "email", "user_birthday", "public_profile", "contact_email");
“contact_email”是电子邮件权限,我错过了当我添加它时我得到了工作。
【讨论】:
以上是关于如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章
Android 如何在新的 sdk 3.0 中与 Facebook Open Graph 共享数据?
我应该如何在带有 Facebook sdk 4 的 Android App 中合并 Like 按钮?
如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址
如何在最新的 Facebook Android SDK 4.6.0 中获取会话类