Facebook SDK for Android - 示例应用程序将无法正常工作

时间:2010-12-12 22:35:03

标签: android facebook

哦,我做了所有的事情,按照所有步骤,但仍然无法让它工作。 Facebook SDK附带的简单示例应用程序正在模拟器和Android 1.5设备上运行。 所以我的猜测就是单一登录。

如果我是对的,那么我应该生成一个密钥哈希,并且我被告知正确的调试密钥库位于

之下
  

C:\用户\ xxx.android \ debug.keystore

所以我按照教程。

从google.code下载OpenSSL,在终端中我写了类似的内容:

  

“C:\ Program Files \ Java \ jdk1.6.0_22 \ bin \ keytool.exe”-exportcert -alias   androiddebugkey -keystore   “C:\用户\ JoeZ.android \ debug.keystore” | “C:\用户\ XXX \下载\的OpenSSL 0.9.8k_X64 \ BIN \ openssl.exe”   SHA1   -binary |“C:\ Users \ xxx \ Downloads \ openssl-0.9.8k_X64 \ bin \ openssl.exe”base64

我得到一个很好的密钥,我插入到Facebook的Android Key Hash框中,我在输出后尝试了或不使用=符号,但似乎没有任何效果。

当我尝试登录示例应用程序时,我只是得到invalid_key。 我甚至尝试过签名的应用程序,但它没有用。 如果我没弄错,在Example应用程序中写的唯一的东西是我的APP_ID,对吧?

我正在开发我自己的应用程序时遇到完全相同的问题。所以有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:15)

如果keytool命令对你不起作用,我找到了解决这个问题的方法:你可以在Facebook Developer部分中反向设计将哪个键作为Key Hash。在您的活动中,只需打印出Key Hash:

try {
   PackageInfo info = getPackageManager().getPackageInfo("[your package name, e.g. com.yourcompany.yourapp]", PackageManager.GET_SIGNATURES);
   for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("Hash Key:", Base64.encode(md.digest()));
   }
} catch (NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {

}

这对我有用。 MessageDigest类包含在JDK中。 Base64类没有。例如,您可以使用this one

答案 1 :(得分:5)

我有类似的问题。对我来说,当我卸载Facebook应用程序的最新更新并且现在只有原生Facebook应用程序v1.2时,它已得到解决。 (意思是,当我进入市场并搜索Facebook时,“Facebook for Android”将在我的设备上显示为“未安装”)。

在我的Nexus One(Android 2.2.1)上,当我安装了最新的Facebook应用程序时,没有“卸载应用程序”按钮,只有“卸载最新更新”,这就是我所做的。事实上,我甚至无法卸载整个Facebook(现在的v1.2)应用程序,无论出于何种原因,卸载按钮被禁用/灰显。但在这种状态下,样本似乎有效。

至少,我可以通过这种方式使用简单的流应用程序。

编辑/解决方案:

好的,我现在就开始工作了。我发现我复制/粘贴了错误的密钥哈希,因为Windows下的keytool有一些奇怪的行为,而且Facebook SDK的自述文件中的命令语法错误。

要使用的参数应为“keytool -export ...”而不是“keytool -exportcert ...”;如果你确实使用了第二个/错误的参数,keytool仍然会打印出一个哈希密钥(虽然没有要求任何密钥密码),但哈希是错误的。

现在我也有SSO工作了。

这是我在Windows上的电话:

keytool -export -alias androiddebugkey -keystore "C:\Documents and Settings\myuser\.android\debug.keystore" | openssl sha1 -binary | openssl enc -a -e

答案 2 :(得分:0)

我根据您的解决方案尝试使用export和exportcert,但它会生成相同的哈希。应用程序现在可以像以前一样工作,而不是使用新的SSO方式。

我调试了android FB SDK,我找到了原因,但不是确切的解决方案。不知道为什么facebook家伙以这种方式实施SSO。

  1. 如果您的Android手机上没有安装FB应用程序新更新,则SSO无效。

  2. 在这种情况下,它使用用户名和密码路由到常规对话框界面。

  3. 3.详细说明,用于处理SSO的FB Android SDK正在调用一个意图com.facebook.katana.ProxyAuth如果更新可用则返回true。

    1. 如果用户有新的更新并且已经登录,那么它会验证用户。
    2. 希望这会有所帮助。