工具:Unity、AndroidStudio、
1.创建keystore,亲测用androidstudio创建新的keystore别名规则问题(应该是全部小写才可以),始终无法创建,换成unity的keystore直接创建新的
上一步骤中在androidstduio 创建签名的时候,其实不是创建失败,根据提示还需要用keytool转一道。创建的签名格式有两种格式,一种是keystore,一种是jks,两者的算法稍有区别,在不同的平台会需要不同的签名,两者之间可以通过工具互转。
- Key Hash值,获取方式如下:
- 通过代码的方式获取
private void facebookHashKey() {
PackageInfo info = null;
try {
info = getPackageManager().getPackageInfo("com.hg.truckvsfire", 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 (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
在代码中调用这个方法,注意需要修改包名,在日志中,通过KeyHash过滤,即可得到facebook的keyhash值。
- 通过代码的方式获取SHA1值
public static String SHA1(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
byte[] cert = info.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(cert);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < publicKey.length; i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i])
.toUpperCase(Locale.US);
if (appendString.length() == 1)
hexString.append("0");
hexString.append(appendString);
hexString.append(":");
}
String result = hexString.toString();
return result.substring(0, result.length()-1);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
注意,需要打release包,并输出这个日志才行,debug包与release包的SHA1值不一样。
- 通过keytool命令获取签名指纹
- cd到jks的上一级目录,如:D:\project\android\SignFile\colorballs
- 在cmd中输入这个命令 keytool -list -keystore colorballs.jks jks对应jks的名字
- 输入秘钥库口令中输入 密码
- 得到sha1
- 输入这个命令 keytool -exportcert -alias colorballs -keystore colorballs.jks | openssl sha1 -binary | openssl base64
- 输入密码 得到facebook的key hash
其中 -alias后面是签名文件的别名,-keystore 后面是签名文件的签名,这个需要根据项目来改变