我需要登录 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 单点登录中的问题?,但我不明白如何解决它。
我的代码
@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");
}
}
}