Facebook 登录,哈希键问题 - Flutter,如何在 Flutter 中生成 Facebook Hashkey?

Max*_*bko 8 android facebook ios flutter

出现一个带有 Facebook 入口的窗口,当您单击继续时出现错误

SERVER_ERROR: [code] 1349195 [message]: 密钥散列与任何保存的散列都不匹配

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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

小智 31

  1. 转到您的输出 apk 文件(通常为<project_root>\build\app\outputs\flutter-apk)。

  2. 使用 keytools 获取 SHA1 值(在终端 / git bash 中运行):

    keytool -printcert -jarfile app-debug.apk

  3. 将 HEX 值转换为 base64 以获得以 = 结尾的值。(即使用此站点。注意Input type选择Hex。并删除:SHA1 密钥组之间的所有内容-> AB:CD:EF= 错误,但ABCDEF= 正确)

  4. 将该值更新为您的 android 平台下的键哈希值。


Qui*_*ner 7

这就是我为 android build 生成 facebook keyhash 的方式

  1. 在android studio中打开android项目
  2. 打开应该扩展到的 MainActivity FlutterActivity
  3. 复制此代码并粘贴到 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么到目前为止还没人赞成这个答案。这是最简单的谢谢 (2认同)

Clo*_*III 5

发布有两种密钥哈希,调试以获取调试,对于 mac 使用此

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

对于Windows

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

待发布

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

如果出现问题,请重新阅读开发者 Facebook 的所有说明,祝你好运。