我正在尝试从Facebook SDK中获取HelloFacebookSample,但是我遇到了一些问题。发布状态更新显示Facebook对话框,看起来很棒,但是当我按下分享按钮时收到错误,“(#404)密钥散列XXX-XXXX与任何存储的密钥哈希值不匹配”。我想知道在我的过程中我做错了什么。这就是我所做的。
1)我做了keytool -exportcert -alias androiddebugkey -keystore“path”\ debug.keystore | openssl sha1 -binary | openssl base64
我从cmd运行了上面的内容,并收到了一个哈希值。这似乎有效,因为FB文档中提到的所有内容都发生了,这意味着我被提示输入密码而我使用了“android”,之后我立即获得了一个数字。
2)我拿了我的号码,并在创建一个名为“Example”的应用程序后将其输入开发人员门户。我有截图,我把它放在哪里。
3)然后我回到示例项目,并更改了应用程序ID以匹配我的开发人员门户网站(在上面的屏幕截图中)。
在那之后,我认为事情会很好。但我仍然收到这个错误。然后我尝试使用代码片段获取密钥哈希。在我的onCreate中,我有以下内容:
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.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
Log.d(TAG, "NameNotFoundException");
} catch (NoSuchAlgorithmException e) {
Log.d(TAG, "NoSuchAlgorithmException");
}
返回的是“NameNotFoundException”,因此没有键。我如何让这个工作,我的步骤中缺少什么?提前谢谢。
答案 0 :(得分:7)
你的代码很好,我第一次得到了NameNotFoundException
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.e("KeyHash:",
Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
Log.d("NameNotFoundException", "NameNotFoundException");
} catch (NoSuchAlgorithmException e) {
Log.d("NameNotFoundException", "NoSuchAlgorithmException");
}
然后我更改了PackageInfo info = getPackageManager().getPackageInfo(
"MY.PACKAGE.NAME.GOES.HERE",
PackageManager.GET_SIGNATURES);
确保您项目的清单文件中的包名称为com.facebook.samples.hellofacebook
,否则无法使用。