首页 > 解决方案 > Xamarin 生成的调试 facebook 登录密钥哈希与终端生成的密钥哈希不匹配

问题描述

首先,引用史蒂夫乔布斯的话:

“我感到难过,不是因为微软的成功——我对他们的成功没有意见。(……)我对他们只是生产真正的三流产品这一事实感到不满。”

JK。现在我们走吧。我刚刚在我的公司接手了一个 Xamarin 项目,我对这个框架真的没有经验,所以我想有人可以在某些方面启发我。

我正在尝试在物理设备中以调试模式执行 Facebook 登录,但我无法使哈希键正常工作。它抛出了很好的“无效的密钥哈希。密钥哈希 xxxxxxxxx 与任何存储的 ky 哈希不匹配。等等......”错误。

我在 Android Studio 中做过很多次,而且看起来总是很简单。我有我的 appId 设置,AndroidManifest.xml并将哈希添加到 Facebook 用于开发仪表板。现在我正在关注 Facebook 关于密钥哈希的教程,但无论我做什么,我生成的密钥哈希总是与我设备中显示的不同。

我在使用 Visual Studio for Mac 7.5 的 Mac 中。首先,我尝试使用 生成哈希~/.android/debug.keystore,但没有成功。在进一步的研究中,我发现 Xamarin 实际上使用了位于 中的另一个 debug.keystore ~/.local/share/Xamarin/Mono for Android/debug.keystore,同样的错误。我注意到的另一个奇怪的事情是,如果我使用不同的密码,它会给我不同的哈希值。

再搜索一下,我发现有一种方法可以使用该类以编程方式生成密钥PackageManager,但是由于我在 Xamarin 中,所以我很难弄清楚。我找不到 PackageManager.GET_SIGNATURES 的 Xamarin 等效项。

现在的问题:

  1. 为什么我的设备哈希与我在 Mac 中生成的不同?从 Facebook 的文档中我了解到,如果用于创建哈希和构建我的应用程序的密钥库文件相同,则哈希键应该相同。

    • 也许我使用了错误的密码?如果是这样,我该如何更改或找到正确的?

    • 也许 Visual Studio 正在使用我不知道的第三个密钥库?如果是这样,我怎样才能找出正在使用的密钥库文件?

  2. 如何使 PackageManager 类在 Xamarin 中工作?我正在查看他们的文档,但我真的无法弄清楚。

谢谢!

编辑

我确实使用了错误的密码。对我有用的是使用位于~/.local/share/Xamarin/Mono for Android/debug.keystore密码的密钥库android

标签: visual-studioxamarinxamarin.formsfacebook-loginandroid-package-managers

解决方案


您可以在官方文档中找到有关 Visual Studio 在 Mac 和 Windows 上使用的默认(调试)密钥库的大量信息。您可以在keytool命令示例中看到别名和密码。

您是否正在为具有发布版本的设备构建应用程序?这可以解释使用不同的密钥库文件,具体取决于项目配置。过去,当我尝试为 Facebook 生成哈希但没有成功时,我看到的是,当提示输入密码时,我实际上输入了错误的密码。如果您按照 Facebook 的说明进行操作,则基本上是将几个命令连接在一起,然后对输出进行散列处理。该过程的输出实际上可以是“无效密码”,然后您使用 base64 散列,起初可能看起来像一个有效的散列,但事实并非如此。


推荐阅读