Android FB登录应用 - 无效密钥哈希

时间:2014-10-08 12:55:34

标签: android eclipse facebook

我有这个问题,我在Eclipse中使用带有java的FB SDK Android创建FB登录。当我在Android模拟器中调试并运行此应用程序都是正确的,我可以登录我可以注销。但是,当我导出应用程序开发版本(.apk),并在我的手机或genymotion模拟器上安装它时,我发现了这个错误:

"Invlaid key hash. The key hash xxxxxxxxxxxxxxxxxxx does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/72012084472886"

哈希键是创建correoct我使用它:

 try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "com.facebook.samples.hellofacebook", 
            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) {

} catch (NoSuchAlgorithmException e) {

}

你有什么想法,有什么不对吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

当您通过ADB运行应用程序时,Eclipse通常使用名为debug.keystore的密钥库,此密钥库通常是您不能在生产应用程序上使用的密钥库。导出应用程序并创建密钥库时,keyhash将更改值,因为您更改了密钥库。

您可以将此代码实现到您的应用,这样您就可以将keyhash回显给stackrace:

public static void printHashKey(Context pContext) {
        try {
            PackageInfo info = getPackageInfo(pContext, PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hashKey = new String(Base64.encode(md.digest(), 0));
                Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
            }
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "printHashKey()", e);
        } catch (Exception e) {
            Log.e(TAG, "printHashKey()", e);
        }
    }

该代码段仅适用于开发,不适合生产!