6

我正在尝试将 facebook 集成到我的应用程序中,因此按照以下教程进行操作:Facebook Android但我无法让第一个示例(单点登录)工作。当我的应用程序加载时,我得到了 facebook 对话框,但它只是说“发生错误。请稍后再试。” 底部有一个 facebook 风格的“确定”按钮,logcat 中没有任何内容: 应用显示 Facebook 错误

我按照教程中的步骤进行操作,但我猜测 APP ID 或 keytool 生成的 hashkey 有问题。以下是我遵循的步骤:

  1. 克隆 fb git。
  2. 创建 fbSDK 项目。
  3. 创建自己的 fb 项目并将 fbSDK 链接为库。
  4. 然后我用openssl做了keytool cmd,并按照stackoverflow上其他人的建议输入了密码“android”。
  5. 我去了developers.facebook.com 并创建了一个新应用程序。
  6. 在“编辑设置->移动和设备”中,我将我的哈希值放入提供的框中。
  7. 在“编辑设置->移动和设备”中,我选择了“本机应用程序”作为“应用程序类型”
  8. 回到应用程序中,我复制并粘贴了 SSO 示例代码。
  9. 我将 Facebook() 构造函数中的“YOUR_APP_ID”更改为新应用程序的 developers.facebokk.com 页面上显示的 APP ID。
  10. 我在手机上运行了该应用程序。

我不知道为什么 logcat 中什么都没有,但是当我安装它时,控制台总是说:ActivityManager: Warning: Activity not started, its current task has been brought to the front

而且我找不到对我的应用程序的任何 logcat 引用,或者我从 facebook sdk 得到的错误是:Facebook-ProxyAuth(4828): Failed to read calling package's signature.

我已经在这工作了几个小时,任何帮助都将不胜感激。我不敢相信 facebook SDK 和帮助对 Android 来说如此粗略,facebook 应该为自己感到羞耻。

谢谢,

英菲尼迪菲兹

4

5 回答 5

2

您必须从单独的线程调用 .request() 。如果您在 UI 线程上执行此操作,则 Facebook 授权不会在您的代码执行之前完成。所以在facebook授权的“onComplete”中调用新线程。此时您将拥有一个有效的访问令牌。祝你好运!

(这就是为什么 api 说“不要从 UI 线程调用它!”。)

于 2011-04-09T05:16:26.237 回答
2

事实上,我也遇到过同样的问题,并且解决了。因此,在哈希键生成中使用以下步骤:

  1. 打开 cmd 并转到您的 android SDK 路径。
  2. 键入此命令: keytool -exportcert -alias androiddebugkey -keystore [您的 SDK 路径 | 例如 c:\users\user].android\debug.keystore | openssl sha1 -二进制 | openssl base64
  3. 之后它是密码输入“android”的promet
  4. 将结果复制到您的 Facebook 应用设置并保存设置。
  5. 在您的 android 应用程序中使用 facebook 应用程序 ID(不是 android 哈希键)。
于 2011-11-21T13:40:00.623 回答
1

我遇到这个问题仅仅是因为我在使用正确的键正确初始化 facebook 对象之前调用了 facebook api。只要确保您使用正确的密钥并且正确初始化 Facebook 对象即可。

此外,我也被尝试使用不同的 android 应用程序密钥进行 facebook api 调用而被绊倒了几次。请记住,facebook 教程会指导您使用已编译的 apk 创建密钥。如果您要从 IDE 运行代码(我使用的是 Eclipse),则此密钥哈希将有所不同。当您直接从 eclipse 运行您的应用程序时,facebook 密钥会有所不同,因为从 eclipse 运行您的应用程序时,它使用默认发布密钥来构建您的应用程序。

因此,我通常在 facebook 开发者门户中有两个键。一个使用 Android 市场使用的 release-key 编译的 apk 创建的密钥,另一个通过直接从 eclipse 运行应用程序代码创建的密钥。

于 2012-09-01T04:15:02.890 回答
0

正确找出散列的最佳方法是这段代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.loginhowto", 
                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.facebook.samples.loginhowto 替换为您自己的包名称。

于 2013-01-11T20:58:04.650 回答
0

Any reason you selected Native App in step 7? I left it at the default HTML5 / mobile web and got the sample to work.

于 2011-03-21T01:31:40.363 回答