web-dev-qa-db-fra.com

clé de hachage facebook lors de l'utilisation d'Android studio

j'utilise Android studio pour développer une application qui utilise Facebook sdk.

quand j'ai utilisé la commande suivante

C:\Program Files\Java\jdk1.7.0_21\bin>keytool -exportcert -alias androiddebugkey
 -keystore "C:\Users\ninad\.Android\debug.keystore" | "D:\OpenSSL\bin\openssl" s
ha1 -binary |"D:\OpenSSL\bin\openssl" base64

il a retourné y5EquINHD6DvwVJFyJTUUEY3NSU =

lors de l'utilisation de cette clé de hachage, facebook indique l'erreur 

paramètre Android_key non valide. la clé c33Tm0FL_-kxyaPZq1JBLDh767U ne correspond à aucune clé autorisée

La clé de hachage nécessaire pour Facebook est-elle différente lorsque vous utilisez Eclipse et Android Studio? Laquelle de ces clés est ma clé de hachage correcte?

J'ai ajouté la clé de hachage à mon application sur Facebook. l'application affiche toujours le paramètre Android_key non valide. 

27
null pointer

POURQUOI n'essayez-vous pas ce code et vérifiez la clé de hachage que vous utilisez. De la documentation facebook:

Outre la double vérification de vos étapes de génération de hachage de clé, voici une autre option garantissant que vous utilisez le hachage de clé correct. Cela implique de changer de code dans l'un des exemples d'applications pour imprimer la signature envoyée à Facebook.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.package", 
                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) {

    }
}
59
Tarun

Voici le lien pour créer une clé de hachage facebook:

public class FacebookHashKeyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facebook_hash_key);
        try {
            PackageInfo info = getPackageManager().getPackageInfo("your.package.name", 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) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

Code pris de ici .

7
Vijay Arora

il suffit de l'exécuter dans la méthode oncreate 

private void printHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "-----------PUT YOUR PACKAGE NAME ------------",
                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();
    }

}
4
Gharjyot Singh

Personnellement, j'aime bien générer mon hachage dans le fichier d'application build.gradle.

Cette fonction build.gradle générera le hachage sous Windows (changez C:\\OpenSSL-Win64\\bin\\openssl en votre emplacement binaire OpenSSL):

def getFacebookHash = { ->
    try {
        def stdOut = new ByteArrayOutputStream()
        def stdIn = new ByteArrayInputStream()
        exec {

            commandLine "keytool", "-exportcert", "-alias", KEY_ALIAS, "-keystore", STORE_FILE, "-storepass", STORE_PASSWORD
            standardOutput = stdOut
        }
        stdIn = new ByteArrayInputStream(stdOut.toByteArray())
        stdOut = new ByteArrayOutputStream()
        exec {
            standardInput = stdIn
            commandLine "C:\\OpenSSL-Win64\\bin\\openssl", "sha1", "-binary"
            standardOutput = stdOut
        }
        stdIn = new ByteArrayInputStream(stdOut.toByteArray())
        stdOut = new ByteArrayOutputStream()
        exec {
            standardInput = stdIn
            commandLine "C:\\OpenSSL-Win64\\bin\\openssl", "base64"
            standardOutput = stdOut
        }
        def hashString = stdOut.toString().trim()
        return hashString
    }
    catch (error) {
        return error.toString();
    }
}

Vous pouvez ensuite imprimer le résultat n'importe où dans votre script Gradle.

println "Facebook Release Key Hash: " + getFacebookHash()

Je garde les détails nécessaires dans gradle.properties:

STORE_FILE=C:/Keystore.jks
STORE_PASSWORD=password
KEY_ALIAS=keystoreAlias
KEY_PASSWORD=password
0
Tim K

En supposant que vous ayez copié-collé de la sortie openssl vers les paramètres de l'application facebook afin d'éviter toute confusion avec des caractères similaires, O0 ou 1l | ou G6 ...

J'ai récemment mis un programme de diagnostic sur Play Store qui montre la clé de hachage telle que installée pour n'importe quelle application sur votre téléphone. Recherchez "GetKeyHash". Il vous montre toutes les applications de votre appareil triées par date de dernière mise à jour et vous pouvez les développer pour voir le (s) hachage (s) de clé, le nom du package et des noms d'activité valides. L'application GetKeyHash appropriée ne demande ni n'utilise aucune autorisation spéciale et Android devrait l'indiquer lors de l'installation.

Pour fonctionner sur un simulateur, il est également disponible à l’adresse http://rightparen.com/Android/GetKeyHash.apk

Notez que si vous créez une version de débogage de votre application dans un IDE, la clé de hachage sera différente de la version vendue au détail que vous envoyez à Play Store. Vous pouvez ajouter plusieurs hachages de clé pour une application dans la console de développeur Facebook afin de permettre les clés de débogage ainsi que votre clé de vente au détail.

Si cela donne le même résultat, il pourrait y avoir un bogue. En guise de solution potentielle pour une clé de débogage uniquement, vous pouvez sauvegarder ~/.Android/debug.keystore et supprimer ce fichier. La prochaine fois que vous construirez, le système Android générera une nouvelle clé qui ne déclenchera peut-être pas le bogue. À ce stade, vous devrez désinstaller l'application de votre appareil ou vous obtiendrez une erreur lors de l'installation concernant l'apk nécessitant d'être signé avec le même certificat. Ensuite, vous pouvez utiliser GetKeyHash comme ci-dessus ou l’une des méthodes standard pour obtenir le nouveau hachage de clé et l’ajouter à votre application sur Facebook.

0
rightparen

Vous pouvez lister les alias actuels dans ce fichier. Vous pouvez ensuite utiliser le nom correct pour obtenir le hachage ... . Laissez le mot de passe vide, appuyez simplement sur la touche Entrée ...

keytool -list -keystore keystorefile

*****************  WARNING WARNING WARNING  *****************
* La integridad de la información almacenada en el almacén de claves  *
* NO se ha comprobado.  Para comprobar dicha integridad, *
* debe proporcionar la contraseña del almacén de claves.                  *
*****************  WARNING WARNING WARNING  *****************

Tipo de Almacén de Claves: JKS
Proveedor de Almacén de Claves: Sun

Su almacén de claves contiene 1 entrada

androiddebugkey, Sep 22, 2016, PrivateKeyEntry, 
Huella Digital de Certificado (SHA1): 3B:8F:DB:46:A0:B7:2E:37:E1:78:41:10:BD:D0:8A:FF:63:E0:94:22

Comme vous pouvez le voir .. 1 clé avec le nom androiddebugkey... probablement dans votre cas, vous n'avez pas cela ... o vous n'avez pas écrit le nom spécifique lorsque vous avez exécuté:

{C:\Program Files\Java\jdk1.7.0_21\bin>keytool -exportcert -alias androiddebugkey
 -keystore "C:\Users\ninad\.Android\debug.keystore" | "D:\OpenSSL\bin\openssl" s
ha1 -binary |"D:\OpenSSL\bin\openssl" base64
}

qui retournera tout ce qu'il veut ... dans ce cas.

y5EquINHD6DvwVJFyJTuUEY3NSU=
0
superUser