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

当前回答

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "www.icognix.infomedia",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

其他回答

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

在一个新的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。

我很遗憾地说,其实我什么都不管用。最后,帮助我的是从谷歌播放控制台获得上传SHA-1证书指纹,并将其转换为base64并将其添加到facebook。如果有人需要帮助,请评论

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

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

如果您正在使用谷歌Play App签名:

在谷歌播放控制台打开App签名部分,获取App签名证书下的SHA-1哈希值。然后将其转换为Base64,例如使用以下工具:十六进制-> Base64字符串解码器

经过多次试验,我偶然发现了一个解决方案。我生成并添加了调试和发布密钥到Facebook开发人员控制台,但仍然出现了错误。

对我来说唯一有效的解决方案是从谷歌卸载OpenSSL程序,然后从Win32/Win64下载OpenSSL Installer for Windows

它真的像魔法一样有效。