在我的一个应用程序中,我需要从Facebook获取数据…我是这样做的:

我已经创建了应用ID。它成功登录,但注销后,我登录,然后它给我:

我做错了什么?我正在使用Facebook SDK…我已经在手机上安装了Facebook。它在模拟器中运行良好,但没有安装内置的Facebook应用程序。

这是我的代码:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}

当前回答

经过长时间的研究,我们找到了解决办法。

我们将权限设置为:

loginButton.setReadPermissions(public_profile email);

这是第一次工作,但当我们重新登录Facebook时,它给出了无效的哈希错误。

简单的解决方案是将上面的行更改为:

loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));

它的工作就像一种幸福!

Facebook应该返回正确的异常,而不是误导性的无效哈希键错误。

其他回答

我尝试了之前所有的答案,没有一个对我的客户有帮助!

然后我的客户想起来他的设备上安装了Facebook应用程序。在他把它取下来之后。登录工作正常。

hashkey已经被更改,我已经用错误中的key替换了Facebook开发者控制台中的旧hashkey(如上所述),并且它可以工作!

Facebook应用程序本身可能就是问题所在,所以你最好在安装了Facebook应用程序的设备和未安装Facebook应用程序的设备上解决这一问题,并处理这两种情况。

Facebook使用的不是用于调试的默认密码和别名。你需要改变它,它会工作。

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

如果你没有修改任何默认密码,它应该是“android”。

您还可以在构建中配置它。gradle文件。但是生成散列时应该使用相同的别名密码:

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}

我也有同样的问题。我确信这是由于非常小的错误,是的,它是!

我找到了解决方案:

当在我的计算机中生成调试哈希键时,我输入了我的系统密码。但密码应该是-

输入keystore密码:“android”。 这是我唯一的问题。

-----用于生成调试键哈希,使用此命令-

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

输入密钥库密码:'android'

-----要生成释放密钥哈希,使用命令-

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

执行此命令后,提供您的密钥存储库密码。

当我调试我的应用程序时,我也遇到了同样的问题。我重写了你在附件图像中划掉的散列(Facebook说无效的那个),并将它添加到Facebook的开发者控制台的键散列中。只是要注意错别字。

这个解决方案更像是一个简单的变通方案,而不是一个合适的解决方案。

如果你遇到了这个问题,把这个键输入到你的developer.facebook.com:

然后确保你的应用在developer.facebook.com上是活跃的。

这个绿色圆圈表示应用程序是活的:

如果不是,那么按照以下两个步骤让你的应用上线:

步骤1进入应用程序→设置→添加“联系邮箱”,选择“保存更改”。

步骤2进入App Review选项,确保该选项为Yes。我加了一张截图:

注意:如果你想复制hashkey,请检查LogCat中的BlueServiceQueue。