【问题标题】:Facebook hash key not workingFacebook哈希键不起作用
【发布时间】:2014-01-20 03:08:35
【问题描述】:

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

【问题讨论】:

    标签: android facebook hash login key


    【解决方案1】:
    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());
            }
    

    【讨论】:

    • 我找到了一个临时解决方案来解决我的问题。似乎在我的设备上卸载 Facebook 应用程序允许我的密钥哈希被接受。问题是,在我的应用上登录 Facebook 是否不适用于设备上已安装 Facebook 的用户?
    • 卸载 FB 应用程序不允许您的密钥哈希被接受,它只是不发送密钥哈希,并使用不同的登录机制(不是 SSO),因此您获得不同类型的访问令牌。如果他们确实安装了 FB 应用程序,您的应用程序将为其他用户中断。您应该适当地生成密钥哈希,并将它们包含在您的应用设置中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多