在Facebook android教程中,我们被告知使用以下代码来创建密钥哈希:
keytool -exportcert -alias androiddebugkey -keystore~ / .android / debug.keystore | openssl sha1 -binary | openssl base64
这是在所有情况下使用的确切代码吗?例如~/.android/debug.keystore
应该是C:/folderone/foldertwo/.android/debug.keystore
而不是{{1}}?
正如您所看到的,我不确定是否需要引号,是否需要完整路径!
有人能够提供真实世界的例子吗?
请参阅
https://developers.facebook.com/docs/mobile/android/build/#sso
答案 0 :(得分:16)
试
try {
PackageInfo info = getPackageManager().getPackageInfo("com.eatapp", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
在您的主要活动:-)这是它适用于Android SDK 3.0的唯一解决方案
答案 1 :(得分:11)
你可以这样创造
keytool -exportcert -alias androiddebugkey -keystore c:\Users\<your windows default user>\.android\debug.keystore | openssl sha1 -binary | openssl base64
输入密钥库密码:android
答案 2 :(得分:3)
/**
* Generates the hash key used for Facebook console to register app. It can also be used for other sdks) Method copied from: https://developers.facebook.com/docs/android/getting-started/
*/
public static String printHashKey(Context ctx) {
// Add code to print out the key hash
try {
PackageInfo info = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (NameNotFoundException e) {
return "SHA-1 generation: the key count not be generated: NameNotFoundException thrown";
} catch (NoSuchAlgorithmException e) {
return "SHA-1 generation: the key count not be generated: NoSuchAlgorithmException thrown";
}
return "SHA-1 generation: epic failed";
}
答案 3 :(得分:2)
在eclipse中,窗口 - &gt; 偏好 - &gt; Android - &gt; 构建 - &gt; 默认调试密钥库,复制路径以替换~/.android/debug.keystore
答案 4 :(得分:2)
在日志中出现错误时,尝试登录Facebook时,请查找以下内容:
Invalid key hash. The key hash *** does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/565561836797777
其中&#34; ***&#34;是你需要使用的关键。
答案 5 :(得分:1)
我遇到了同样的问题,我花了几个小时才找到解决方案,但实际上Facebook SDK本身就提供了解决方案。
在DialogListener类中的我修改了onFacebookError方法:
@Override
public void onFacebookError(FacebookError error) {
Log.d("myTag",error.getmessage);
}
执行应用程序(使用我用于市场的相同密钥进行签名),在LogCat上将显示带有正确密钥的此标记下的消息。
我们还创建了一个简单的项目来完成所有工作,并在警报框和LogCat上返回正确的密钥。您可以在our blog上找到它。
答案 6 :(得分:1)
keytool -exportcert -alias androiddebugkey -keystore“debug.keystore path”| openssl sha1 -binary | openssl base64
如果您没有为open ssl和java sdk设置环境变量,而不是将jdk的bin文件夹路径替换为keytool而使用openssl路径代替openssl而不是忘记为路径添加双引号
ex-“C:\ Program Files \ Java \ jdk1.5.0_11 \ bin”-exportcert -alias androiddebugkey -keystore“C:\ Users \ amin.android \ debug.keystore”| “F:\ openssl \ binsha1 \ openssl.exe”-binary | “F:\ openssl \ binsha1 \ openssl.exe”base64
答案 7 :(得分:1)
一个强力选择就是继续尝试与您的应用分享内容。我的应用程序然后显示一个Facebook页面,其中包含它正在尝试匹配的密钥。然后,您只需复制此密钥并将其放在开发人员Facebook帐户的Facebook“设置”页面中即可。
不理想,但在紧要关头可能会有所帮助。
答案 8 :(得分:0)
有两种方法可以为Facebook生成Hashkey。
您可以使用以下代码段
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest messageDigest= MessageDigest.getInstance("SHA");
messageDigest.update(signature.toByteArray());
String hashKey = new String(Base64.encode(messageDigest.digest(), 0));
Log.i("Hash Key ", "value is " + hashKey);
}
} catch (NoSuchAlgorithmException e) {
Log.e("Exception ", "is ", e);
} catch (Exception e) {
Log.e("Exception ", "is ", e);
}
您可以通过将SHA1粘贴到This link
来为Facebook Online创建Hashkey快乐编码:)