因此,使用keytool命令,我能够为使用Facebook登录的Android应用生成哈希键。出于这个问题的目的,keytool输出的散列是“abcdefg =”。但是当我尝试从我的应用程序登录到Facebook时,错误显示“密钥哈希abcdefg与任何存储的密钥哈希值不匹配”并显示我从keytool得到的相同的确切密钥,但最后没有等号。为什么不起作用?此外,当我尝试在我的Facebook开发者控制台上手动键入密钥哈希(而不是复制/粘贴)时,如果没有等号,它将不会使用密钥,因为它只接受字符数可以被4整除的键(我的等号的键有28个字符,键没有只有27个字符)。有人可以帮忙吗?
答案 0 :(得分:0)
updateLanguage(getApplicationContext(), "en");
printHashKey(getApplicationContext(),"ur application package name here");
注意1:使用release keystore创建apk文件。然后在设备上运行keyhash将打印logcat。复制keyhash并将其放在Facebook应用编辑设置页面上。
注意2:正确的keyhash仅在设备上生成。不要使用模拟器获取keyhash。
public static String printHashKey(Context context, String packagename)
{
String TAG = packagename;
try
{
Log.d(TAG, "keyHash: start");
PackageInfo info = context.getPackageManager().getPackageInfo(TAG,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);
Log.d(TAG, "keyHash: " + keyHash);
return keyHash;
}
Log.d(TAG, "keyHash: end");
}
catch (NameNotFoundException e)
{
Log.d(TAG, "keyHash: name:"+e);
}
catch (NoSuchAlgorithmException e)
{
Log.d(TAG, "keyHash: name:"+e);
}
return "error";
}
public static void updateLanguage(Context context, String code)
{
Locale locale = new Locale(code);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}