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();
}
}
是的,我做过了,如果我没有安装facebook应用程序,连接是否会起作用?感谢您的回复 – Shira 2013-04-11 06:22:52
我重新检查了开发者页面上的设置,显然包名称不匹配。当我修复它时,我在尝试登录到应用程序时发现facebook的错误,说明密钥散列不匹配。我复制了他们的密钥散列,现在它终于工作了!谢谢阿米尔! – Shira 2013-04-11 08:25:45
嘿@Amir Naor我尝试使用UILifeCycleHelper实现FB登录流程,在某些情况下,通常包含FB响应的“mMap”字段的'data'参数为空。为什么会发生这种情况? – toobsco42 2013-08-26 07:17:41