我有这个问题,我在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) {
}
你有什么想法,有什么不对吗?
谢谢。
答案 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);
}
}
该代码段仅适用于开发,不适合生产!