Integração com o Android Android com hash de chave inválido

194

Em um dos meus aplicativos, preciso obter dados do Facebook ... Estou fazendo o seguinte:

Eu criei o ID do aplicativo . Ele efetua login com êxito, mas após o logout, efetuo o logon e me fornece:

Captura de tela do erro inválido de hash da chave no Facebook

O que estou errado? Estou usando o SDK do Facebook ... Instalei o Facebook no meu telefone ... Ele está funcionando bem em um emulador, mas esse aplicativo do Facebook não está instalado.

Este é o meu código:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}
Android
fonte
12
mas ele funciona muito bem para a primeira vez ligin não funcionar se eu sou login após o logout feito
Android
1
sim, eu criei. usei o try {PackageInfo info = getPackageManager (). getPackageInfo ("com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); for (Assinatura de assinatura: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); }
Android
1
Eu soltei esse problema aqui! Aqui entendi legal! [ Stackoverflow.com/questions/5306009/… ] [1]
Madi
3
@ Android Mesmo que isso seja antigo, mas devo mencionar isso. Isso não acontece quando um usuário efetua logout e, em seguida, efetua login. Isso acontece quando você depura pela segunda vez, ou seja, reinstala o aplicativo durante a depuração. Assim, o hash muda. Isso não acontece no caso de aplicativo assinado (produção pronta)
Nilay Vishwakarma
1
Você recebe o mesmo erro se desinstalar o aplicativo do Facebook? Testei em dois telefones e esse erro ocorre apenas quando o aplicativo do Facebook está instalado.
Jaime Montoya

Respostas:

274

A chave de hash gerada está incorreta. Você pode obter a chave de hash usando duas etapas.

Um é através de um prompt de comando. Outro é através da codificação. A chave de hash através de um prompt de comando está funcionando somente na primeira vez. Eu não sei o motivo. Eu também tenho o mesmo problema. Então, eu tentei através de programação.

Siga esses passos:

Cole o seguinte código em oncreate().

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           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) {
}

Modifique "com.example.packagename" com o nome do seu pacote na codificação acima sem falha (você pode encontrar o nome do seu pacote no arquivo de manifesto do Android).

Execute seu aplicativo. Vá para a atividade em que você colou o código acima. No arquivo LogCat, procure por "KeyHash". Você pode encontrar um hash chave. Copie o hash da chave e vá para a página do painel de aplicativos do Facebook. Vá para configurações e insira os detalhes como na imagem abaixo.

Digite a descrição da imagem aqui

Depois de concluir a etapa acima, reinicie o aplicativo novamente. Agora você pode fazer login no Facebook. Para mais detalhes sobre o hash da chave, consulte o link .

Se você adicionar informações incorretas na página de configurações, isso significa que ocorrerá algum erro. Portanto, use as informações corretas lá. E também se o público (que não seja você) precisar usar seu aplicativo significa que você precisa habilitar a permissão (altere "yes" em "Status & Review" ao lado da configuração) .

Mahendran Sakkarai
fonte
20
Dessa maneira, é provável que você tenha um hash de chave para depurar keystore. Funciona para você no modo de desenvolvimento, não é necessário para o seu modo de produção. Pelo menos, não funciona para o meu aplicativo de produção.
Liangjun
3
graças que você salvou a minha muito tempo ... facebook doc oficial não deve lê-lo é besteira
DJP
Muito obrigado cara!
KinGPinG
Ei, com este código PackageInfo info = getPackageManager (). GetPackageInfo ("com.example.packagename", PackageManager.GET_SIGNATURES); for (Assinatura de assinatura: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); uma chave de hash diferente é enviado quando, quando eu corri o comando cmd no Windows minha chave de hash era diferente e eu adicionei-lo no FB mas ainda os shows de log o hash do código programático
Sagar Devanga
1
Economizou muito tempo. Continua o melhor. Verifique a descrição detalhada do keyhash e copie e cole na página de desenvolvedores do facebook. Não cometa o erro de digitar manualmente! Além disso, entenda que o keyhash muda sempre que você desinstala e instala o aplicativo.
Sanjeev
188

Se você estiver usando a assinatura do Google Play App:

Abra a seção de assinatura de aplicativos no Google Play Console e obtenha o hash SHA-1 em Certificado de assinatura de aplicativos . Em seguida, converta-o em Base64 , por exemplo, com esta ferramenta: Hexadecimal -> decodificador de string base64

Captura de tela do console

Imagem de Converter em Base64

Rafal Malek
fonte
14
Senhor! Você é um salva-vidas! Muito amor. Eu estava usando a assinatura da Play Store enquanto colocava os hashes das minhas chaves de versão locais no console do facebook.
Taha Rushain
4
Você salvar a minha vida, eu estou usando reagir, ninguém mencionou sobre a loja jogo assinatura aplicativo
TomSawyer
7
Obrigado! Funciona! Você também pode usar o comando terminal para isso: echo YOUR_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\://g | xxd -r -p | base64
Yuriy Seredyuk
4
É isso que precisa ser feito para o ambiente de produção !!! Afirmativo!
Bikey
Exatamente o que eu queria saber. Alterações do Hashkey na depuração sempre que você desinstalar e instalar o aplicativo. Para um apk assinado, esta é a melhor solução! Você ppl facilita a vida obrigado!
Sanjeev
122

Se você estiver enfrentando esse problema, insira essa chave no developer.facebook.com :

Digite a descrição da imagem aqui

Em seguida, verifique se o aplicativo está ativo no developer.facebook.com .

Este círculo verde indica que o aplicativo está ativo:

Digite a descrição da imagem aqui

Caso contrário, siga estas duas etapas para ativar seu aplicativo:

Etapa 1 Vá para o seu aplicativo → configuraçãoadicione E - mail de contato e aplique Salvar alterações.

Etapa 2 Vá para a opção Revisão do aplicativo e verifique se essa opção é Sim . Eu adicionei uma captura de tela:

Digite a descrição da imagem aqui

Nota: Se você deseja copiar a hashkey, verifique o BlueServiceQueue no LogCat .

Arpit Patel
fonte
5
Existe uma maneira fácil de copiar esse hash do telefone?
Daniel Shatz
4
@DanielShatz aparece no logcat. Descobri somente depois de copiá-lo letra por letra.
quer
4
@DanielShatz Procure tag BlueServiceQueueem logcat
Alaa M.
4
Essa resposta funcionou para mim. Após algumas tentativas de digitar o hash manualmente, ocorreu o mesmo erro, digitei maiúsculas i "I" em vez de minúsculas L "l". Levei algum tempo para perceber isso.
Markus
1
Isso está funcionando, mas estou me perguntando de onde o FB obtém essa chave de hash? Ninguém se pergunta? O erro foi exibindo o bom trabalho chave de hash, mas mesmo com todos os comandos, ou ficar SHA1 para base64 de assinatura google aplicativo me deu a chave que FB mostrado no erro ... Obrigado pelo truque de qualquer maneira
Umar3x
82

Eu tenho o mesmo problema. Eu tinha certeza de que era devido a uma falha muito pequena e sim, era!

Eu encontrei a solução:

Ao gerar a chave de hash de depuração no meu computador, digitei a senha do meu sistema. Mas a senha deve ser a seguinte -

Digite a senha do keystore: "android". Este foi o único problema no meu caso.

----- Para gerar o hash da chave Debug , use este comando -

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

Digite a senha do keystore: 'android'

----- Para gerar o hash da chave Release , use este comando -

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

Forneça sua senha do keystore após executar este comando.

Akash Bisariya
fonte
5
usando "android" como a senha funciona para mim. isso é intrigante.
adbie
3
use esse "android" como uma senha ao gerar chave de hash.
Akash Bisariya
2
na máquina Windows, verifique se a variável de caminho está definida corretamente para as pastas openssl \ bin e java .. \ bin. Defina também a variável HOMEPATH para poder usar comandos do facebook.
precisa saber é o seguinte
1
Pelo menos no mac, tive que instalar o Java JDK para que isso funcionasse. Caso contrário, o comando debug acima ainda gera um hash, mas o hash não funciona e você não será solicitado a fornecer uma senha. Com o JDK instalado, isso funcionou como um encanto.
lejonl
1
esta resposta deve ser a resposta correta
Evan Ngo
20

Eu experimentei o mesmo problema. Fiz uma breve pesquisa sobre as possíveis razões para esse comportamento estranho e descobri o seguinte:

  • Durante a primeira execução de um novo aplicativo do Facebook, ele permitirá conexão / login, mesmo se você não especificar nenhum hash de chave.

  • Para mim, o tutorial fornecido pelo Facebook não gerou o hash da chave correto, porque estava dando a configuração errada . Ao executar:

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

verifique todas as propriedades - a HOMEPATHexistência do keystore etc. Talvez você também precise fornecer a senha.

  • O que gerou a configuração adequada foi a solução sugerida por @Mahendran .

  • Além disso, se você vir o erro originalmente publicado ( http://i.stack.imgur.com/58q3v.png ), provavelmente o hash da chave que você vê na tela é o real. Se nada mais funcionar, tente inseri-lo no Facebook.

Eu obtive todos esses resultados com: Windows 7 edição de 64 bits, Android Studio 1.2.2, JDK 7.

Martin Doychev
fonte
2
versão linux: `keytool -exportcert -alias androiddebugkey -keystore $ HOME / .android / debug.keystore | openssl sha1 -binário | openssl base64`
ruX
1
Basta inserir o que é mostrado pelo facebook na tela do dispositivo, que deve funcionar. Obrigado pela observação @Martin
ralphgabb
14

De acordo com o Login do Facebook para Android , você deve fornecer o valor do hash da chave. Para obtê-lo, você precisará da chave usada para assinar seu aplicativo.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
JP Ventura
fonte
1
apenas queira adicionar um comentário, use seu keystore de produção.
Liangjun
2
@Liangjun Na verdade, você deve usar todas as suas chaves porque, caso contrário, não poderá testar o Login do Facbeook no ambiente de depuração.
Pijusn
2
@ Pius, sim, eu realmente uso as duas chaves. Eu deveria ter afirmado claramente.
Liangjun
Eu recebo um erro para este comando (sem tempo de execução Java, solicitando a instalação.), Mas ainda recebo uma chave, no entanto, é inválida e copiei e colei a do logcat que diz que não é reconhecida.
Cristi Băluță
8

Você deve criar dois hashes de chave, um para Debug e outro para Release.

Para o hash da chave Debug :

No OS X, execute:

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

No Windows, execute:

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

Origem dos hashes das chaves de depuração

Para o hash da chave Release :

No OS X, execute (substitua o que há entre os <>seus valores) :

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

No Windows, use (substitua o que há entre <>seus valores) :

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

Liberar fonte de hashes de chave

MBH
fonte
Eu recebo um erro para este comando (sem tempo de execução Java, solicitando a instalação.), Mas ainda recebo uma chave, no entanto, é inválida e, para fazê-lo funcionar, basta copiar e colar a do logcat
Cristi Băluță
Talvez você não tenha definido o PATH do seu java e keytool na linha de comando? @ CristiBăluță
MBH
7

Tentei todas as respostas anteriores e nada ajudou meu caso com meus clientes!

Então, meu cliente lembrou que ele tinha o aplicativo do Facebook instalado em seu dispositivo. Depois que ele removeu. o login funcionou perfeitamente.

O hashkey foi alterado e substituí as chaves de hash antigas no Facebook Developers Console pela chave do erro (como sugerido acima) e funciona!

O aplicativo do Facebook em si pode ser o problema, então é melhor descobrir isso em um dispositivo com o aplicativo do Facebook instalado e em um dispositivo com o aplicativo do Facebook não instalado e lidar com os dois casos ...

Matan Dahan
fonte
Sim mesmo aqui, recebi este erro depois de instalar o aplicativo do facebook no dispositivo. Atualmente, eu coloquei 2 chaves de hash nas configurações de desenvolvimento do Facebook.
Stuckedoverflow
3
Eu tenho uma situação muito parecida com a sua. O que me ajudou foi a sua página do FB - Configurações - Aplicativos - Remova o aplicativo da lista. Altere a chave de hash e reinstale o aplicativo fb e seu aplicativo. E agora funciona ...
anna_manzhula 7/17
4

Foi assim que resolvi esse problema:

Primeiro você precisa obter o valor SHA-1. Para isso, existem duas maneiras.

Para obter o valor SHA-1 no Android Studio.

  1. Clique em Gradle
  2. Clique em Relatório de assinatura
  3. Copie o valor SHA-1

OU

Para obter o valor SHA-1 do arquivo keystore .

keytool -list -v -keystore keystore_file_name.jks -alias key0

Copie o valor SHA-1 para a área de transferência da seguinte maneira:

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

E abra o decodificador Hexadecimal -> Base64 para converter seu valor SHA-1 em Base64.

É isso que o Facebook exige.

Obtenha o hash gerado "******************** =" e copie o hash da chave no aplicativo do Facebook.

Sajid Zeb
fonte
3

Eu estava tendo o mesmo problema. Primeiro faça o login, tudo bem, mas, em seguida, um hash de chave inválido.

O SDK do Facebook para Unity obtém o hash da chave errado. Ele obtém a chave de "C: \ Users \" your user ".android \ debug.keystore" e, em um mundo perfeito, deve obtê-la do keystore que você criou em seu projeto. É por isso que está lhe dizendo que o hash da chave não está registrado.

Conforme sugerido por Madi , você pode seguir as etapas neste link para encontrar a chave certa. Apenas certifique-se de apontá-los para o keystore dentro do seu projeto. Caso contrário, você não receberá a chave certa.

Jefferson Suzuki Bitencourt
fonte
3

O código a seguir fornecerá seu hash para o Facebook, mas você deve seguir estas etapas para obter o hash do candidato a lançamento.

  1. Copie e cole este código em sua atividade principal

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                               "com.example.packagename",
                               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. Gere um arquivo APK assinado .

  3. Conecte seu telefone a um laptop e verifique se ele permanece conectado.
  4. Instale e execute o arquivo APK no seu telefone movendo manualmente o APK do release para o seu telefone.
  5. Agora veja o Android LogCat (use o filtro KeyHash:) . Você deve ver sua chave de hash de lançamento no Facebook. Simplesmente copie e cole no seu https://developers.facebook.com/apps. Está nas configurações.
  6. Agora você pode testar o aplicativo, ele deve funcionar perfeitamente bem.
abdul jalil
fonte
observe que o código só funciona se você gerar um apk assinado. caso contrário ele só vai te dar depurar apk de hash que é inútil para apk lançado
Abdul Jalil
Olá, quando dei hashkey gerado para o aplicativo do facebook, ele funciona bem, mas ao tentar executar em outro dispositivo, ele mostra novamente 'CHAVE DE HASH INVÁLIDA' como posso definir a chave de hash para o livro de rosto que funciona para todos os dispositivos.
Deepak
2

Após uma longa pesquisa, encontramos uma solução.

Definimos permissões como:

loginButton.setReadPermissions(public_profile email);

Isso funcionou pela primeira vez, mas quando voltamos a entrar no Facebook, ocorreu o Erro de Hash Inválido .

A solução simples foi alterar a linha acima para:

loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));

