我需要登录Facebook并获取像电子邮件等相同的字段。我使用Facebook SDK,并在developers.facebook中设置了我的Android密钥哈希,并设置“配置为Android SSO”。在模拟器和某些设备上,应用程序可以正常工作。
但是,如果设备上安装了官方Facebook应用程序,则我的应用程序将无法工作:我按下登录按钮,但是我没有看到一个包含Web视图的对话框,要求我输入密码和登录信息。这似乎与Stack Overflow问题“Using facebook.authorize with the Android SDK does not call onActivityResult”或Stack Overflow问题“Android Facebook API single sign-on?”有关,但我不知道如何解决它。
我的代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
public void getAccessToken() {
SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
@Override
public void onAuthSucceed() {
setupAccessToken(facebookConnector.getFacebook().getAccessToken());
}
@Override
public void onAuthFail(String error) {
Toast.makeText(getApplicationContext(), getString(R.string.error_login), Toast.LENGTH_SHORT).show();
}
};
SessionEvents.addAuthListener(listener);
facebookConnector.login();
}
Facebook连接器代码
public class FacebookConnector {
public void login() {
if (!facebook.isSessionValid()) {
facebook.authorize(this.activity, this.permissions, new LoginDialogListener());
}
}
private final class LoginDialogListener implements DialogListener {
public void onComplete(Bundle values) {
SessionEvents.onLoginSuccess();
}
public void onFacebookError(FacebookError error) {
SessionEvents.onLoginError(error.getMessage());
}
public void onError(DialogError error) {
SessionEvents.onLoginError(error.getMessage());
}
public void onCancel() {
SessionEvents.onLoginError("Action Canceled");
}
}
}