在我的一个应用程序中,我需要从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");
}

当前回答

我通过更改调试的phat解决了这个问题。正确的phat必须是你的Android项目文件的phat。是这样的:

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\yourUser\Documents\other\yourProjectName\android\app\debug.keystore" | "C:\openssl\openssl-3\x64\bin\openssl" sha1 -binary | "C:\openssl\openssl-3\x64\bin\openssl" base64

如果你不知道如何获得openSSL,我向你推荐youtube上的这个视频:https://youtu.be/aZlkW3Evlx4

其他回答

我是这样解决这个问题的:

首先,您必须获得SHA-1值。有两种方法。

在Android Studio中获取SHA-1值。

点击它 点击签署报告 复制SHA-1的值

OR

从密钥存储文件中获取SHA-1值。

keytool -list -v -keystore keystore_file_name.jks -alias key0

复制SHA-1值到你的剪贴板,像这样:

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

并打开十六进制-> Base64字符串解码器将您的SHA-1值转换为Base64。

这正是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"
        }
    }
}

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

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

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

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

这可能对有同样问题的人有所帮助。

使用下面的代码生成密钥散列 Keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64 如何使用keytool 将其粘贴在Facebook开发人员的必填项域中 在Android Studio中,菜单文件→项目结构 添加签名参数。 选择口味 选择我们创建的签名配置。 选择构建类型 选择构建变体并构建它

我也遇到过同样的问题。我对这种奇怪行为的可能原因做了一个简短的研究,我发现了以下几点:

在一个新的Facebook应用程序的第一次执行期间,即使你没有指定任何键哈希,它也将允许连接/登录。 对我来说,Facebook提供的教程没有生成正确的键散列,因为它给出了错误的配置。当执行: keytool -exportcert -alias androiddebugkey -keystore % home路径%\.android\调试。Keystore | openssl sha1 -binary | openssl . Keystore | openssl sha1 -binary | openssl . Keystore base64

确保检查了所有属性——HOMEPATH、密钥库的存在等等。可能还需要提供密码。

生成正确配置的是@Mahendran建议的解决方案。 此外,如果您看到最初发布的错误(http://i.stack.imgur.com/58q3v.png),那么您在屏幕上看到的键散列很可能就是您的真实键散列。如果其他方法都不管用,试试把它输入Facebook。

我得到了所有这些结果:Windows 7 64位版本,Android Studio 1.2.2, JDK 7。