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.