E funcionou como uma felicidade!

O Facebook deve retornar a exceção correta em vez do erro enganoso de chave de hash inválido.

user3663906
fonte
Eu tenho mesmo problem.I tentou a sua solução, mas ainda não pode resolver o meu problema @ user3663906
BekaKK
2

Depois de tantos testes, me deparei com uma solução para isso. Gerei e adicionei chaves de depuração e liberação ao console do desenvolvedor do Facebook e ainda recebi o erro.

A única solução que funcionou para mim foi desinstalar o programa OpenSSL do Google e fazer o download no Win32 / Win64 OpenSSL Installer for Windows

Realmente funciona como mágica.

Uchenna Nnodim
fonte
2

Embora essa pergunta tenha sido respondida de várias maneiras úteis, eu só queria acrescentar que, quando segui a resposta de Rafal Maleks (usando as teclas de hash no Google Play Console), NÃO Pude usar a tecla SHA1 de assinatura de aplicativo, ainda recebi o genérico erro do Facebook. Em vez disso, eu precisava usar a impressão digital do certificado SHA-1 da parte Carregar certificado (logo abaixo da parte Assinatura do aplicativo no Google Play Console). Mesmo processo de outra forma;

  1. Copie a impressão digital do certificado SHA-1 da seção Carregar certificado no Google Play Console

  2. Converta o SHA-1 usando: http://tomeko.net/online_tools/hex_to_base64.php e copie a saída (base64)

  3. Cole-o na entrada Key Hashes em developer.facebook.com e salve as alterações.

