Android Facebook授权-安装官方Facebook应用程序时无法登录

Android Facebook授权-安装官方Facebook应用程序时无法登录,android,facebook,authentication,login,Android,Facebook,Authentication,Login,我需要登录到Facebook,获得与电子邮件等相同的字段。我使用Facebook SDK,在developers.Facebook中设置我的Android密钥哈希,并设置“为Android SSO配置”。在模拟器和一些设备中,应用程序运行良好 但是,如果设备上安装了官方的Facebook应用程序,我的应用程序将无法工作:我按下了登录按钮,但在要求输入密码和登录信息时,没有看到带有web视图的对话框。看起来像是堆栈溢出问题或堆栈溢出问题中的问题,但我不明白如何解决它 我的代码 facebook连接

我需要登录到Facebook,获得与电子邮件等相同的字段。我使用Facebook SDK,在developers.Facebook中设置我的Android密钥哈希,并设置“为Android SSO配置”。在模拟器和一些设备中,应用程序运行良好

但是,如果设备上安装了官方的Facebook应用程序,我的应用程序将无法工作:我按下了登录按钮,但在要求输入密码和登录信息时,没有看到带有web视图的对话框。看起来像是堆栈溢出问题或堆栈溢出问题中的问题,但我不明白如何解决它

我的代码 facebook连接器代码
我和你有同样的问题。最后,我解决了这个问题:

打开Facebook SDK提供的Facebook.java,然后将其更改为:

public void authorize(Activity activity, String[] permissions,
                      int activityCode, final DialogListener listener) {
    boolean singleSignOnStarted = false;

    mAuthDialogListener = listener;

    /*
    // Prefer single sign-on, where available.
    if (activityCode >= 0) {
        singleSignOnStarted = startSingleSignOn(activity, mAppId,
                                                permissions, activityCode);
    }
    // Otherwise fall back to the traditional dialog.
    if (!singleSignOnStarted) {
    */

    startDialogAuth(activity, permissions);

    // }
}

这只是一个猜测,但不是这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
尝试:


由于您没有调用父方法,某些事情可能无法按预期工作…

请更新应用程序的以下代码。它会解决你的问题

public void loginAndPostToWall() {
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());
}
私有静态会话openActiveSession(活动活动、布尔allowLoginUI、状态回调、列表权限){
OpenRequest OpenRequest=新建OpenRequest(活动).setPermissions(权限).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO).setCallback(回调);
Session Session=新建Session.Builder(activity.build();
if(SessionState.CREATED_TOKEN_LOADED.equals(session.getState())| | allowLoginUI){
Session.setActiveSession(Session);
openForRead(openRequest);
返回会议;
}
返回null;
}

像这样编辑openactivesession函数

没有必要更改facebook代码,事情应该可以正常进行,而不需要对其进行黑客攻击。这不是一个好的做法,因为facebook可以在明天更改他们的代码,然后当你更新自己的代码库时,你需要记住你所做的所有更改。谢谢你的回答,这很有用,但是@Dipak Keshariya代码以更正确的方式执行相同的操作。如果您使用facebook登录集成,请检查并告诉我哪里出了问题:……或者请粘贴应用程序的工作代码如果我们更改facebook密码并将请求检查为“我”,如果出现错误,请打开facebook登录日志,但是如果我们检查我的请求,它会再次显示错误,为什么会话令牌没有被替换?但是Dipak你认为这是一个傻瓜式的解决方案吗/sdk不应该从设备上安装的facebook应用程序获取会话吗?我试过你的代码Jossy。似乎没有打开对话框
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
public void loginAndPostToWall() {
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());
}
private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions) {
    OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO).setCallback(callback);
    Session session = new Session.Builder(activity).build();
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
        Session.setActiveSession(session);
        session.openForRead(openRequest);
        return session;
    }
    return null;
}