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

当前回答

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登录Android,你必须提供关键哈希值。为了获得它,您将需要用于签署应用程序的密钥。

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64

我通过更改调试的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证书指纹,并将其转换为base64并将其添加到facebook。如果有人需要帮助,请评论

我通过在MainApplication.onCreate中添加以下内容来修复这个问题:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.genolingo.genolingo",
                           PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
        KeyHash.addKeyHash(hash);
    }
}
catch (PackageManager.NameNotFoundException e) {
    Log.e("PackageInfoError:", "NameNotFoundException");
}
catch (NoSuchAlgorithmException e) {
    Log.e("PackageInfoError:", "NoSuchAlgorithmException");
}

然后我将其上传到谷歌开发人员控制台,然后下载了派生的APK,无论出于什么原因,它具有完全不同的键散列。

然后我使用LogCat来确定新的密钥散列,并将其添加到Facebook,就像其他用户所概述的那样。

我也有同样的问题。首先登录,没问题,但接下来,一个无效的键散列。

Unity的Facebook SDK得到了错误的键散列。它从"C:\Users\ your user".android\debug获取键。密钥存储库”,在理想情况下,它应该从您在项目中创建的密钥存储库中获取。这就是为什么它告诉你键哈希没有注册。

正如Madi所建议的,您可以按照此链接上的步骤找到正确的键。只需确保将它们指向项目中的密钥库。否则你就拿不到正确的钥匙。