繁体   English   中英

用Facebook SDK 3.5登录并获取电子邮件-Android

[英]Login with facebook sdk 3.5 and get email - android

我是android开发的新手,也是SO的新手。 我的问题是:我有一个实现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);
}

谁能帮我吗? PS .:对不起,我的英语不好= /

在调用Session.openActiveSession()之前,请执行以下操作以获得权限:

List<String> permissions = new ArrayList<String>();
permissions.add("email");

Session.openActiveSession()的最后一个参数应该是权限。 现在,您可以访问user.getProperty("email").toString()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM