我正在开发一个Android应用程序,我想在其中集成一个Facebook 发布功能。我下载了Facebook-Android SDK,然后 readme。Md(文本文件)在那里,其中提到要生成 Android的键散列。我如何生成它?
当前回答
在Android Studio中也解决了我的问题,但方法略有不同。
在Android Studio中获取SHA-1值。
点击它 点击签署报告 sha - 1副本
SHA-1值是这样的 CD: A1: EA: A3:5C: 5 c: 68: FB:费尔南多-阿隆索:0:6 b: E5:5A: 72:64: DD: 26:8D: 44:84 打开http://tomeko.net/online_tools/hex_to_base64.php进行转换 你的SHA1值到base64。这就是Facebook所要求的 生成的哈希 " ********************= " 并复制关键散列 facebook应用程序控制台。
部分答案来自Github链接
其他回答
我犯了一个小错误,应该记住。如果你正在使用你的密钥库,那么给出你的别名,而不是androiddebugkey…
我的问题解决了。现在,如果我的设备上安装了Facebook,那么我的应用程序仍然在Facebook登录集成上获得数据。只关心你的哈希键。
请看下文。
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64
然后按Enter -它会要求您输入密码,然后输入您的密钥库密码,而不是Android。
酷。
在一个类似的问题上,我发现这对我很有效:
将你想知道散列值的apkname.apk文件复制到“Java\jdk1.7.0_79\bin”文件夹中 执行keytool -list -printcert -jarfile apkname.apk 复制SHA1值并使用此站点进行转换 使用转换后的Keyhash值(例如:zaHqo1xcaPv6CmvlWnJk3SaNRIQ=)
试试这个:
两种方法来获得哈希键值
1)从命令行获取哈希键(官方文档:https://developers.facebook.com/docs/android/getting-started)
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64
OR
2)获取哈希键使用代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Hask Kay generation
GetKeyHase();
}
private void GetKeyHase() {
try {
PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = (MessageDigest.getInstance("SHA"));
md.update(signature.toByteArray());
String hashkey_value = new String(Base64.encode(md.digest(), 0));
Log.e("hash key", hashkey_value);
//check you logcat hash key value
}
}catch (Exception e) {
Log.e("exception", e.toString());
}
}
你可以从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教程中的说明在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应用设置中。
推荐文章
- 在Android中,对话框被取消或被取消有什么区别?
- 在ScrollView触摸处理中的HorizontalScrollView
- 何时在Android中使用RxJava,何时使用Android架构组件中的LiveData ?
- 如何在Android项目中使用ThreeTenABP
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用removeView() (Android)
- 我的Android设备没有出现在adb设备列表中
- 在没有安装apk的情况下获取Android .apk文件的VersionName或VersionCode
- Fragment onResume() & onPause()不会在backstack上被调用
- 如何设置基线对齐为假提高性能在线性布局?
- 如何获得当前屏幕方向?
- 如何在Android中渲染PDF文件
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 如何改变TextInputLayout的浮动标签颜色
- Android工作室如何运行gradle同步手动?
- 如何使用Windows命令行更改目录