安卓哈希密钥

7

我已经完成了一个使用Facebook SDK与Facebook集成的Android应用程序的开发。目前这个应用程序是功能正常的并且运行良好,但是即使应用程序正在运行,我仍然不完全理解什么是Android密钥哈希。

1)我知道Facebook SDK提供给开发者一个唯一的应用程序ID,以便他们知道他们要“交流”的对象,因此他们也可以控制谁是谁等等,但是他们从拥有您的Android密钥哈希中获得了什么好处呢?

2)我知道我的开发PC上的模拟器有一个密钥哈希(我已经获取),三星Galaxy S1和S2(它们都有相同的密钥哈希)有不同的密钥哈希,现在我已经将apk传递给另一个具有不同密钥哈希的用户(以及不同的手机品牌和Android版本)。那么,如果有一天我在Google Play上发布我的应用程序,我需要更新Facebook/开发人员所有可能的哈希键吗?

3)哈希密钥对于型号或平台/Android版本是唯一且恒定的,还是我可以从我的应用程序生成一个密钥哈希,以便我只需添加一个密钥哈希,就可以使从不同手机运行的相同应用程序使用相同的密钥哈希?

4)总的来说 - 我不理解密钥哈希是什么,谁生成它,最重要的是为什么 - 密钥哈希有什么用途,对Facebook有什么好处?

我已经试图搜索相关文档,但在这里我只找到了有关如何了解模拟器密钥哈希的问题或有关在Google上与Facebook/开发人员合作的指导。我相信有涵盖此内容的文档,但我没有找到。

谢谢!

2个回答

19
1) 我明白Facebook SDK提供给开发者一个独特的应用ID,以了解与谁“交流”,从而控制身份等信息,但他们通过获得你的Android密钥哈希有什么好处呢?
这是一种额外的安全层,用于验证应用程序的身份,可以在文档中查看。
2) 我知道我的开发PC上的模拟器有一个密钥哈希(我已经得到了),三星Galaxy S1和S2都有一个不同的密钥哈希,现在我已经将apk传递给另一个具有不同密钥哈希(不同品牌和Android版本的手机)的用户。那么,如果有一天我在Google Play上发布我的应用程序,我需要更新Facebook/开发人员所有可能的哈希键吗?
Key hash是基于您用来构建APK的计算机生成的,与运行它的手机无关。因此,如果您只在一台开发机上开发应用程序,则只需担心一个密钥散列。当前,在您仍在开发应用程序时,您正在使用android debug密钥,当您想要发布到Google Play时,Google要求您使用自己的密钥签署APK,而不是android debug密钥。当您创建自己的密钥以签署APK时,您还需要复制并粘贴您自己密钥的密钥哈希值到Facebook的应用程序设置中。

3)密钥散列是否唯一且恒定于模型或平台/Android版本,或者我可以从我的应用程序中生成密钥散列,以便添加并使所有运行不同手机的相同应用程序使用相同的密钥散列?

如我上面所说,密钥哈希与运行平台/设备无关,密钥哈希与您构建APK的机器相关。因此,为了测试目的,您可以找到Android调试密钥的密钥哈希并将其粘贴到应用程序设置中,所有运行该APK构建的手机都将正常工作。简而言之,哈希键=>开发PC,而不是哈希键==>电话

4)再次概括 - 我不理解密钥哈希是什么,谁生成它,最重要的是为什么 - 密钥哈希有什么用处,对Facebook有什么好处? 我尝试搜索它,但在这里我只找到了关于了解仿真器密钥哈希步骤或有关在Google上与Facebook /开发人员合作的指导的问题。 我相信有涵盖此内容的文档,但找不到。 谢谢!

密钥哈希是签署编译应用程序时使用的密钥的哈希值。 Eclipse会自动使用android调试密钥为您执行此操作,但当您上传到Google Play时,您需要创建自己的密钥。 它对您和Facebook都有好处,因为它是另一层安全性,可以确保代表您调用API的应用程序实际上是您的应用程序。


非常感谢您提供如此有用的答案。唯一与您所说不符的是,我在onFacebookError方法中放置了一个toast,并将e.getMsg()作为要显示的字符串,而在不同的手机品牌上,我会收到不同的消息,告诉我需要在facebook的应用设置页面中添加不同的哈希值。这是我使用开发PC构建的相同应用程序,但事实上,Facebook API表明设备上的应用程序正在尝试使用不同的哈希值进行操作。为什么会这样呢? - user1555863
在 e.getMsg 的消息中添加引号后,应用程序可以正常工作。但是使用模拟器的第一个哈希值(通过 openssh 获取)时无法正常工作。 - user1555863
1
您需要确保按照我们的文档说明输入了正确的哈希值,并确保命令提示您输入密码,密码为“android”。如果没有要求输入密码,则哈希密钥不正确。此外,根据计算机的不同,有时密钥可能会更改,如果是这样,哈希值也会更改,您只需进行相应调整即可。但是,当您最终使用自己的密钥签署应用程序时,这不是一个问题。 - Jesse Chen
嗨,我和我的朋友正在开发一个具有Facebook登录功能的应用程序。我们都生成了自己的密钥哈希,并在生成密钥哈希时提供了它。问题是我可以通过Facebook登录,但我的朋友却不能。可能是什么问题? - AndroidGeek
嗨@JesseChen,两台不同的计算机生成的调试密钥哈希(由SDK在.android文件夹中生成)会不同吗?如果是,为什么?如何实现? - Yogesh

2

你需要使用一个密钥来注册你的应用程序,并将其与你的Facebook开发者资料相关联,请参阅此文档。在部署之前,为了在各种设备上测试应用程序,你应该使用Android调试密钥,如Android文档中所述。


我正在使用调试密钥.. 但不同的手机上可能有不同的调试密钥吗?当我签署应用程序时,所有设备都将使用相同的密钥吗? - user1555863
那么你的签名过程可能存在问题。如果您描述一下使用调试密钥签署应用程序的步骤,我们可能能够帮助您纠正它。 - peter_budo
实际上我什么都没做。我在文档中读到,如果您不对应用程序进行签名,开发插件会为您签名,因此您可能不知道整个签名过程。我正在使用Eclipse。 - user1555863
如果你所说的是真的,你仍然会遇到问题,因为Facebook明确要求: "还要确保您正在使用正确的密码-对于调试密钥库,请使用'android'生成keyhash。" - peter_budo
我没有听懂你上一条评论。 - user1555863
正如Jesse所说,你必须使用Android,因此在我之前的评论中使用了单引号。 - peter_budo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接