Hash principal para o aplicativo Android-Facebook


229

Estou trabalhando em um aplicativo Android, no qual desejo integrar um recurso de postagem no Facebook. Eu baixei o SDK do Facebook-Android e obtive o readme.md (arquivo de texto) lá, no qual é mencionado para gerar o hash da chave para o Android. Como eu o gero?


2
você pode verificar este link javatechig.com/2012/12/10/…
— Nilanchal

2
verifique este Para aqueles que ainda estão enfrentando questão,
— Chintan Khetiya

Gere HashKey para o modo de depuração e liberação usando isso. stackoverflow.com/questions/7506392/…
— Naeem Ibrahim

Para pegar as chaves assista a este vídeo
— Em breve Santos

Respostas:


310

Aqui estão os passos

  1. Faça o download do openssl a partir do código do Google (se você possui uma máquina de 64 bits, deve fazer o download do openssl-0.9.8e X64, não a versão mais recente)

  2. Extraia-o. crie uma pasta - OpenSSL em C: / e copie o código extraído aqui.

  3. detectar o caminho do arquivo debug.keystore. Se você não encontrou, faça uma pesquisa em C: / e use o Path no comando na próxima etapa.

  4. detectar seu caminho keytool.exe, vá para o prompt de comando dir / in e execute este comando em 1 linha

    $ keytools -exportcert -alias androiddebugkey -keystore "C: \ Documentos e configurações \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binário | "C: \ OpenSSL \ bin \ openssl" base64

    • vai pedir senha, colocar android
    • Isso é tudo. você receberá um hash de chave

Para mais informações visite aqui


5
Esta resposta quase funcionou para mim no Win7 x64. No entanto, o certificado codificado resultante estava incorreto. A resposta de Bryan Bedard abaixo produzirá o valor correto do certificado. Eu estou supondo que a tubulação no Windows é de alguma forma o culpado.
— Walt Armour

10
Nota para Usuários de 64 bits: isso funciona com a versão openssl-0.9.8e X64 Mas não useis com openssl-0.9.8k X64
— Nicola Peluchetti

Eu baixei o openssl-0.9.8e X64 para o meu sistema e o extraí. Ele contém apenas um arquivo com alguns dados. Por favor me ajude a saber mais.
— Ravikiran

2
o comando deve ser executado na pasta bin de java nos sistemas windows.
— Antrromet

1
@HanishSharma Tente deixar de fora o $.
— ban-geoengineering

241

[EDIT 2020] -> Agora eu recomendo totalmente a resposta aqui , muito mais fácil usando o android studio, mais rápido e sem necessidade de escrever nenhum código - o abaixo estava de volta nos dias de eclipse :) -.

Você pode usar esse código em qualquer atividade. Ele registrará a hashkey no logcat, que é a chave de depuração. Isso é fácil e é um alívio do que usar SSL.

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (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());
}

Você pode excluir o código depois de conhecer a chave;)


27
Pessoal, tome cuidado, depois de criar o apk, o hash da chave é alterado! porque usando esse código você obtém o hash de keystore de depuração, mas ao criar apk, é outro hash, precisa capturá-lo do log depois de tentar seu apk no emulador, exclua o código e exporte novamente sem esse log :) - eu sei que é um aborrecimento: D, mas para mim foi mais fácil do que keytool, boa sorte;)
— Bassem Wissa

4
Opensssl sempre criando problemas. Este método é o melhor. Basta criar um aplicativo em branco e imprimir a chave. Use-o. Valeu cara !!
— AnhSirk Dasarp

1
Esta é de longe a solução mais fácil. Usando o keytoolcomando, eu estava obtendo os hashes de chave errados (não sei por que, decidi que não me importava o suficiente para investigar). Isso funcionou e levou literalmente 5 minutos para obter os hashes de chave de depuração e liberação. +1
— Chris Cirefice 15/08/2015

1
Sim Sebastien, você só precisa instalar o apk assinado em um dispositivo, conectá-lo ao android studio e verificar o log cat, ou você pode mostrar o hash em um edittext na interface do usuário e copiá-lo, de qualquer forma sim, o hash que esse código produz funciona o apk assinado :)
— Bassem Wissa

1
usando keytool é uma bagunça este é realmente simples
— Tabish

135

Criei uma pequena ferramenta para Windows e Mac OS X. Basta inserir o arquivo de armazenamento de chaves e obter a chave de hash.

Se você deseja o arquivo debug.keystore padrão, use o alias e a senha padrão. Senão, use seu próprio arquivo e valores de keystore.

