我正在开发一个Android应用程序,我想在其中集成一个Facebook 发布功能。我下载了Facebook-Android SDK,然后 readme。Md(文本文件)在那里,其中提到要生成 Android的键散列。我如何生成它?
当前回答
这个方法对我来说很有效,我做了一些观察:
每个SHA1密钥都有一个对应的密钥散列,长度为28个字符,以'='结尾 我尝试过在线工具来获取我的SHA1的哈希键,但这个哈希键从来没有为我工作过。 如果你在windows上安装Open -ssl:Open ssl 我已经在我拥有的所有密钥存储库文件上使用了这个keytool命令,即登台、调试和发布。
keytool -exportcert -alias my_alias_name -keystore "C:\Users\...my_filename.jks" | "C:\Openssl\bin\openssl.exe" sha1 -binary | "C:\Openssl\bin\openssl.exe" base64
注意: 上面的方法总是会给你一个键散列,即使你填错了任何参数。知道你是否得到正确的散列键的技巧是——运行这个命令后,如果提示输入密码,这意味着后续的键是正确的。
不要使用my_filename。密钥存储库,但使用my_filename代替。jks。
其他回答
最好的方法是使用以下代码:
private void getHashKey(String pkgName)
{
try
{
PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
{
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = Base64.encodeBytes(md.digest());
_hashKey_et.setText(hashKey);
Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
}
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
}
但我很沮丧,因为没有简单的工具来为Facebook应用程序生成HashKey。每次我都必须使用Openssl和Keytool,或者使用代码从签名中获得哈希值……
所以我写了一个简单的KeyGenTool,将为您做这项工作:-> KeyGenTool谷歌播放<-
享受:)
目前Facebook Android教程中的说明在Windows下并不适用。他们的例子展示了如何将keytool输出输出到openssl,但是如果你在Windows下尝试这样做,由于某些原因输出是无效的。我发现我必须使用中间文件才能让它正常工作。以下是对我有用的步骤:
首先从谷歌下载openssl for Windows。
C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin
C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin
C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt
运行这些命令后,有效的散列存储在文件base64.txt中。复制粘贴到你的Facebook应用设置中。
您可以从SHA-1密钥获得密钥哈希。 这很简单,你需要得到你的SHA-1(签名APK)密钥从Play Store检查下图。
现在复制SHA-1密钥并在这个网站http://tomeko.net中过去,也检查下面的图像以获得您的密钥哈希。
我找到的最简单的解决方法是:
打开原木猫 尝试使用Android SDK访问Facebook 在日志中寻找这样的行: 04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch。 您的密钥“abcdefgHIJKLMN+OPqrstuvwzyz”与您的 应用程序设置。检查您的应用程序设置 http://www.facebook.com/developers 复制“abcdefgHIJKLMN+OPqrstuvwzyz”,并将其粘贴到Facebook Android密钥哈希区。
你可以从Java/Kotlin Activity中打印哈希键。部分代码已弃用,但这里是包含新旧代码的完整解决方案。
private fun printHashKey(context: Context) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNING_CERTIFICATES
)
for (signature in packageInfo.signingInfo.apkContentsSigners) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
} else {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNATURES
)
for (signature in packageInfo.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
}
} catch (e: PackageManager.NameNotFoundException) {
Log.d(TAG, "printHashKey: PackageManager.NameNotFoundException -> $e")
} catch (e: NoSuchAlgorithmException) {
Log.d(TAG, "printHashKey: NoSuchAlgorithmException -> $e")
}
}
推荐文章
- Facebook:永久页面访问令牌?
- 禁用在android中打开导航抽屉的滑动手势
- Android:允许平板电脑竖屏和横屏,但强制手机竖屏?
- 如何使布局与视图填充剩余的空间?
- 字符串资源新行/n不可能?
- 如何点击或点击一个TextView文本
- Android房间-简单的选择查询-不能访问数据库在主线程
- Android: ScrollView vs NestedScrollView
- Git克隆/拉不断冻结在“存储密钥在缓存?”
- 错误:无法运行mksdcard SDK工具
- 未附加到窗口管理器的视图崩溃
- 将焦点设置为EditText
- 如何把空格字符放入XML字符串名?
- 我可以设置“android:layout_below”在运行时编程?
- Android Studio谷歌JAR文件导致GC开销限制超过错误