visual-studio - 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 等效项。
现在的问题:
为什么我的设备哈希与我在 Mac 中生成的不同?从 Facebook 的文档中我了解到,如果用于创建哈希和构建我的应用程序的密钥库文件相同,则哈希键应该相同。
也许我使用了错误的密码?如果是这样,我该如何更改或找到正确的?
也许 Visual Studio 正在使用我不知道的第三个密钥库?如果是这样,我怎样才能找出正在使用的密钥库文件?
如何使 PackageManager 类在 Xamarin 中工作?我正在查看他们的文档,但我真的无法弄清楚。
谢谢!
编辑
我确实使用了错误的密码。对我有用的是使用位于~/.local/share/Xamarin/Mono for Android/debug.keystore
密码的密钥库android
解决方案
您可以在官方文档中找到有关 Visual Studio 在 Mac 和 Windows 上使用的默认(调试)密钥库的大量信息。您可以在keytool命令示例中看到别名和密码。
您是否正在为具有发布版本的设备构建应用程序?这可以解释使用不同的密钥库文件,具体取决于项目配置。过去,当我尝试为 Facebook 生成哈希但没有成功时,我看到的是,当提示输入密码时,我实际上输入了错误的密码。如果您按照 Facebook 的说明进行操作,则基本上是将几个命令连接在一起,然后对输出进行散列处理。该过程的输出实际上可以是“无效密码”,然后您使用 base64 散列,起初可能看起来像一个有效的散列,但事实并非如此。
推荐阅读
- python - 在 Tensorflow 中向 LSTM 权重添加噪声
- python-3.x - Keras - 将不同数据点的不同参数传递到 Lambda 层
- angularjs - AngularJS {{message}} 不会显示
- jfrog-cli - jfrog 将目录复制到另一个目录
- json - NodeJS/Knex 创建 Json 响应
- react-native - Reactnative 中的图像背景
- karate - 在匹配响应中找到的数组中对象的索引 [*]
- sql-server - SQL Server:仅在两个值相同的情况下选择行一次
- javascript - 如何使用 Javascript AJAX 数据库检索数据调整 Javascript 下拉列表添加?
- android - 上传后Play商店不会缩小应用程序的下载大小