整合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() { @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) { } }); 

在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

完成。 !

在您的活动的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=

复制D/KeyHash:(936):之后的所有内容D/KeyHash:(936):在Facebook开发者控制台中,你很高兴。

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