【问题标题】:Invalid Key hash with Facebook Android SDKFacebook Android SDK 的无效密钥哈希
【发布时间】:2014-09-17 03:54:09
【问题描述】:

我正在尝试使用 Facebook Android SDK 开发一个带有 Facebook 登录按钮的简单应用程序。 但是我在使用密钥哈希时遇到了麻烦。我已经创建了调试密钥和发布密钥:

调试键:

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

释放键:

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

然后我在 Facebook 开发者页面中复制了这个密钥哈希。 当我导出 apk 并将其复制到设备中时,它运行良好,但是当我尝试从 Eclipse 安装应用程序(作为 Android 应用程序运行/调试)时,它不起作用。似乎该应用程序使用的密钥哈希值与我使用 keytool 创建的密钥哈希值不同。 有谁知道如何解决这个问题?

【问题讨论】:

  • 问你密码了吗?
  • 您可以像这样检查您的哈希密钥 1.检查您的系统是否为 32 位操作系统,您可以使用来自 here 的 OpenSSL 32 bti 并生成密钥,然后与编程生成的哈希密钥进行比较,如果两者相同它有效。

标签: android eclipse adt keytool


【解决方案1】:

尝试从这里获取 HashKey

public static void showHashKey(Context context) {
            try {
                PackageInfo info = context.getPackageManager().getPackageInfo(
                        "com.example.tryitonjewelry", PackageManager.GET_SIGNATURES); //Your            package name here
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                    }
            } catch (NameNotFoundException e) {
            } catch (NoSuchAlgorithmException e) {
            }
        }

【讨论】:

  • 这解决了问题!谢谢!
  • 这太棒了。无法弄清楚为什么我们输入的哈希仍然无效。有些角色太模棱两可了。这允许进行甜蜜的复制和粘贴:)
  • 我推荐使用“context.getPackageName()”来获取包名,让你的方法更可重用。另请注意,如果将 Base64.encodeToString 括在引号中,则可能需要去除一些杂散字符。
  • 我的 keytool 签名输出与 FB 预期的不匹配时遇到了同样的问题。原来我是冲动地输入密钥库的 sudo 密码。只要我没有为 debug.keystore 输入密码,keytool 的输出就会与 FB 的预期相符!
  • 谢谢 - 我不知道为什么 keytool 方法不起作用,但你的方法解决了我的问题。可以通过 Facebook SDK 4 确认其与 Android Studios 1.3 预览版的合作。
【解决方案2】:
 try {
            PackageInfo info = getPackageManager().getPackageInfo("your pakage name here", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.e("KeyHash:", "key is: "+Base64.encodeToString(md.digest(), Base64.DEFAULT));

                }
        } catch (NameNotFoundException e) {

            Log.e("error","error name not found");
        } catch (NoSuchAlgorithmException e) {

            Log.e("error","error no algorithm");

        }**strong text**

通过使用这个,你可以获得你的密钥哈希,然后在 facebook devloper 站点中使用这个。

【讨论】:

  • 如果您给出的答案与已发布的相同,请尝试支持已发布的答案,而不是再次发布。
  • 没关系。其实我没看过你的帖子。
【解决方案3】:
 try {
         PackageInfo info = getPackageManager().getPackageInfo("your package name", PackageManager.GET_SIGNATURES);
         for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", "KeyHash:  " + Base64.encodeToString(md.digest(), Base64.DEFAULT));
         }
      }
      catch (PackageManager.NameNotFoundException e) {

      }
      catch (NoSuchAlgorithmException e) {

      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多