我正在开发一个Android应用程序,并且必须向facebook提供hashkey。我已经尝试了3个appoarch,但没有一个有效。
遵循官方文件:
1。)我在这样的窗口中写了一个命令
"C:\Program Files\Java\jdk1.7.0_17\bin\keytool.exe" -exportcert -alias androiddebugkey -keystore C:\hk7.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64
输出:
57GY9jCxTL9lwhI9oAsjNZN1UJ4=
2。)和编程方式
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
输出:
PH//aR6qmcnZxj/n+4oT6AzEMZQ=
适用于我的设备仅
3.)别名值
keytool -alias hk7 -exportcert -keystore C:\hk7.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64
输出:
kiHnmqD3oxggF1Y7rgTqaWTPZk4=
只有第二种方式有效,但它仅适用于我的设备。在我的应用程序中,我记录了异常,它说API密钥不匹配。但似乎每个设备都有自己的密钥。如何解决?是不是因为我的openssl太老了?还是android端实现问题?是否有任何网站用于测试密钥是否有效?谢谢你的帮助
答案 0 :(得分:1)
第二种方式是最好的方式,现在你需要添加你想要测试的每个设备hashkey,因为你的应用程序不在Playstore上...一旦你在playstore / sign上用ttop key上传t app然后你必须只添加那个keyhash ....使用此函数获取KEYHASH
private void printKeyHashForThisDevice() {
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package", 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);
Logger.logger("============================================");
Logger.logger("KeyHash================ ", keyHash);
Logger.logger("============================================");
System.out.println("KeyHash================ " + keyHash);
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}