关于 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 个问题:

    这些密钥哈希有什么作用?

    为什么需要为ReleaseDevelopment 创建不同的密钥哈希?

    如果我还没有将我的应用发布到 PlayStore。我可以使用Release Key 代替Development key 吗?

    如果我的应用在 PlayStore 中上线,我可以继续使用Development 键吗?

    我应该在YOUR_RELEASE_KEY_ALIASYOUR_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 应用程序中检索用户信息

如何退出 Facebook SDK 事件记录?

利用 JavaScript SDK 部署网页版“Facebook 登录”

Facebook iOS sdk 获取用户 ID

Facebook v3 sdk monodroid 绑定

我是 iOS 版 Facebook SDK 的新手。我想向 Facebook 上的朋友发送邀请