2016-03-04 4 views
0

Я создаю приложение для Android, использующее SDK для входа в Facebook.Почему keytool генерирует разные хэш-файлы facebook androiddebugkey?

Я хотел бы генерировать хэш-код отладки. На сайте Facebook я нашел эту команду:

Keytool -exportcert -alias androiddebugkey -keystore % HOMEPATH% .android \ debug.keystore | openssl sha1 -binary | OpenSSL base64

Я изменил эту команду, чтобы работать на моем компьютере:

Keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ redio \ .android \ debug.keystore | "C: \ OpenSSL \ Bin \ OpenSSL" sha1 -binary | "C: \ OpenSSL \ Bin \ OpenSSL" base64

Далее я вошел пароль: Android

эта команда сгенерирована хэш: QUhvjKstiP5gc7hPEzwF89mwHws =

Затем я вставил его в консоль разработчика facebook , и facebook все еще говорит, что ключевой хэш недействителен. Я знаю, что я могу скопировать хеш-ключ из предупреждающего сообщения и вставить его в консоль разработчика facebook. Но мой вопрос в том, почему keytool генерирует неправильный хэш ключа?

+0

У меня было это раньше, и это было потому, что я вводил неправильный пароль, или я был не в том отладочном хранилище отладки. – StuStirling

+0

Да, но я проверил это несколько раз:/ – RediOne1

+0

У меня такая же проблема, я тоже получаю копию с предупреждением. Msg –

ответ

2

У меня также было много проблем с получением ключевого слова для создания допустимого хэша, но я реализовал метод, ниже которого я нашел, и смог выйти из действующего хэша. Точное происхождение кода немного неясно, но this blog post - хорошее предположение.

public static String printKeyHash(Activity context) { 
    PackageInfo packageInfo; 
    String key = null; 
    try { 
     //getting application package name, as defined in manifest 
     String packageName = context.getApplicationContext().getPackageName(); 

     //Retriving package info 
     packageInfo = context.getPackageManager().getPackageInfo(packageName, 
       PackageManager.GET_SIGNATURES); 

     Log.e("Package Name=", context.getApplicationContext().getPackageName()); 

     for (Signature signature : packageInfo.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      key = new String(Base64.encode(md.digest(), 0)); 

      // String key = new String(Base64.encodeBytes(md.digest())); 
      Log.e("Key Hash=", key); 
     } 
    } catch (PackageManager.NameNotFoundException e1) { 
     Log.e("Name not found", e1.toString()); 
    } 
    catch (NoSuchAlgorithmException e) { 
     Log.e("No such an algorithm", e.toString()); 
    } catch (Exception e) { 
     Log.e("Exception", e.toString()); 
    } 

    return key; 
} 
+1

Это ** очень хорошо **, что вы показали/связали, где вы получили этот код , Вы единственный человек, которого я видел (до сих пор), который сделал правильную вещь и указал источник, где они нашли код. К сожалению, источник, который вы нашли, также скопировал код. Я не знаю оригинального источника. Тем не менее, [раньше я нашел это 2013-07-10] (http://stacktips.com/tutorials/android/how-to-get-key-hash-for-android-facebook-app). Возможно, вы захотите указать указатель на код. – Makyen