Confira, baixe a versão do Windows ou a versão do Mac OS X (o Dev-Host pode estar inativo às vezes ... então, se o link estiver quebrado, faça uma MP e eu o corrigirei).

Espero que ajude vocês ...

31 de dezembro de 2014 - EDIT: Alterado host para AFH. Por favor, deixe-me saber se os links estão quebrados

21/11/2013 - EDIT:

Conforme solicitado pelos usuários, adicionei um local padrão de keystore e um botão DONATE. Sinta-se livre para usá-lo se eu o ajudar. :)

Captura de tela Captura de tela 2


1
Melhor. Método. Sempre. Onde está o botão doar?
— precisa saber é o seguinte

1
@ Shahar2k5 Não sei de verdade, começou de novo e funcionou como um encanto. Desculpe
— Anearion

1
Funciona como um encanto! Obrigado por compartilhar :)
— Vinayak

1
@ Shahar Barsheshet Obrigado. você está certo. Transferido do domínio Devhost e sem problemas.
— MajorGeek

1
Eu não entendo uma coisa: por que sua ferramenta fornece uma chave SHA diferente, em comparação com o uso da keytoollinha de comando? Não deveria produzir resultados idênticos, se aplicado ao mesmo arquivo de armazenamento de chaves?
— nightfixed

64

As instruções atualmente no Tutorial para Android do Facebook não funcionam bem no Windows . O exemplo deles mostra como canalizar a saída do keytool para o openssl, mas se você tentar isso no Windows, a saída não será válida por algum motivo. Descobri que precisava usar arquivos intermediários para que funcionasse corretamente. Aqui estão as etapas que funcionaram para mim:

Comece baixando o openssl para Windows do Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

Após a execução desses comandos, o hash válido é armazenado no arquivo base64.txt. Copie e cole isso nas configurações do seu aplicativo no Facebook.


Funciona perfeito, tudo estava falhando.
— Oliver Dixon

2
Que PITA - mas Bryan está certo! O comando emitirá um hash quase não importa o que aconteça, se seu caminho está errado, a senha está incorreta ou os pipes não estão funcionando corretamente - você AINDA COMEÇARÁ UM HASH, mas não funcionará. Então (no Windows), larguei o Powershell e tentei o Cygwin - ainda não está funcionando. Somente depois de copiar o arquivo debug.keystore para o diretório de trabalho eu poderia executá-lo e funcionar !!
— Bobby

2
Portanto, em resumo, no Windows, use a técnica de Bryan para desmembrá-lo, OU use o cygwin com o arquivo de armazenamento de chaves no diretório que está funcionando: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binário | openssl base64 Se não solicitar uma senha, não encontrou o arquivo keystore corretamente.
— Bobby

Funcionou perfeitamente para mim. Ótima resposta.
— Ron

Se você quiser evitar obter hashes para casos de senha incorretos, basta verificar o mycert.bin antes de continuar com o openSSL. Caso contrário, você estaria hash o texto de erro senha errada :)
— Vaiden

50

Isto é o que é dado na página oficial do Facebook :

   keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Deixe-me quebrar esse comando em fragmentos.

  1. Procure "keytool.exe". Você pode pesquisar isso na unidade C :. Você pode encontrá-lo em "java jdk"ou "java jre". Se você instalou várias versões, escolha qualquer.

  2. Abra um prompt de CMD e vá para o diretório acima, onde você encontrou "keytool.exe".

    Clipe no "exe`" e cole o comando acima fornecido na página do Facebook.

  3. Você receberá um erro ao digitar que o OpenSSL não é reconhecido como no comando de entrada e saída. Solução: Faça o download do "Openssl" no OpenSSL (se você possui uma máquina de 64 bits, deve fazer o download do openssl-0.9.8e X64 ). Extraia e salve em qualquer lugar ... Salvei na unidade C: na OpenSSlpasta

  4. Substitua o openssl no comando acima, no qual você estava recebendo um erro do OpenSSL por "C: \ OpenSSL \ bin \ openssl" nos dois locais após o canal "|".

  5. Se for solicitada uma senha, digite android.

E você receberá sua chave de hash. Para mais etapas, consulte novamente a página do Facebook.


32

Adicione esse código à onCreatesua atividade, ele imprimirá o hash sob a tag KeyHash no seu logCat

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           getPackageName(),
                           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) {

}

Você pode adicionar várias teclas de hash à sua conta, portanto, se você estiver executando a depuração , não se esqueça de executá-la novamente no modo de lançamento .


