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

当前回答

生成的哈希键错误。您可以通过两个步骤获得哈希键。

一种是通过命令提示符。另一个是通过编码。通过命令提示符的散列键仅在第一次工作。我不知道原因。我也有同样的问题。所以我试着通过编程来实现。

遵循以下步骤:

将以下代码粘贴到oncreate()中。

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

修改com . example。”packagename”与你的包名在上面的编码中没有失败(你可以在Android manifest文件中找到你的包名)。

运行应用程序。转到您粘贴上述代码的活动。在LogCat文件中,搜索“KeyHash”。你可能会找到一个键散列。复制键哈希和去Facebook应用仪表板页面。进入设置并输入如下图所示的详细信息。

完成上述步骤后,再次重新启动应用程序。你现在可以登录Facebook了。 有关key hash的更多详细信息,请查看链接。

如果你在设置页面中添加了错误的信息,这意味着它会给出一些错误。所以要使用正确的信息。此外,如果公众(除您之外)需要使用您的应用程序,则意味着您需要启用权限(在设置旁边的“状态和审查”中更改“是”)。

其他回答

我通过更改调试的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

下面的代码将为您提供Facebook的散列,但您必须遵循以下步骤才能获得发布候选散列。

Copy and paste this code in your main activity try { PackageInfo info = getPackageManager().getPackageInfo( "com.example.packagename", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } Generate a signed APK file. Connect your phone to a laptop and make sure it stays connected. Install and run the APK file in your phone by manually moving the release APK to your phone. Now look at Android LogCat (use filter KeyHash:). You should see your release hash key for Facebook. Simply copy and paste it in your https://developers.facebook.com/apps. It's under settings. Now you can test the app it should work perfectly well.

根据Facebook登录Android,你必须提供关键哈希值。为了获得它,您将需要用于签署应用程序的密钥。

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

您必须创建两个键散列,一个用于调试,另一个用于发布。

对于Debug键哈希:

在OS X上运行:

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

在Windows上运行:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

调试键哈希源代码

对于Release键哈希:

在OS X上,运行(将<>之间的值替换为您的值):

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

在Windows上,使用(将<>之间的值替换为您的值):

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

释放键哈希源代码

生成的哈希键错误。您可以通过两个步骤获得哈希键。

一种是通过命令提示符。另一个是通过编码。通过命令提示符的散列键仅在第一次工作。我不知道原因。我也有同样的问题。所以我试着通过编程来实现。

遵循以下步骤:

将以下代码粘贴到oncreate()中。

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

修改com . example。”packagename”与你的包名在上面的编码中没有失败(你可以在Android manifest文件中找到你的包名)。

运行应用程序。转到您粘贴上述代码的活动。在LogCat文件中,搜索“KeyHash”。你可能会找到一个键散列。复制键哈希和去Facebook应用仪表板页面。进入设置并输入如下图所示的详细信息。

完成上述步骤后,再次重新启动应用程序。你现在可以登录Facebook了。 有关key hash的更多详细信息,请查看链接。

如果你在设置页面中添加了错误的信息,这意味着它会给出一些错误。所以要使用正确的信息。此外,如果公众(除您之外)需要使用您的应用程序,则意味着您需要启用权限(在设置旁边的“状态和审查”中更改“是”)。