Android应用程序签名过程-哈希与Facebook API存储的哈希不匹配
我正在使用Ionic和Firebase为Android和iOS制作一个混合应用程序。我将贯穿我如何签署应用程序的整个过程。我是手动操作的,因为当我运行Android应用程序签名过程-哈希与Facebook API存储的哈希不匹配,android,facebook,cordova,ionic-framework,hash,Android,Facebook,Cordova,Ionic Framework,Hash,我正在使用Ionic和Firebase为Android和iOS制作一个混合应用程序。我将贯穿我如何签署应用程序的整个过程。我是手动操作的,因为当我运行ionic cordova run android时,它会生成一个已经签名的android debug.apk,我不知道它到底在用什么签名 首先我自己做钥匙: keytool-genkey-v-keystore debug.keystore-alias debug-keyalg RSA-keysize 2048-validity 10000 这给了
ionic cordova run android
时,它会生成一个已经签名的android debug.apk
,我不知道它到底在用什么签名
keytool-genkey-v-keystore debug.keystore-alias debug-keyalg RSA-keysize 2048-validity 10000
keytool-list-v-keystore debug.keystore-alias debug-storepass-keypass
keytool
来获取常规的ol'hash,我不知道它叫什么,我猜它是MD5:
keytool-exportcert-alias debug-keystore debug.keystore | openssl sha1-binary | openssl base64
.apk
来签名。我必须运行命令ionic cordova build android
或ionic cordova run android
李>
这给了我android-debug.apk,它是出于某种原因签名的。我查了一下电话号码
/platforms/android文件夹,并看到一个debug-signing.properties文件,该文件给出了mydebug.keystore
的确切位置。所以我想它一定是签对了。所以我的android-debug.apk必须用我的密钥签名
因此,我在我的android设备上运行应用程序,启动Facebook登录,我得到:
屏幕截图已删除,但显示您的哈希(列出的哈希)与我们的哈希不匹配。你自己去吧
我从来没有在任何地方见过这种杂烩。见鬼,它应该用我的debug.keystore签名,当我在上面运行keytool时,它等于(例如)EJHjhsdf9804hjHSDfhf8=。这没有道理
也许如果我能得到一个已经签名的.apk的散列,那么我就能知道他妈的签名是什么了。理论上,它应该是我的debug.keystore,但显然Facebook并不这么认为
有什么指导吗
post edit->所有来源都说要在你的debug.keystore
上运行keytool
,这就是你放在任何地方的散列,但似乎Firebase或Facebook或其他什么东西知道如何创建自己的应用程序散列,以与Facebook开发控制台中存储的散列进行比较
编辑
我刚刚将该屏幕截图中的散列添加到Facebook开发控制台,现在我的应用程序可以运行了
因此,这证明我想我无法控制我的应用程序的签名。也许我做得不对。获取.keystore
的哈希值不会比获取.apk
的哈希值不同吗?散列不是根据文件大小生成的吗?还是内容有没有办法获取已签名apk的“密钥散列”?
运行应用程序,获取错误消息,然后将错误消息哈希添加到FB dev控制台不是运行应用程序的有效方法
为了添加,我创建了一个build.json
文件,用于构建APK。以下是构建过程文本:
BUILD SUCCESSFUL
Total time: 1.604 secs
Built the following apk(s):
C:/Users/.../ionic-project/project/platforms/android/build/outputs/apk/android-debug.apk
ANDROID_HOME=C:\Users\...\AppData\Local\Android\sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_141
No target specified, deploying to device 'myphone123'.
Reading build config file: C:\Users\...\ionic-project\project\build.json
Reading the keystore from: C:\Users\...\ionic-project\project\debug.keystore
Skipping build...
Built the following apk(s):
C:/Users/.../ionic-project/project/platforms/android/build/outputs/apk/android-debug.apk
Using apk: C:/Users/.../ionic-project/project/platforms/android/build/outputs/apk/android-debug.apk
Package name: com.kennyhall.project
LAUNCH SUCCESS
[OK] Your app has been deployed.
和build.json
复制这个密钥散列并删除旧的密钥散列,看看它是否有效。我做到了,它确实有效。真奇怪,是吗?我已经更新了问题。Idk为什么我不能得到正确的散列。关键是你可能得到了调试散列键,或者你的应用程序仍然不是一个签名的apk。虽然这个过程看起来不错。我可以添加答案吗?嗯,签名过程肯定正常,因为我使用Google Plus获得了身份验证。我甚至通过生成一个新的
.keystore
进行了进一步测试,Google Plus auth无法工作。我在密钥库上运行了一个SHA1哈希,并将其放入Google Firebase,Google Play auth viola工作了。这意味着Facebook正在做一些奇怪的事情来授权,或者以某种方式生成错误的散列。复制这个密钥散列并删除旧的密钥散列,看看它是否有效。我做了,它确实有效。真奇怪,是吗?我已经更新了问题。Idk为什么我不能得到正确的散列。关键是你可能得到了调试散列键,或者你的应用程序仍然不是一个签名的apk。虽然这个过程看起来不错。我可以添加答案吗?嗯,签名过程肯定正常,因为我使用Google Plus获得了身份验证。我甚至通过生成一个新的.keystore
进行了进一步测试,Google Plus auth无法工作。我在密钥库上运行了一个SHA1哈希,并将其放入Google Firebase,Google Play auth viola工作了。这意味着Facebook正在做一些奇怪的事情来授权,或者以某种方式生成错误的哈希。
{
"android": {
"debug": {
"keystore": "debug.keystore",
"storePassword": "password",
"alias": "debug",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "release.keystore",
"storePassword": "password",
"alias": "release",
"password" : "password",
"keystoreType": ""
}
}
}