集成Facebook登录时无效的密钥哈希值
我正在使用Facebook LoginManager
类将Facebook登录集成到我的应用程序中。所以当我第一次安装我的应用程序并尝试登录一切正常,我可以很容易地使用loginResult.getAccessToken().getToken()
获取访问令牌。集成Facebook登录时无效的密钥哈希值
但是,一旦我卸载&重新安装我的应用程序,并尝试重新登录,它抛出我的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)
{
}
});
下面写代码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
。
它完成了。 !
还有一件事,现在我已经在Facebook开发人员控制台中设置了我的发布密钥存储值。这很好,或者我需要使用debug.keystore值。 – AndroidDev
首次设置应用程序时,请使用degub.keystore值。之后,进入设置并粘贴这个新的keyhashes值。 有两个键'1)开发密钥哈希 - 设置您的degub.keystore值。 2)释放密钥散列 - 设置这个值,你从上面的代码中获得了' –
是的,它的工作.. :)谢谢,再见我想知道他们为什么不用我们的发布密钥库值做同样的事情,相反,发送他们的keyhash值,我们需要在控制台中进行替换。 – AndroidDev
在你活动的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删除此片段。
是你的应用程序处于开发模式还是公开? –
Devlopment模式..我可以如何公开它? – AndroidDev
我正在上传这个答案。 :-) –