2013-04-10 107 views
0

我是新开发的android开发人员。我已经下载了facebook sdk 3.0.1,并使用示例代码进行登录。问题是,如果安装了Facebook应用程序,身份验证将失败。 (否则它工作正常) 在按下登录按钮后,我到达状态为CLOSED_LOGIN_FAILED的onActivityResult。 当然,我没有输入密码,它是通过Facebook的应用程序自动完成的,Facebook应用程序已登录并正常运行。 我无法找到一个解决方案.. 请帮我:)Facebook登录失败,并安装了Facebook应用程序

这是我的代码:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    instance = this; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    buttonLoginToFacebook = (Button) findViewById(R.id.buttonLoginToFacebook); 
    tvWellcome = (TextView) findViewById(R.id.tvWellcome); 

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, statusCallback, 
        savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(this); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(statusCallback)); 
     } 
    } 

    updateView(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    Session.getActiveSession().addCallback(statusCallback); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    Session.getActiveSession().removeCallback(statusCallback); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
    updateView(); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    Session session = Session.getActiveSession(); 
    Session.saveSession(session, outState); 
} 

private void updateView() { 
    Session session = Session.getActiveSession(); 
    if (session.isOpened()) { 
     Intent intent = new Intent(this, ScreenStartPage.class); 
     startActivity(intent); 
    } else { 
     buttonLoginToFacebook.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       onClickLogin(); 
      } 
     }); 
    } 
} 

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this) 
       .setCallback(statusCallback)); 
     updateView(); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 


public void onClickLogout() { 
    Session session = Session.getActiveSession(); 
    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
    } 
} 

private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     updateView(); 
    } 
} 

回答

0

你有没有设置你的调试在Facebook上的应用程序设置dashbaord密钥哈希和完整的类名?请参阅Getting Started with the Facebook SDK for Android文档中的步骤5和6。

+0

是的,我做过了,如果我没有安装facebook应用程序,连接是否会起作用?感谢您的回复 – Shira 2013-04-11 06:22:52

+0

我重新检查了开发者页面上的设置,显然包名称不匹配。当我修复它时,我在尝试登录到应用程序时发现facebook的错误,说明密钥散列不匹配。我复制了他们的密钥散列,现在它终于工作了!谢谢阿米尔! – Shira 2013-04-11 08:25:45

+0

嘿@Amir Naor我尝试使用UILifeCycleHelper实现FB登录流程,在某些情况下,通常包含FB响应的“mMap”字段的'data'参数为空。为什么会发生这种情况? – toobsco42 2013-08-26 07:17:41

相关问题