Android应用程序签名过程-哈希与Facebook API存储的哈希不匹配

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和Firebase为Android和iOS制作一个混合应用程序。我将贯穿我如何签署应用程序的整个过程。我是手动操作的,因为当我运行
ionic cordova run android
时,它会生成一个已经签名的
android debug.apk
,我不知道它到底在用什么签名

  • 首先我自己做钥匙:

    keytool-genkey-v-keystore debug.keystore-alias debug-keyalg RSA-keysize 2048-validity 10000

  • 这给了我debug.keystore

  • 然后我得到SHA1散列,这样我就可以添加到googlefirebase(我确信这个命令正在做一些其他有用的事情,比如让爱奥尼亚在构建应用程序时总是使用它进行签名):

    keytool-list-v-keystore debug.keystore-alias debug-storepass-keypass

  • 这给了我12:23:34:45:56:67:78:

  • 接下来,我运行
    keytool
    来获取常规的ol'hash,我不知道它叫什么,我猜它是MD5:

    keytool-exportcert-alias debug-keystore debug.keystore | openssl sha1-binary | openssl base64

  • 这给了我(例如编的):EJHJHSDF9804HHSDFHF8=我在Facebook开发控制台中添加了这个。它被保存了,已经保存了好几天了

  • 然后我需要一个
    .apk
    来签名。我必须运行命令
    ionic cordova build android
    ionic cordova run android
    这给了我android-debug.apk,它是出于某种原因签名的。我查了一下电话号码 /platforms/android文件夹,并看到一个debug-signing.properties文件,该文件给出了my
    debug.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": ""
            }
        }
    }