Facebook 登录,哈希键问题 - Flutter ,如何在 Flutter 中生成 Facebook Hashkey?
Posted
技术标签:
【中文标题】Facebook 登录,哈希键问题 - Flutter ,如何在 Flutter 中生成 Facebook Hashkey?【英文标题】:Facebook login, problem with hash key - Flutter , How to generate Facebook Hashkey in flutter? 【发布时间】:2019-07-06 12:24:23 【问题描述】:会出现一个带有 Facebook 入口的窗口,当您单击“继续”时会出现错误
SERVER_ERROR: [code] 1349195 [message]: key hash 不匹配 任何已保存的哈希
login() async
final facebookLogin = new FacebookLogin();
final result = await facebookLogin.logInWithReadPermissions(['email']);
switch (result.status)
case FacebookLoginStatus.loggedIn:
print(result.accessToken.token);
Navigator.of(context).pushReplacementNamed('/home_screen');
break;
case FacebookLoginStatus.cancelledByUser:
print('CANCELED BY USER');
break;
case FacebookLoginStatus.error:
print(result.errorMessage);
break;
【问题讨论】:
您必须在developers.facebook.com 上使用正确的密钥哈希更新您的应用设置 您需要在 facebook 开发者面板中提供您的开发哈希键。看看here 【参考方案1】:转到您的输出 apk 文件(通常为 <project_root>\build\app\outputs\flutter-apk
)。
使用 keytools 获取 SHA1 值(在终端/git bash 中运行):
keytool -printcert -jarfile app-debug.apk
将 HEX 值转换为 base64 以获取以 = 结尾的值。 (即使用this site。注意在Input type
选择Hex
。并删除SHA1 密钥组之间的所有:
-> AB:CD:EF
= 错误,但ABCDEF
= 正确)
将该值更新为您的 android 平台下的键哈希值。
【讨论】:
这帮我解决了flutter app facebook登录问题。 谢谢它解决了我的问题。并且不要忘记在此站点链接上选择十六进制类别。 flutter 是否使用自己的证书进行应用签名?【参考方案2】:这就是我为 android build 生成 facebook keyhash 的方式
-
在 android studio 中打开 android 项目
打开应该扩展到
FlutterActivity
的MainActivity
复制此代码并粘贴到 MainActivity
导入 android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Base64
import android.util.Log
import io.flutter.embedding.android.FlutterActivity
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
class MainActivity: FlutterActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
printHashKey(this@MainActivity)
fun printHashKey(pContext: Context)
try
val info: PackageInfo = pContext.getPackageManager().getPackageInfo(pContext.getPackageName(), PackageManager.GET_SIGNATURES)
for (signature in info.signatures)
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.encode(md.digest(), 0))
Log.i("MainActivity", "printHashKey() Hash Key: $hashKey")
catch (e: NoSuchAlgorithmException)
Log.e("MainActivity", "printHashKey()", e)
catch (e: Exception)
Log.e("MainActivity", "printHashKey()", e)
替代解决方案:-
在终端运行此命令生成调试密钥
如何生成 Facebook 哈希键
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
【讨论】:
为什么直到现在还没有人赞成这个答案。这是最简单的谢谢 同意@evals 我如何获得释放密钥 只需在 android studio 打开时将您的设备与系统连接,因此在日志中您也会看到发布密钥【参考方案3】:您必须将哈希键添加到您在 facebook 上的应用页面。
要获取哈希键,请打开 cmd 端回车(如果没有,请下载 cygwin)
"C:\Program Files\Java\jdk1.8.0_121\bin\keytool.exe" -exportcert -alias androiddebugkey -keystore "C:\Users\username\.android\debug.keystore" | "C:\cygwin64\bin\openssl.exe" sha1 -binary | "C:\cygwin64\bin\openssl.exe" base64
之后它将打印哈希键,只需将其复制并粘贴到 developer.facebook 应用页面中
【讨论】:
【参考方案4】:发布有两种key hashes,debug获取 调试使用这个 mac版
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
适用于 Windows
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
发布
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
如果出现问题,请重新阅读 developerfacebook 的所有说明,祝你好运。
【讨论】:
【参考方案5】:经过几个小时的尝试,我终于找到了解决方案。
-
删除Facebook Developers网站上的任何应用
删除
debug.keystore
下C:\Users\<username>\.android
下的文件
生成新密钥(通过再次运行您的应用)
在Facebook Developers 上创建一个新应用并添加新的哈希键
重新运行您的应用
成功了!
【讨论】:
以上是关于Facebook 登录,哈希键问题 - Flutter ,如何在 Flutter 中生成 Facebook Hashkey?的主要内容,如果未能解决你的问题,请参考以下文章
PhoneGap 上 Facebook 登录的哈希键 构建和 PhoneGap 混合应用程序的 OAuth URL Facebook 登录