keytool with Android Facebook SDK

2022-09-03 15:10:00

我只想得到一些确认。

我正在窗口上进行开发

我正在尝试将Facebook集成到应用程序中,SDK文档说我需要“导出签名”

从这里:http://developers.facebook.com/docs/guides/mobile/#android

所以它说运行这个命令:

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

首先,我必须下载openssl:OpenSSL

现在上面的命令,我假设应该转换为:

"C:\path\to\java\keytool" -exportcert -alias your_alias -keystore "C:\path\to\your\keystore\keystore.name" | "C:\path\to\openssl_install\bin\openssl" sha1 -binary |"C:\path\to\openssl_install\bin\openssl" base64
  • 所以你想要安装在你最新的Java安装文件夹中的keytool吗?
  • 您希望别名是您在日食中用于正常apk创建的别名的名称吗?
  • 您希望密钥库成为导出 Android 应用程序时使用的密钥库吗?
  • 您希望 openssl 成为您刚刚安装的那个

因此,一旦我完成此操作,它就会要求输入密码:(当我键入密码时,它会显示密码)

如果我输入了正确的密码,我得到

'zR2tey1h9kqPRSW/yEYEr0ruswyD=' (已更改为 public)

但是如果我输入了一个不正确的密码,它仍然会以以下形式返回我的代码

'ga0RGNYHvTR5d3SVDEfpQQAPGJ1='?

所以,是的,只是在寻找一个确认,我正在做正确的事情,这是预期的输出


答案 1

获取哈希的最佳方式是运行以下代码:

try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;

                    md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    String something = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", something);
        } 
        }
        catch (NameNotFoundException e1) {
            // TODO Auto-generated catch block
            Log.e("name not found", e1.toString());
        }

             catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                 Log.e("no such an algorithm", e.toString());
            }
             catch (Exception e){
                 Log.e("exception", e.toString());
             }

当使用windows cmd,git bash或cygwing终端提取哈希时,这三个工具给出不同的结果。

最准确的是上面的代码


答案 2

是的,你正在以正确的方式做到这一点,我认为.i也执行这个命令,并将这个哈希放在我的fb应用程序中,它的工作正常。