ótima solução, acho que não deve haver versão não assinada executável? a versão não assinada não poderá ser instalada em nenhum dispositivo. Aqueles versão de depuração são assinados com armazenamento de chaves de depuração :)
— benleung

26

Para obter o código hash da chave do Android, siga estas etapas:

  1. Faça o download do OpenSSL para Windows aqui
  2. Agora descompacte na unidade C
  3. Abra um prompt de CMD
  4. Tipo cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Em seguida, digite apenas keytool -export -alias myAlias -keystore C:\Users\seu nome de usuário\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Feito

2
Ótima resposta. Muito obrigado.
— Palani Kumar

1
Isso é para chave de depuração ou para chave de liberação?
— IgorGanapolsky

@IgorGanapolsky em vez de path of myKeyStore, forneça o caminho da sua chave de lançamento. O código acima é para chave de depuração
— Pallavi

17

A solução mais simples que encontrei é esta:

  • Abra o Log Cat
  • Experimente e acesse o Facebook com o SDK do Android
  • Procure a linha no log que se parece com isso:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • Copie "abcdefgHIJKLMN + OPqrstuvwzyz" e cole-o na área Facebook Hash de chaves do Android.


esta é a maneira mais simples e eficaz, basta retirá-la dos logs sem abrir o openssl!
— Luca C.

esta é a única solução trabalhada para mim! Não vejo o log como você, mas vejo KeyHash: XWwXXXXX/5xxxxxxxxxxx=no log e me ajudou!
— Khang Dinh Hoang

14

Você pode obter o hash da chave SHA-1. É muito simples: você precisa obter sua chave SHA-1 (APK assinado) da Play Store, abaixo da imagem.insira a descrição da imagem aqui

Agora copie a chave SHA-1 e cole-a neste site http://tomeko.net também verifique a imagem abaixo para obter seu Key Hash.

insira a descrição da imagem aqui


1
Obrigado. Tentei obter o hash da chave usando o OpenSSL. Demorei 1 minuto e foi fácil.
— Verde Y.

1
Muito obrigado! Esta foi a solução, pois o Google está assinando meu aplicativo agora (eu apenas uso o certificado de upload / keystore)
— Harrison

13

Eu fiz dessa maneira para o Linux OS e Windows OS :

Linux:

  • Download do Openssl
  • Terminal aberto
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Altere o nome do alias e o keystore com o caminho como sua exigência.

O Terminal solicitaria a Senha do Keystore. Você deve fornecer uma senha para o mesmo Keystore .

Então, finalmente, você obteria o Release Hashkey .

Janelas:

Etapas para liberar Hashkey :

  • Faça o download do Openssl (faça o download aqui ), baixei para o SO de 64 bits , você pode encontrar mais aqui
  • Extrair o arquivo zip baixado para apenas C: \ drive
  • Abrir prompt de comando
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Altere o nome do alias e o keystore com o caminho como sua exigência.

Nota:

Por favor, coloque seus dados onde eu marquei entre ** **.

O Terminal solicitaria a Senha do Keystore. Você deve fornecer uma senha para o mesmo Keystore .

Então, finalmente, você obteria o Release Hashkey .

Feito


qual é a senha aqui?
— Akash Bisariya

@AkashBisariya, senha do keystore que você forneceu ao criar o keystore.
— Hiren Patel

Onde posso encontrar a chave depois de gerada com sucesso?
— Anand Phadke

11
  • baixar openSSL para Windows aqui você pode encontrar 64 bits e 32 bits aqui

  • extrair o arquivo baixado

  • crie o nome da pasta openSSL na unidade C
  • copie todos os itens extraídos para a pasta openSSL (bin, include, lib, openssl.cnf)
  • Para obter o keystore de depuração do Android, o local padrão será

C: \ Usuários \ nome de usuário \ .android \ debug.keystore

  • agora obtenha seu prompt de comando e cole este código

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ nomedeusuario.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binário | "C: \ openSSL \ bin \ openssl" base64

  • pressione enter e você receberá o código de 28 dígitos

NÃO, ele pede senha. digitar androidfornece um hash de 24 dígitos e digitar afornece um hash de 28 dígitos. Não faço ideia do porquê!
— sud007

links ruins! eles não têm keytool em tudo
— KawaiKx

6