Esperamos que esta resposta não seja redundante e ajude alguém que não pode fazê-la funcionar com o certificado de assinatura do aplicativo.

Agora, o login do Facebook funciona no meu aplicativo, tanto no modo de depuração quanto no lançamento.

Ferenziz
fonte
1

Cole o seguinte código no seu método OnCreate:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           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();
}

Apenas modifique o nome do pacote. Em seguida, vá para o seu arquivo LogCat e selecione Depurar pesquisa aqui. Então você encontrará a chave de hash. Agora copie essa chave de hash e vá para o site developer.facebook.app_id, edite sua chave de hash e pressione Save. Agora execute seu projeto Android novamente. Eu acho que o problema será resolvido.

pavel_coder
fonte
7
repetindo o outro cara
Beto Caldas
1

Isso pode ajudar alguém com o mesmo problema.

  1. Gere o hash da chave usando o código abaixo

    keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

    Como usar o keytool

  2. Cole-o no campo obrigatório no desenvolvedor do Facebook

  3. No Android Studio, menu ArquivoEstrutura do Projeto

    Digite a descrição da imagem aqui

    Adicione parâmetros de assinatura.

  4. Selecionar sabores

    Digite a descrição da imagem aqui

    Selecione a configuração de assinatura que criamos.

  5. Selecione o tipo de construção

    Digite a descrição da imagem aqui

  6. Selecione a variante de compilação e crie-a

    Digite a descrição da imagem aqui

