Facebook哈希密钥不起作用

时间:2014-01-20 03:08:36

标签: android facebook hash login key

因此,使用keytool命令,我能够为使用Facebook登录的Android应用生成哈希键。出于这个问题的目的,keytool输出的散列是“abcdefg =”。但是当我尝试从我的应用程序登录到Facebook时,错误显示“密钥哈希abcdefg与任何存储的密钥哈希值不匹配”并显示我从keytool得到的相同的确切密钥,但最后没有等号。为什么不起作用?此外,当我尝试在我的Facebook开发者控制台上手动键入密钥哈希(而不是复制/粘贴)时,如果没有等号,它将不会使用密钥,因为它只接受字符数可以被4整除的键(我的等号的键有28个字符,键没有只有27个字符)。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

updateLanguage(getApplicationContext(), "en"); 
printHashKey(getApplicationContext(),"ur application package name here");

注意1:使用release keystore创建apk文件。然后在设备上运行keyhash将打印logcat。复制keyhash并将其放在Facebook应用编辑设置页面上。

注意2:正确的keyhash仅在设备上生成。不要使用模拟器获取keyhash。

  public static String printHashKey(Context context, String packagename)
        {

            String TAG = packagename;
            try
            {
                Log.d(TAG, "keyHash: start");
                PackageInfo info = context.getPackageManager().getPackageInfo(TAG,PackageManager.GET_SIGNATURES);
                for (Signature signature: info.signatures)
                {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    String keyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                    Log.d(TAG, "keyHash: " + keyHash);
                    return keyHash;
                }
                Log.d(TAG, "keyHash: end");
            }
            catch (NameNotFoundException e)
            {
                Log.d(TAG, "keyHash: name:"+e);
            }
            catch (NoSuchAlgorithmException e)
            {
                Log.d(TAG, "keyHash: name:"+e);
            }

            return "error";
        }

        public static void updateLanguage(Context context, String code)
        {
            Locale locale = new Locale(code);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
        }