在android中的Facebook应用程序中无效的哈希键

时间:2014-07-24 08:49:55

标签: android facebook key facebook-login

我从android下面的代码中获得了哈希键:

try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
}
catch (NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
}
catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
}
catch (Exception e){
Log.e("Exception", e.toString());
}

但它是无效密钥...请建议如何验证Facebook登录的哈希密钥....

4 个答案:

答案 0 :(得分:9)

您正在使用调试密钥获取哈希键...如果您未在调试模式下签署包并运行应用程序,则可能会有效。你需要做的是:

1)转到清单文件并添加到应用程序android:debuggable =“true”。

2)签署应用程序,使用capy并手动安装到您的设备或从命令行使用“adb install path_to_apk”。

3)现在运行你的应用程序并监控logcat。

4)你会得到一个新的密钥,它将是一个匹配的密钥,密钥facebook应用程序显示在错误信息中,你所拥有的密钥现在在最后一个有一个=符号。

5)在Facebook开发者网站上注册此密钥

替代技巧

你可以做另外一件事只需注册错误信息中显示的密钥msg“密钥散列###与任何存储的密钥哈希都不匹配”只需在###的末尾添加=。它就像### =

你结束了!!希望这会奏效。

答案 1 :(得分:1)

将此函数添加到您的类中,并在oncreate方法中调用此函数,然后在您的设备中生成sign apk并运行sign apk并检查log-cat,将生成的哈希密钥复制到Facebook开发人员控制台。

private void showHashKey()
{
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.kisan.kisan",
                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 (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

}

检查facebook身份验证,它会正常工作

答案 2 :(得分:0)

我认为问题是你可能没有更新facebook开发者帐户中的keyhash。请参阅:https://developers.facebook.com/docs/android/getting-started

使用以下方法生成Keyhash:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

并在“应用程序”标签下的“常规设置”

下更新到您的Facebook开发者网站

答案 3 :(得分:0)

在点击时将其分配给按钮,并从logcat获取Key Hash。

Button getKeyHash = (Button) findViewById(R.id.button_key_hash);
    getKeyHash.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Key Hash
            try {
                PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),
                        PackageManager.GET_SIGNATURES);
                for (Signature signature : packageInfo.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (PackageManager.NameNotFoundException e1) {
                Log.e("Name not found", e1.toString());
            } catch (NoSuchAlgorithmException e) {
                Log.e("No such an algorithm", e.toString());
            } catch (Exception e) {
                Log.e("Exception", e.toString());
            }
        }
    });

现在转到https://developers.facebook.com/apps的应用 。然后点击设置,添加密钥哈希并保存。enter image description here