CLIFFORD PY
fonte
1

Eu tive o mesmo problema quando estava depurando meu aplicativo. Reescrevi o hash que você riscou na imagem anexada (a que o Facebook diz ser inválida) e o adicionei no console de desenvolvedores do Facebook aos hashes principais. Apenas tenha cuidado com erros de digitação.

Essa solução é mais uma solução fácil do que uma solução adequada.

Piotr Sagalara
fonte
1

Se você estiver digitando o keyhash manualmente (por exemplo, do celular para o Painel do Facebook), certifique-se de diferenciar entre L pequeno e maiúsculo I.

Kashif Nazar
fonte
1
try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "www.icognix.infomedia",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}
ZafarHussain
fonte
0

O que o Facebook usou não é a senha padrão e o alias para depuração. Você precisa alterá-lo a seguir e ele funcionará.

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Se você não alterou nada com a senha padrão, deve ser "android" .

Você também pode configurá-lo no arquivo build.gradle. Mas a mesma senha de alias deve ser usada para gerar o hash:

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}
abhi shukla
fonte
0

Aqui estão muitas respostas certas. Só uma coisa:

Cole o hash recebido em AplicativoConfiguraçõesPrincipal , não no tutorial de início rápido.

Mandril
fonte
0

Eu tive o mesmo problema.

