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.
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) {
}
}
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 .
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();
}
}
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
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.
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=