Você precisa criar um armazenamento de chaves pela keytool para aplicativos assinados para android, como o procedimento descrito no Site Android, instalar o cygwin e instalar o openssl a partir do código do Google. Basta executar o comando a seguir e você obterá o hash chave para android e, em seguida, coloque essa chave de hash no aplicativo do facebook que você criou. E então você pode acessar o aplicativo do Facebook por meio do Aplicativo Android para publicar um mural ("publish_stream") poderia ser um exemplo.

$ keytools -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binário | openssl base64

Você precisa executar o comando acima do cygwin.


6

Faça o download do openSSL -> Instalar -> ele normalmente seria instalado em C: \ OpenSSL

abra cmd e digite

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

para verificar a versão do jdk, vá para C: / files de programas / java / jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Ele solicitará a senha, que é android.


6
  1. Simplesmente abra seu arquivo de atividade principal e crie a função de menção abaixo:

         try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.application.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) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 Execute seu aplicativo, isso gerará uma chave Hash para seu aplicativo.

  1. Agora, abra o log cat e pesquise com "KeyHash" e copie a chave de hash.

  2. Se você gerar a chave Hash, poderá remover esta função.


5

1) Crie uma chave para assinar seu aplicativo e lembre-se do alias.

2) Instale o OpenSSL.

3) Coloque a pasta bin do OpenSSL no seu caminho.

4) Siga as etapas mencionadas em "Configuração Single Sign-On" no FB-Android-SDK página , e gerar o seu Hash Key. Certifique-se de colocar o alias correto e o nome do arquivo de armazenamento de chaves.

5) Crie um aplicativo no Facebok e, na guia Dispositivos Móveis, insira essa Chave Hash.


5

Documentação oficial no site do desenvolvedor do facebook :

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

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

    }

@WilliamKinaan: anytime;): P
— Hardik Thaker

@HardikThaker eu usei o código que me dá exatamente o mesmo keyhash que eu tenho usando o terminal por este comando keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64e ainda estou recebendo hash da chave não corresponde a nenhum hash de chave armazenada
— Shan Xeeshi

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Isso funcionou para mim ...

Passos:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

Para Linux

Terminal aberto:

Para construção de depuração

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

você encontrará debug.keystore da pasta ".android", copie-o e cole-o na área de trabalho e execute o comando acima

Para versão Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

NOTA: Verifique se, em ambos os casos, ele deve solicitar a senha. Se não solicitar senha, significa que algo está errado no comando.


Estou recebendo valores diferentes com nome de alias diferente, como verificar qual deles está correto?
— Javal Nanda # 26/13

está pedindo senha com o nome alternativo?
— Biraj Zalavadia

ya e qualquer senha que eu insira, receberá a chave de hash .. meu aplicativo já está na play store e o fb nativo não está funcionando agora. De qualquer forma, precisarei gerar o hash da chave exata para a compilação do release. Os desenvolvedores estão sugerindo para incluir código dentro do onCreate no seguinte post, mas eu quero fazê-lo funcionar sem atualização app no playstore stackoverflow.com/questions/15021790/...
— Javal Nanda

sim, há um problema com viúvas com openssl. Você pode conseguir com o código especificado nessa postagem.
— Biraj Zalavadia 26/09

Se você quiser fazer sem atualização no playstore. 1) Crie um novo aplicativo Demp para Android. 2) Coloque esse trecho de código em create. 3) assinar este aplicativo de demonstração com o mesmo armazenamento de chaves de vocês app no app store 4) Em seguida, Executar este apk assinados 5) E usar essa chave de hash finalmente
— Biraj Zalavadia

4

Para um aplicativo Android

Esse código é usado para obter a chave de hash em seu aplicativo Android para integração com o Facebook. Eu testei todos os dispositivos e está funcionando. Mude apenas o nome do pacote deste código:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

Como respondi em um problema semelhante, achei que isso funcionava para mim:

  • Copie o apkname.apkarquivo do qual você deseja conhecer o hash para a pasta ' Java \ jdk1.7.0_79 \ bin '
  • Execute este comando keytool -list -printcert -jarfile apkname.apk
  • Copie o SHA1valor e converta-o usando este site
  • Use o valor convertido de Keyhash (por exemplo, zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

A solução mais simples:

  1. Não adicione a chave de hash, implemente todo o resto
  2. Quando o login do facebook é pressionado, você receberá um erro dizendo "Hash de chave inválido. O hash de chave" xxx "não corresponde a nenhuma chave armazenada. ..."
  3. Abra o painel do aplicativo do facebook e adicione o hash "xxx =" ("xxx" do sinal de erro + "=")

3

Para gerar um hash da sua chave de liberação, execute o seguinte comando no Mac ou Windows, substituindo o alias da chave de liberação e o caminho para o keystore.

No Windows, use:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Este comando deve gerar uma string de 28 caracteres. Lembre-se de que COPIAR e COLAR este Hash de chave de versão nas configurações do Android do seu aplicativo para Facebook.

image: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

Consulte: https://developers.facebook.com/docs/android/getting-started#release-key-hash e http://note.taable.com


3

Use isso para o hash da chave de impressão no kotlin

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }

