Android:Facebook SDK关键哈希背后的概念?

时间:2013-07-31 11:50:40

标签: android facebook-android-sdk facebook-sdk-3.0

我正在使用FacebookSDK并按照所有步骤生成新的keyhash,使用debug keystore生成的keyhash就像一个魅力,但使用我们自己的几个密钥库生成的keyhash不起作用,然后我尝试了{{3中给出的函数但它仍然无法正常工作。我尝试在onCreate中使用以下代码

// Add code to print out the key hash
        try {
            System.out.println("Inside try for keyhash");
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.myapp.facebookint", 
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                System.out.println("KeyHash:"+Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
        } catch (NameNotFoundException e) {
            System.out.println("keyhash name not found");
        } catch (NoSuchAlgorithmException e) {
            System.out.println("keyhash algo not found");
        }

它给了我一个keyhash,我在Facebook App设置中插入,没有决议!现在我想知道使用keyhash的概念,facebook如何识别它?如果我只是使用调试keyhash上传应用程序会发生什么?

我的印象是facebook将keyhash与app本身的签名匹配,如果两者都使用相同的密钥库签名,那么它允许应用程序进行身份验证,但似乎并非如此。当我导出应用程序时就像我准备发布一样,通过文件浏览器将apk下载到手机中并尝试从那里安装和运行,它与调试模式下的相同。

任何人都可以对此有所了解。

1 个答案:

答案 0 :(得分:0)

是的,情况确实如此。 Facebook知道您的应用程序签名并验证它以确定尝试进行身份验证的应用程序是否正确。我想我的System.out.println中出现了错误,我使用了https://stackoverflow.com/a/9600642/243354中的以下代码

您可以插入此代码,导出apk,然后将其签名以进行发布,然后将该apk加载到模拟器并检查logcat中的哈希键标记,找到后,更新到Facebook设置。