整合Facebook登录时无效的密钥哈希

时间:2015-08-03 10:53:42

标签: java android facebook

我正在使用Facebook LoginManager课程将Facebook登录整合到我的应用中。因此,当我第一次安装我的应用程序并尝试登录时,一切正常,我可以使用loginResult.getAccessToken().getToken()轻松获取访问令牌。

但是一旦我卸载了&重新安装我的应用并尝试再次登录,它会向我抛出Facebook Exception "无效的密钥哈希。密钥散列NDMi5aisFkTeU6BlER3L8JZ + wHw =与任何存储的密钥散列不匹配。在http://developers.facebook.com/apps/1646433015643090"

配置您的应用密钥哈希值

为什么这样,卸载应用程序时有什么事情要做。

我使用的代码

FacebookSdk.sdkInitialize(getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().logInWithReadPermissions((Activity)mContext, Arrays.asList("email", "user_photos", "public_profile"));

        LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult)
            {
                new FacebookLoginLoaderTask(mContext, loginResult.getAccessToken().getToken()).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);

            }

            @Override
            public void onCancel()
            {
                System.out.print("Login Cancel");
            }

            @Override
            public void onError(FacebookException exception)
            {

            }
        });

2 个答案:

答案 0 :(得分:1)

在onCreate方法中写下面的代码:

try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "your package name", PackageManager.GET_SIGNATURES);
            for (android.content.pm.Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign = Base64
                        .encodeToString(md.digest(), Base64.DEFAULT);

                Toast.makeText(getApplicationContext(), sign, Toast.LENGTH_LONG)
                        .show();
            }

        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }

调试您的应用。复制sign代码。

After that go to your facebook app -> go to settings -> paste this key hashes over there  after that make tab to yes for `Single Sign On` and saved it.

现在转到status & Review -> make make it public

完成了。 !!

答案 1 :(得分:0)

在您的活动onCreate中,请使用以下代码:

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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));
            }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

您会看到类似的内容:12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

在Facebook开发者控制台中复制D/KeyHash:(936):之后的所有内容,您就可以了。

之后,您可以从onCreate中删除此代码段。