所以我已经在我的Android应用程序中实现了Facebook登录一段时间了,它已经好几个月了。
当我将SDK版本更新为最新版本(4.22.0)时,问题就出现了。在此之后,单击Facebook登录按钮只会导致短暂的登录尝试,然后没有任何内容。从日志中我可以看到FacebookCallback中的onCancel()正在被调用,但就是它。
卸载Facebook应用程序时,一切正常。我通过Web视图登录,然后我可以继续(调用onSuccess())。
我已经尝试恢复到之前使用的SDK版本,但没有运气。我已经检查过我的KeyHashes是否匹配(包括调试和发布)Facebook Developer Dashboard上的内容,它确实如此。我的应用ID也匹配。'
我知道我在尝试登录之前已经注销了,因为我正在使用LoginManager强制注销。
这很奇怪。我使用以下代码生成我的KeyHash:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"***.*****.************",
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 (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
答案 0 :(得分:0)
你需要有一个签名的aPK KeyHash,所以,在你的设备上运行签名的APk和签名的APK,并从调试日志中获取签名的keyHash。将密钥哈希更新到你的facebook开发者控制台。
答案 1 :(得分:0)
尝试将该代码用于fackbook哈希密钥生成。
try {
PackageInfo info = getPackageManager().getPackageInfo("enter your package", 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 (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
答案 2 :(得分:0)
我使用以下步骤在Facebook中为我的应用生成一个Key Hash:
在终端中导航到存储Android debug.keystore的目录。主要在Windows中,它位于“/Users/user_name/.android/”下,在Windows中为C:\ Documents and Settings.android)。
在mac中 - 键入cd~ / .android并按Enter键转到.android目录
进入“.android”目录后,运行以下命令获取调试密钥。 keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
使用相同的步骤获取Release键。只需使用以下命令替换该命令,并使用您的发布密钥别名。 keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | “PATH FOR openssl.exe”sha1 -binary | openssl base64
当提示您输入密码时,请键入android并按Enter键
复制以“=”结尾的终端中打印的值,并将其粘贴到Facebook的Key Hash字段中。然后单击“保存更改”按钮。