Crie o arquivo APK com o mesmo dispositivo que gerou o hashkey armazenado na seção de desenvolvedores do Facebook.

nome genérico
fonte
0

Corrigi isso adicionando o seguinte em MainApplication.onCreate:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.genolingo.genolingo",
                           PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
        KeyHash.addKeyHash(hash);
    }
}
catch (PackageManager.NameNotFoundException e) {
    Log.e("PackageInfoError:", "NameNotFoundException");
}
catch (NoSuchAlgorithmException e) {
    Log.e("PackageInfoError:", "NoSuchAlgorithmException");
}

Fiz o upload no console do desenvolvedor do Google e depois baixei o APK derivado que, por qualquer motivo, possui um hash de chave totalmente diferente.

Em seguida, usei o LogCat para determinar o novo hash da chave e o adicionei ao Facebook como outros usuários descreveram.

Michael
fonte
0

Se você estiver gerando hashes de chave de liberação, insira a senha real do seu keystore e não o "android".

Este foi o meu problema. A versão de depuração estava funcionando, mas o APK da versão não estava.

Sermilion
fonte
-1

Use o código abaixo no método onCreate () da sua atividade:

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 (NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

Execute este código. Isso irá gerar a chave de hash. Copie este KeyHash na configuração do aplicativo do Facebook e salve as alterações. Em seguida, faça login no seu aplicativo. Isso também funcionará perfeitamente no futuro.

Ashutoshg
fonte
3
repetindo o outro cara
Beto Caldas