Faceh хэш-ключ при использовании студии Android
Я использую android studio для разработки приложения, которое использует facebook sdk.
когда я использовал следующую команду
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
он вернул y5EquINHD6DvwVJFyJTuUEY3NSU =
при использовании этой хэш-клавиши facebook показывает ошибку
неверный параметр android_key. ключ c33Tm0FL_-kxyaPZq1JBLDh767U не соответствует ни одному
разрешенный ключ.
Является ли хэш-ключ, необходимый для Facebook, при использовании eclipse и Android-студии? который среди них является моим правильным хэш-ключом?
Я добавил хэш-ключ к моему приложению в facebook. все же приложение показывает неверный параметр android_key.
Ответы
Ответ 1
Почему бы вам не попробовать этот код и проверить хеш-ключ, который вы используете. Из документов facebook:
Помимо двойной проверки шагов генерации хэш-кода ключа, вот еще один вариант, который гарантирует, что вы используете правильный хэш ключа. Это включает в себя изменение кода в одном из примеров приложений для печати подписи, отправленной на 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) {
}
}
Ответ 2
Вот ссылка для создания хеш-ключа в 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();
}
}
}
Код взят отсюда.
Ответ 3
просто запустите его в методе 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
Предполагая, что вы скопировали-вставьте из вывода openssl в настройки приложения facebook, чтобы не было никаких заметок относительно похожих символов O0 или 1l | или G6...
Недавно я поместил диагностическую программу в Play Store, которая показывает хэш-ключ, установленный для любого приложения на вашем телефоне. Найдите "GetKeyHash". Он показывает вам все приложения на вашем устройстве, отсортированные по ним, когда они были в последний раз обновлены, и вы можете расширить любой из них, чтобы увидеть ключевые хэши (ы), имя пакета и действительные имена активности. Правильное приложение GetKeyHash не запрашивает и не использует какие-либо специальные разрешения, и Android должен сказать это при установке.
Для запуска на симуляторе это также доступно в http://rightparen.com/android/GetKeyHash.apk.
Обратите внимание: если вы создадите отладочную версию своего приложения в среде IDE, хэш-ключ будет отличаться от той розничной версии, которую вы отправляете в Play Store. Вы можете добавить несколько ключевых хэшей для приложения в консоли разработчика Facebook, чтобы можно было использовать отладочные ключи, а также ваш розничный ключ.
Если это дает тот же результат, может быть ошибка. В качестве потенциального решения только для отладочного ключа можно создать резервную копию ~/.android/debug.keystore и удалить этот файл. В следующий раз, когда вы создадите, система Android создаст новый ключ, который может не вызвать ошибку. На этом этапе вам нужно будет удалить приложение с вашего устройства или вы получите сообщение об ошибке при установке apk, требующей подписания с тем же сертификатом. Затем вы можете использовать GetKeyHash, как указано выше, или любой из стандартных методов, чтобы получить новый хэш ключа и добавить его в свое приложение на facebook.
Ответ 5
Вы можете указать текущий псевдоним внутри этого файла. И тогда вы можете использовать правильное имя, чтобы получить хэш...
, Оставьте пароль пустым, просто нажмите клавишу ввода...
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
Как вы можете видеть.. theres 1 key с именем androiddebugkey
... возможно, в вашем случае у вас есть то, что... o не писал специфический, когда вы запускали:
{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
}
который вернет все, что захочет... в этом случае.
y5EquINHD6DvwVJFyJTuUEY3NSU=
Ответ 6
Мне лично нравится генерировать свой хэш внутри файла приложения build.gradle
.
Эта функция build.gradle
генерирует хэш в Windows (измените C:\\OpenSSL-Win64\\bin\\openssl
на двоичное местоположение 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();
}
}
Затем вы можете распечатать результат в любом месте Gradle script.
println "Facebook Release Key Hash: " + getFacebookHash()
Я сохраняю необходимые данные в gradle.properties
:
STORE_FILE=C:/Keystore.jks
STORE_PASSWORD=password
KEY_ALIAS=keystoreAlias
KEY_PASSWORD=password
Ответ 7
Для отладки, если вы используете Eclipse, вам нужно будет сгенерировать этот хэш ключей с помощью отладочной клавиши Android. Когда вы будете готовы опубликовать свое приложение, вам нужно будет создать ключевое хеширование для ваших ключей подписи и обновить это значение в Facebook до того, как ваше подписанное приложение будет работать.
Посмотрите ниже ссылки
Android Facebook SDK: как создать не-отладочный хеш-ключ?
Нужно ли добавлять новый хэш хеширования в приложение Facebook при каждом изменении компьютера?