我完全不明白这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。虽然我一直得到错误openssl不识别为内部或外部命令。问题是,即使我能让它工作,我该做什么,然后做什么?
当前回答
https://developers.facebook.com/docs/android/getting-started/
4.19.0 - 2017年1月25日
Facebook SDK
修改
Facebook SDK现在在应用程序启动时自动初始化。在大多数情况下,不再需要手动调用FacebookSDK.sdkInitialize()。有关详细信息,请参见升级指南。
为调试
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 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 (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
其他回答
private fun generateKeyHash(): String? {try {
val info =packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
return String(Base64.encode(md.digest(), 0))
}
} catch (e: Exception) {
Log.e("exception", e.toString())
}
return "key hash not found"
}
以下是你需要做的
从代码下载openSSl 提取它。在C:/目录下创建一个名为OpenSSL的文件夹,并将解压后的代码复制到这里。
检测调试。Keystore文件路径。如果你没有找到,那么在C:/中进行搜索,并在下一步中使用命令中的Path。
检测您的keytool.exe路径,并进入dir/ in命令提示符,并在一行中运行此命令
$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
它会要求输入密码,输入android 这是所有。你会得到一个key-hash
OpenSSL:如果你的操作系统没有预安装OpenSSL(例如Windows没有预安装),你就必须安装它。如何安装取决于您的操作系统(对于Windows,请查看coder_For_Life22提供的链接)。
最简单的方法是将openssl.exe二进制文件复制到您的keytool路径(如果您使用的是Windows)。如果不想这样做,则必须将其添加到PATH环境变量中。然后执行文档中提供的命令。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
注意-keystore后面的参数指向调试密钥库。这个位置也取决于您的操作系统。应位于下列地点之一:
Windows Vista或7 - C:\Users\.android\debug.keystore Windows XP - C:\Documents and Settings\.android\ debug.keystore OS X和Linux - ~/.android/debug.keystore
如果所有操作都正确,系统将提示您输入密码。这是用于调试证书的android。如果密码正确,控制台将输出一个散列(有些随机字符和数字)。
把它复制到android键哈希字段内的首选项你的应用程序在facebook上。要做到这一点,请访问developers.facebook.com/apps,选择你的应用程序,进入编辑设置,向下滚动。之后,等待几分钟,直到更改生效。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add code to print out the key hash
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) {
}
...
保存更改并重新运行示例。检查你的logcat输出是否有类似这样的消息:
D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=
将密钥哈希保存在开发人员配置文件中。重新运行示例并验证可以成功登录。
也有一个简单的解决方案。在你的应用中运行这个:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
一个不需要FB SDK(基于这里的解决方案)的较长的例子:
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
结果应该以“=”结尾。
推荐文章
- 有没有办法自动安装Android SDK ?
- 如何检查一个视图在Android中是否可见?
- 一对多、多对一、多对多的区别?
- Android是否保留。apk文件?如果有,在哪里?
- 从枚举中选择一个随机值?
- 如何从URL获取参数与JSP
- 如何在Eclipse中生成Javadoc注释?
- 找到java类从哪里加载
- 从集合中随机选取一个元素
- 为什么x == (x = y)和(x = y) == x不一样?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- 在Android 5棒棒糖中,通知栏图标变成白色
- 从URI获取真实路径,Android奇巧新的存储访问框架
- 等待未来的名单
- 如何检查JSON键是否存在?