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.keystoreC:\Users\<username>\.android下的文件 生成新密钥(通过再次运行您的应用) 在Facebook Developers 上创建一个新应用并添加新的哈希键 重新运行您的应用

成功了!

【讨论】:

以上是关于Facebook 登录,哈希键问题 - Flutter ,如何在 Flutter 中生成 Facebook Hashkey?的主要内容,如果未能解决你的问题,请参考以下文章

PhoneGap 上 Facebook 登录的哈希键 构建和 PhoneGap 混合应用程序的 OAuth URL Facebook 登录

Facebook SDK 登录问题

使用 facebook sdk 为应用程序生成哈希键

Android facebook应用程序的哈希键

iOS:为 Facebook 解析登录,在用户名字段中创建一些哈希

应用程序在某些设备上被错误配置为 Facebook 登录 [重复]