关于 Android 版 Facebook SDK 的开发和发布密钥哈希的问题
Posted
技术标签:
【中文标题】关于 Android 版 Facebook SDK 的开发和发布密钥哈希的问题【英文标题】:Questions about Development and Release Key Hashes for Facebook SDK for Android 【发布时间】:2015-12-23 10:37:52 【问题描述】:我阅读了 FB Developer 网站上的指南。
创建开发密钥哈希
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
并创建一个 Release Key Hashes
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
我有 6 个问题:
这些密钥哈希有什么作用?
为什么需要为Release
和Development
创建不同的密钥哈希?
如果我还没有将我的应用发布到 PlayStore。我可以使用Release Key
代替Development key
吗?
如果我的应用在 PlayStore 中上线,我可以继续使用Development
键吗?
我应该在YOUR_RELEASE_KEY_ALIAS
和YOUR_RELEASE_KEY_PATH
中添加什么内容?谁能提供样品吗?
为什么当我们为 ios 开发时,不需要那些密钥哈希?
不相关的额外问题
这个单点登录按钮有什么作用?
【问题讨论】:
但我只使用了 Key Hash。开发密钥哈希仅用于测试,直到应用未在 Play 商店中发布。 【参考方案1】:问:这些密钥哈希有什么作用?
它们唯一地标识您的密钥库和应用程序。这是一个独特的 您的应用程序的指纹:签署您的应用程序
Android 要求所有应用都使用证书进行数字签名 在安装之前。 Android 使用此证书 识别应用程序的作者,证书不需要 由证书颁发机构签署。 Android应用经常使用 自签名证书。应用程序开发者持有证书的 私钥。签名概述
您可以在调试或发布模式下签署应用程序。你登录你的应用程序 开发期间的调试模式和准备就绪时的发布模式 分发您的应用程序。 Android SDK 生成证书以 在调试模式下签署应用程序。要在发布模式下签署应用程序,您需要 生成自己的证书。供您进一步参考,您可以 看看 keyhashes 在哪里http://developer.android.com/tools/publishing/app-signing.html
https://developers.facebook.com/docs/facebook-login/android
问:为什么需要为发布和开发创建不同的密钥哈希?
如您所知,android 使用不同的 Keystore 进行开发和发布,因为这两个 keystore 在各个方面都不同,所以它们都有不同的指纹和 SHA-1 哈希,因此它们的处理方式完全不同。
问:如果我还没有将我的应用发布到 PlayStore。我可以使用发布密钥而不是开发密钥吗?
是的,您只能将发布密钥用于生成 APK,但如果您处于调试模式,则此密钥根本不起作用。
问:如果我的应用在 PlayStore 中上线,我可以继续使用开发密钥吗?
是的,您可以继续使用开发密钥,但不能使用调试密钥。
问:我应该在 YOUR_RELEASE_KEY_ALIAS 和 YOUR_RELEASE_KEY_PATH 中添加什么?谁能提供样品吗?
如果您担心 Facebook 密钥,请附上图片
问:为什么当我们为 iOS 开发时,不需要那些密钥哈希?
这是由于平台要求。如果一个平台需要一件事,那么另一个平台也不需要。
单点登录
单点登录大致是 Facebook Connect 等服务的扩展(和替代),将您连接到第三方社交应用和服务。如果您已在手机上登录 Facebook,则可以使用您的 Facebook 凭据登录其他应用。
这是生成fb指纹的代码。
public void generateFbFingerPrint()
try
PackageInfo info = getPackageManager().getPackageInfo(
"com.group3amd.gc.activity",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign = Base64
.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("KEYHASH:", sign);
Toast.makeText(getApplicationContext(), sign, Toast.LENGTH_LONG)
.show();
catch (NameNotFoundException e)
e.printStackTrace();
catch (NoSuchAlgorithmException e)
e.printStackTrace();
【讨论】:
那么facebook问的那些hashkey,实际上并不是针对Facebook本身,而是针对Android App本身?我做对了吗?感谢您认真回答 你的generateFbFingerPrint
方法对 btw 有什么作用?
GenerateFbFingerprint 方法用于使用您当前的密钥库为 Facebook 快速生成密钥哈希
不,那些是给 facebook 的,他们实际上做的是他们识别你的密钥库,你使用它来生成你的 apk 文件,然后他们给你一个名为 keyhash 的唯一密钥,它唯一地标识你的应用程序,他们的密钥库是您用于对您的 apk 文件进行数字签名。不过,如果您有任何含糊之处,请随时提出:)快乐编码
我提供了两个链接供您帮助【参考方案2】:
这些密钥哈希有什么作用?
Android 要求所有应用在安装之前都必须使用证书进行数字签名。 Android 使用此证书来识别应用程序的作者,并且该证书不需要由证书颁发机构签名。所以这两个密钥都用于对您的应用进行数字签名。为什么需要为发布和开发创建不同的密钥哈希?
您在开发期间使用Development key
在调试模式下对您的应用进行签名,并在您准备在 Google Play 上分发您的应用时使用release key
。
如果我还没有将我的应用发布到 PlayStore。我可以使用发布密钥而不是开发密钥吗?
此时您必须使用release key
如果我的应用在 PlayStore 中上线,我可以继续使用开发密钥吗?
Google Play 不允许上传带有调试密钥的 APK,所以你必须使用release key
我应该在 YOUR_RELEASE_KEY_ALIAS 和 YOUR_RELEASE_KEY_PATH 中添加什么?谁能提供样品吗?
YOUR_RELEASE_KEY_ALIAS : 使用你喜欢的任何名称(只是为了记住密钥库的名称) YOUR_RELEASE_KEY_PATH :您要保存密钥库文件的路径(供将来使用)警告:将您的密钥库和私钥保存在安全可靠的地方,并确保您拥有它们的安全备份。如果您将应用发布到 Google Play,然后丢失了您签署应用所用的密钥,您将无法发布对应用的任何更新,因为您必须始终使用相同的密钥签署应用的所有版本。 em>
为什么当我们为 iOS 开发时,不需要那些密钥哈希?
ios 开发者还需要这些密钥苹果开发者团队生成证书用于开发和发布。我们必须在开发和发布时使用它这首先是关于 android app 和 Google play
for FACEBOOK
你必须生成不同的 key hash
用于开发和发布
how to generate keyhash for facebook
【讨论】:
【参考方案3】:这是你的答案。
开发密钥哈希 - 这仅用于测试,直到您尚未发布 Play 商店。 释放密钥散列 - 这是原始散列密钥,没有此密钥散列 Facebook 无法在 Play 商店中使用。
如果您创建 Release Key Hashes 则无需创建 2 个哈希键,则不需要创建 Development Key Hashes。
李> 是的,没有 Release Key Hashes facebook 无法在 Play 商店中运行。 没有开发密钥哈希仅用于测试哈希密钥。 是的,他们可以做到。【讨论】:
那么,如果我不使用 Facebook SDK,我就不需要创建密钥哈希了吗?或者将 Android 应用程序发布到 PlayStore 是否必须使用 keyhash?很抱歉提出这个问题,感谢您抽出宝贵时间回答 如果你没有在你的应用中使用 facebook,那么不要使用 facebook keyhash,如果没有 keyhash,你会在 Play 商店中发布你的应用。【参考方案4】:Facebook 使用密钥哈希来验证您的应用与 Facebook 应用之间的交互。
如果您运行使用 Facebook 登录的应用程序,您需要将您的 Android 开发密钥哈希添加到您的 Facebook 开发人员资料中。 对于您发布的应用版本,您还需要生成并设置发布密钥哈希。
在 OS X 或 Windows 上,您可以通过生成密钥或使用 Settings.getApplicationSignature(Context) 返回的值来获取密钥。
更多信息请参考以下链接,
https://developers.facebook.com/docs/android/getting-started
【讨论】:
以上是关于关于 Android 版 Facebook SDK 的开发和发布密钥哈希的问题的主要内容,如果未能解决你的问题,请参考以下文章
Facebook SDK:在我的 Android 应用程序中检索用户信息