【问题标题】:Android - getting hash key for Facebook IntegrationAndroid - 获取 Facebook 集成的哈希键
【发布时间】:2011-06-28 07:02:39
【问题描述】:

我正在尝试在我的应用中实现 Facebook,以允许将内容发送到用户的墙上、更新状态等。

所以在下载完内容后,我被告知使用密钥库文件获取密钥。我决定勇敢地创建自己的密钥库文件(用于稍后发布的东西)并且成功地做到了。

创建文件后,虽然我在尝试从中检索密钥时遇到各种问题,但我通过 keytool/命令提示符输入了命令,它要求我输入密钥库密码...

输入我最初设置的密码后,除了奇怪的 ascii 符号和字母以及我的密钥库详细信息之外,我什么也得不到。怎么了??

更新: 好的,我知道您可能需要使用 OpenSSL 才能正确显示文本。我已经安装了 OpenSSL,但是如何使用它来获取哈希码?

【问题讨论】:

  • 另外,我已经在 FB 上设置了一个开发页面,它给了我应用 ID 和秘密,我还需要做这个 keytool 的事情吗?

标签: java android facebook sdk keystore


【解决方案1】:
  1. 从以下位置下载 Openssl:http://code.google.com/p/openssl-for-windows/downloads/list

  2. 在C盘创建一个openssl文件夹

  3. 将 Zip 文件解压到 openssl 文件夹中

  4. 检查 keytool 可执行文件所在的目录是否在您的路径中。 (例如,在我的 Windows 7 机器上,它位于 C:\Program Files (x86)\Java\jre6\bin。)
  5. 打开cmd并粘贴:

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

如果需要,输入密码 android 你收到你的哈希码

【讨论】:

  • 欢迎来到 SO。您的答案与一年多前发布的该问题的上一个答案几乎相同。如果您要添加缺失的信息,请考虑对现有答案发表评论,而不是创建新答案。
【解决方案2】:

我在Linux下一直用这个方法,因为原来的方式失败了:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore > key.out
cat key.out | openssl sha1 -binary > key.bin
cat key.bin | openssl base64

您将获得在您的 Facebook 应用程序的移动页面、android 部分输入所需的密钥。每次使用不同的 keytore 对应用进行签名时,您还需要在 facebook 页面上更改密钥。

【讨论】:

  • 谢谢,这大大节省了时间。
【解决方案3】:

最好的方法。

*试试{ PackageInfo 信息 = getPackageManager().getPackageInfo( "您的包裹名称", PackageManager.GET_SIGNATURES); for(签名签名:info.signatures){ MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("你的标签", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } 捕捉(NameNotFoundException e){} 捕捉(NoSuchAlgorithmException e){ }*

有时 openssl 提供了错误的 keyhash。

【讨论】:

    【解决方案4】:

    您可以使用下面的代码来获取哈希键:

    try {
    
       PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 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) {
       Log.e("name not found", e.toString());
      } catch (NoSuchAlgorithmException e) {
       Log.e("no such an algorithm", e.toString());
      }
    

    参考:

    http://limbaniandroid.blogspot.com/2013/04/how-to-get-hash-key-for-integarte.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2013-11-23
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多