所以我已经在我的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) {
}
3 回答
尝试将该代码用于fackbook哈希密钥生成 .
我使用以下步骤在facebook中为我的应用生成一个Key Hash:
首先在mac中打开一个终端(在Windows中打开命令提示符) .
在终端中导航到存储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字段中 . 然后单击“保存更改”按钮 .