使用facebook sdk 3.5登录并获取电子邮件-android
我是android开发的新手,也是这里的新手。 我的问题是:我有一个实现facebook登录的按钮(不是facebook LogginButton)。我还需要,登录后,得到用户的电子邮件。但我实现它的方式证明,有时它无法检索用户的邮件。如果这是我第一次使用应用程序,我必须在我的应用程序的登录按钮上单击几次(至少两次),这样它最终会给我带来电子邮件,在我第一次收到电子邮件后,下次我单击登录按钮时,它总是会给我带来电子邮件。 但是,如果我打开我的fb帐户并删除该应用程序,问题就会再次出现。我想我在设置权限或管理会话方面遇到了一些问题。我将在下面发布我的代码:使用facebook sdk 3.5登录并获取电子邮件-android,android,facebook-login,Android,Facebook Login,我是android开发的新手,也是这里的新手。 我的问题是:我有一个实现facebook登录的按钮(不是facebook LogginButton)。我还需要,登录后,得到用户的电子邮件。但我实现它的方式证明,有时它无法检索用户的邮件。如果这是我第一次使用应用程序,我必须在我的应用程序的登录按钮上单击几次(至少两次),这样它最终会给我带来电子邮件,在我第一次收到电子邮件后,下次我单击登录按钮时,它总是会给我带来电子邮件。 但是,如果我打开我的fb帐户并删除该应用程序,问题就会再次出现。我想我在设
public void onClickLoginFacebook(View view) {
Session.StatusCallback statusCallBack = new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
// make request to the /me API
Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
if (user.asMap().get("email")!=null){
userFacebook.setEmail(user.asMap().get("email").toString());
}
}else{
Toast.makeText(getApplicationContext(), "Error on facebook login: " + response.getError().getErrorMessage(), Toast.LENGTH_LONG).show();
}
}
});
}else if(session.isClosed()){
Toast.makeText(getApplicationContext(), "Error on facebook login", Toast.LENGTH_LONG).show();
}
}
};
if( isOnline() )
{
Session session = Session.getActiveSession();
if(session == null){
session = new Session.Builder(this).setApplicationId(
this.getString(R.string.app_id)).build();
Session.setActiveSession(session);
}
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("email"))
.setCallback(statusCallBack));
} else {
Session.openActiveSession(LoginActivity.this, true, statusCallBack);
}
}
else
{
Toast.makeText(getApplicationContext(), R.string.error_message, Toast.LENGTH_LONG).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
谁能帮帮我吗?
注:对不起,我的英语很差=/在调用
会话之前。openActiveSession()
执行此操作以获得权限添加此:
List<String> permissions = new ArrayList<String>();
permissions.add("email");
List permissions=new ArrayList();
权限。添加(“电子邮件”);
Session.openActiveSession()
中的最后一个参数应该是权限。现在,您可以访问user.getProperty(“email”).toString()
查看此答案:或者使用扩展权限查看此呼叫请求