2

Resolvi o meu também no Android Studio, mas com uma abordagem ligeiramente diferente.

Para obter o valor SHA-1 no Android Studio.

  1. Clique em Gradle
  2. Clique em Relatório de assinatura
  3. Copiar SHA-1

Clique no painel marcado no Android studio

  1. O valor SHA-1 é semelhante a este CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    e abra http://tomeko.net/online_tools/hex_to_base64.php para converter seu valor SHA1 em base64. É isso que o Facebook exige para obter o hash gerado "******************** =" e copiar o hash da chave no console do aplicativo do facebook.

Parte desta resposta foi retirada daqui Github Link


2

Existem dois métodos disponíveis: um complexo e o mais fácil

Métodos um: (pouco complexo)

primeiro, é necessário fazer o download do ssl 64bit ou 32bit, portanto, lembre-se de baixar o arquivo com o nome que contém o ecódigo de versão após openssl-0.9.8e_X64.zip OU openssl-0.9.8e_WIN32.zip não com o kcódigo de versão posterior,

e coloque no diretório AndroidStudio / jre / bin, se você não souber onde colocar, poderá encontrar esse diretório clicando com o botão direito do mouse no atalho do android studio como:

insira a descrição da imagem aqui

agora você conseguiu duas coisas necessárias em um só lugar, mas ainda precisa encontrar o caminho para debug.keystoreisso, que sempre pode ser encontrado no "C:\Users\yourusernamehere\.android\debug.keystore",

OBSERVAÇÃO Se seu aplicativo já estiver publicado, ou prestes a publicar, use seu keystore de assinatura de publicação, se e somente se você estiver testando no modo de desenvolvimento, você pode usar a depuração, keysotre

Como tudo está configurado, vamos organizar o comando que você deseja executar para a geração da chave de hash base64 formate seu comando será semelhante a este

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

solicitará que você digite uma senha para o debug.keystore, que é android por padrão. se você estiver usando sua própria chave, a senha também será sua. a saída ficará assim se tudo correr bem como o esperado, espero que ajude

insira a descrição da imagem aqui

Segundo método (Respectivamente fácil)

se você não quiser seguir todo o procedimento acima, use o seguinte método para registrar a haskey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

resultado:

insira a descrição da imagem aqui


1

A melhor abordagem é usar o seguinte código:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Mas fiquei muito frustrado com o fato de não haver uma ferramenta simples para gerar o HashKey para o aplicativo do Facebook. Cada vez que eu precisava brincar com o Openssl e o Keytool ou usar um código para obter o hash da assinatura ...

Então, eu escrevi um KeyGenTool simples que fará esse trabalho para você: -> KeyGenTool no Google Play <-

Aproveitar :)


1

Cometi um pequeno erro que deveria ser lembrado. Se você estiver usando seu keystore, dê seu nome alternativo, não androiddebugkey ...

Eu resolvi meu problema. Agora, se o Facebook estiver instalado no meu dispositivo, meu aplicativo ainda estará recebendo dados sobre a integração de login do Facebook. Apenas se preocupe com sua chave de hash.

Por favor veja abaixo.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Então aperte Enter - ele solicitará a senha e, em seguida, digite sua senha do keystore, não o Android.

Legal.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
                    for (Signature signature : info.signatures) {
                        MessageDigest md;
                        md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        String something = new String(Base64.encode(md.digest(), 0));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (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());
                }
            }
        });
    }



}

Este código não gera uma chave de hash válida para mim. A resposta de @ Jamshid funciona para mim no Mac OSX.
— Loolooii

0

Código Kotlin para obter a chave Hash

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

Por favor, não se esqueça de gerar chaves no ambiente Debug and Release, pois elas mudam conforme a configuração de compilação.


0

tente isto:

  • duas maneiras de obter o valor da chave hash

1) obtenha a chave de hash usando a linha de comando (Documento oficial: https://developers.facebook.com/docs/android/getting-started )

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

OU

2) obter chave de hash usando o código

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.