Android-Facebook uygulaması için anahtar karması


230

Facebook gönderme özelliğini entegre etmek istediğim bir Android uygulaması üzerinde çalışıyorum. Facebook-Android SDK'sını indirdim ve Android için anahtar karmasını oluşturduğu belirtilen readme.md (metin dosyası) var. Nasıl üretebilirim?


2
bu bağlantıyı kontrol edebilirsiniz javatechig.com/2012/12/10/…
Nilanchal

2
kontrol bu , hala sorunlar yaşıyoruz olanlar için
Chintan Khetiya

Bunu kullanarak hata ayıklama ve serbest bırakma modu için HashKey oluşturun. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

Anahtarları almak için bu videoyu izleyin
Yakında Santos

Yanıtlar:


311

İşte adımlar-

  1. Google kodundan openssl'i indirin (64 bit makineniz varsa , en son sürümü değil openssl-0.9.8e X64'ü indirmeniz gerekir )

  2. Çıkarın. C: / klasöründe OpenSSL oluşturun ve çıkarılan kodu buraya kopyalayın.

  3. debug.keystore dosya yolunu algıla. Eğer u bulamadıysanız, C: / dizininde bir arama yapın ve sonraki adımda komuttaki Yolu kullanın.

  4. keytool.exe yolunuzu tespit edin ve bu dir / in komut istemine gidin ve bu komutu 1 satırda çalıştırın.

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • şifre isteyecek, android koymak
    • bu kadar. bir anahtar karması alacaksın

Daha fazla bilgi için burayı ziyaret edin


5
Bu cevap neredeyse Win7 x64'te işe yaradı. Ancak, sonuçtaki kodlanmış sertifika yanlıştı. Bryan Bedard'ın aşağıdaki cevabı doğru sertifika değerini üretecektir. Sanırım pencerelerdeki borular bir şekilde suçlu.
Walt Zırh

10
64 bit kullanıcılar için not: Bu, openssl-0.9.8e X64 sürümü ile çalışır Sadece openssl-0.9.8k X64 ile kullanılmaz
Nicola Peluchetti

Sistemim için openssl-0.9.8e X64'ü indirdim ve ayıkladım.Bazı verilerle bir dosya dışında hiçbir şey içermiyor. Lütfen daha fazla bilgi edinmeme yardım edin.
Ravikiran

2
komut, windows sistemlerinde java'nın bin klasöründe yürütülmelidir.
Antrromet

1
@HanishSharma Dışarıda bırakmayı deneyin $.
ban-geoengineering

241

[EDIT 2020] -> Şimdi burada cevabı tamamen tavsiye ediyorum , android studio kullanarak daha kolay, daha hızlı ve herhangi bir kod yazmaya gerek yok - aşağıda biri tutulma günlerinde :) -.

Bu kodu herhangi bir etkinlikte kullanabilirsiniz. Hata ayıklama anahtarı olan logcat'e hashkey'i kaydeder. Bu kolaydır ve SSL kullanmaktan daha rahattır.

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());
}

Kodu bildikten sonra kodu silebilirsiniz;)


27
Çocuklar, dikkat, apk oluşturduktan sonra, anahtar karma değişti! çünkü bu kodu kullanarak u hata ayıklama anahtar deposu karma olsun, ama apk oluştururken, başka bir karma, emülatörde ur apk denedikten sonra günlükten yakalamalı, sonra kodu silin ve bu günlük olmadan tekrar dışa aktarın :) - bunun bir güçlük olduğunu biliyorum: D ama benim için keytool daha kolay, iyi şanslar;)
Bassem Wissa

4
Opensssl her zaman sorun yaratır. Bu yöntem en iyisidir. Sadece boş bir uygulama oluşturun ve anahtarı yazdırın, Kullanın. Teşekkürler dostum!!
AnhSirk Dasarp

1
Bu açık ara en kolay çözümdür. keytoolKomutu kullanarak yanlış anahtar karmaları alıyordum (neden olduğu hakkında hiçbir fikrim yok, araştırmak için yeterince umursamadım). Bu çalıştı ve tam anlamıyla hata ayıklama almak ve anahtar karmaları serbest bırakmak için 5 dakika sürdü. +1
Chris Cirefice

1
Evet Sebastien, sadece imzalı apk'yi bir cihaza yüklemeniz gerekiyor ve onu android stüdyosuna bağlayıp günlük kedisini kontrol edin, ya da ui'de bir düzenleme metninde karma gösterebilir ve kopyalayabilirsiniz, yine de evet bu kodun ürettiği karma çalışır imzalı apk :)
Bassem Wissa

1
keytool kullanmak böyle bir karmaşa bu gerçekten basit
Tabish

135

Windows ve Mac OS X için küçük bir araç oluşturdum. Sadece anahtar deposu dosyasını atın ve karma anahtarını alın.

Varsayılan debug.keystore dosyasını istiyorsanız, varsayılan diğer adı ve şifreyi kullanın. Aksi takdirde, kendi anahtar deposu dosyanızı ve değerlerinizi kullanın.

Bir göz atın , Windows sürümünü indirin veya Mac OS X sürümünü indirin (Dev-Host bazen kapalı olabilir ... bu yüzden bağlantı koparsa, PM ve ben düzeltirim).

Umarım bu size yardımcı olur ...

31 Aralık 2014 - EDIT: Ana makine AFH olarak değiştirildi. Bağlantıların kopup kopmadığını lütfen bana bildirin

21 Kasım 2013 - DÜZENLE:

Kullanıcıların istediği gibi, varsayılan bir anahtar deposu konumu ve bir BAĞIŞ düğmesi ekledim. Size yardımcı olduysam kullanmaktan çekinmeyin . :)

Ekran görüntüsü Ekran görüntüsü 2


1
En iyi. Yöntem. Hiç. Bağış düğmesi nerede?
Adam Varhegyi

1
@ Shahar2k5 Gerçekten bilmiyorum, tekrar başladı ve bir cazibe gibi çalıştı. Üzgünüz
Anearion

1
Tıkır tıkır çalışıyor! Paylaştığınız için teşekkürler :)
Vinayak

1
@Shahar Barsheshet Teşekkür ederim. Haklısın. Devhost alan adından indirildi ve herhangi bir sorunla karşılaşılmadı.
MajorGeek

1
Bir şey anlamıyorum: Aracınız keytoolkomut satırını kullanmaya kıyasla neden farklı SHA anahtarı veriyor ? Aynı anahtar deposu dosyasına uygulandığında özdeş sonuçlar üretmesi gerekmez mi?
15'te

64

Şu anda Facebook'un Android Eğiticisindeki talimatlar Windows altında iyi çalışmıyor . Örnekleri, keytool çıkışının openssl'ye nasıl bağlanacağını gösterir, ancak bunu Windows altında denerseniz, çıkış bazı nedenlerden dolayı geçerli değildir. Düzgün çalışması için ara dosyaları kullanmak zorunda olduğumu fark ettim. İşte benim için işe yarayan adımlar:

Google'dan Windows için openssl'yi indirerek başlayın .

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

Bu komutları çalıştırdıktan sonra geçerli karma base64.txt dosyasında saklanır. Bunu kopyalayıp Facebook'taki uygulama ayarlarınıza yapıştırın.


Mükemmel çalışıyor, her şey başarısız oldu.
Oliver Dixon

2
Ne bir PITA - ama Bryan haklı! Ne olursa olsun, yolunuz yanlış, parola yanlış veya borular doğru çalışmıyorsa, komut neredeyse bir karma verir - HILL A HASH ALIN, ancak çalışmaz. Yani (Windows'ta) Powershell'i bıraktım ve Cygwin'i denedim - hala çalışmıyor. Sadece debug.keystore dosyasını çalışma dizinine kopyaladıktan sonra çalıştırıp çalıştırabilirim!
Bobby

2
Özetle, Windows'da, ya Bryan'ın parçalama tekniğini kullanın ya da çalışma dizinindeki anahtar deposu dosyanızla cygwin kullanın: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Parola girmenizi istemiyorsa, anahtar deposu dosyasını düzgün bulamadı.
Bobby

Benim için mükemmel çalıştı. Mükemmel cevap.
Ron

Yanlış şifre durumları için karma almaktan kaçınmak istiyorsanız, openSSL ile devam etmeden önce mycert.bin'inizi kontrol etmeniz yeterlidir. Aksi takdirde yanlış şifre hatası metnini
eklersiniz

50

Facebook'un resmi sayfasında verilen şey :

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

Bu komutu parçalara ayırmama izin verin.

  1. Bakın "keytool.exe". Bunu C: sürücüsünde arayabilirsiniz. Bunu bulabilirsiniz "java jdk"veya "java jre". Birden çok sürüm yüklediyseniz, birini seçin.

  2. Bir CMD istemi açın ve bulduğunuz yukarıdaki dizine gidin "keytool.exe" .

    "Exe`" klibi ve Facebook sayfasında sağlanan yukarıdaki komutu yapıştırın.

  3. Bunu girerken, OpenSSL'nin giriş çıkış komutunda tanınmadığına dair bir hata alırsınız. Çözüm: OpenSSL'den " openssl " dosyasını indirin (64 bit makineniz varsa openssl-0.9.8e X64'ü indirmeniz gerekir ). Ayıklayın ve istediğiniz yere kaydedin ... OpenSSlKlasördeki C: sürücüsüne kaydettim

  4. Yukarıdaki komutta, OpenSSL hatası aldığınız yukarıdaki komutta, "|" kanalından sonraki her iki yerde de "C: \ OpenSSL \ bin \ openssl" ile değiştirin.

  5. Şifre istenirse girin android.

Ve hash anahtarını alacaksın. Diğer adımlar için tekrar Facebook sayfasına bakınız.


32

Bu kodu onCreateetkinliğinize ekleyin, logCat'inizdeki KeyHash etiketi altındaki karmayı yazdıracaktır

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) {

}

Hesabınız için birden fazla hashkey ekleyebilirsiniz, bu nedenle hata ayıklamada çalışıyorsanız bunu yayın modunda tekrar çalıştırmayı unutmayın .


harika bir çözüm, sanırım yürütülebilir imzasız sürüm olmamalı? imzasız sürüm herhangi bir cihaza yüklenemez. Bu hata ayıklama sürümü hata ayıklama anahtar deposu ile imzalandı :)
benleung

26

Android anahtar karma kodunu almak için şu adımları izleyin:

  1. Windows için OpenSSL uygulamasını indirin buradan
  2. Şimdi C sürücüsüne çıkartın
  3. CMD istemi açma
  4. tip cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Ardından yalnızca keytool -export -alias myAlias -keystore C:\Users\kullanıcı adınızı yazın\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Bitti

2
Mükemmel cevap. Çok teşekkür ederim.
Palani Kumar

1
Bu hata ayıklama anahtarı mı yoksa serbest bırakma anahtarı mı?
IgorGanapolsky

@IgorGanapolsky yolu yerine myKeyStoreserbest bırakma anahtarınızın yolunu belirtin . Yukarıdaki kod hata ayıklama anahtarı içindir
Pallavi

17

Bulduğum en basit çözüm şudur:

  • Log Cat'i aç
  • Android SDK ile Facebook'a erişmeyi deneyin
  • Günlükte şuna benzeyen satırı arayın:

    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
  • "AbcdefgHIJKLMN + OPqrstuvwzyz" dosyasını kopyalayın ve Facebook Android Anahtar Karma alanına yapıştırın.


Bu en basit ve en etkili yol, sadece openssl olmadan günlüklerden almak!
Luca C.

bu benim için tek işe yarayan çözüm !. Günlüğü senin gibi görmüyorum, ama bunu KeyHash: XWwXXXXX/5xxxxxxxxxxx=günlüğünde görüyorum ve bana yardım ettim!
Khang Dinh Hoang

14

SHA-1 anahtarından anahtar karmasını alabilirsiniz. Bu çok basit SHA-1 (İmzalı APK) anahtarını Play Store'dan kontrol et.resim açıklamasını buraya girin

Şimdi bu SHA-1 anahtarını kopyalayın ve bu web sitesinde geçirin http://tomeko.net ayrıca Anahtar Karma'nızı almak için aşağıdaki görüntüyü kontrol edin.

resim açıklamasını buraya girin


1
Teşekkürler. OpenSSL kullanarak anahtar karma almaya çalıştım. 1 Dakika beni aldı ve kolay oldu.
Green Y.

1
Çok teşekkürler! Google şu anda uygulamamı imzalarken bu çözümdü (sadece yükleme sertifikasını / anahtar deposunu kullanıyorum)
Harrison

13

Bu şekilde Linux işletim sistemi ve Windows işletim sistemi için yaptım :

Linux:

  • Openssl indir
  • Terminali aç
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Lütfen takma adı ve anahtar deposunu yolu ile gereği olarak değiştirin.

Terminal ediyorum sormak için Şifre anahtar deposunun. Yapmak zorunda şifre sağlamak için aynı anahtar deposu .

Sonunda Release Hashkey'i alacaksınız .

Pencereler:

Sürüm Hashkey için Adımlar :

  • Openssl'i indirin ( Buradan indirin ), 64 bit işletim sistemi için indirdim , daha fazlasını burada bulabilirsiniz
  • İndirilen zip dosyasını yalnızca C: \ sürücüsüne çıkart
  • Komut istemini aç
  • 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

Lütfen takma adı ve anahtar deposunu yolu ile gereği olarak değiştirin.

Not:

Lütfen detaylarınızı ** ** arasında işaretlediğim yere koyun.

Terminal ediyorum sormak için Şifre anahtar deposunun. Yapmak zorunda şifre sağlamak için aynı anahtar deposu .

Sonunda Release Hashkey'i alacaksınız .

Bitti


burada şifre nedir?
Akash Bisariya

@AkashBisariya, anahtar deposunu oluştururken verdiğiniz anahtar deposu şifresi.
Hiren Patel

Başarıyla oluşturulduktan sonra anahtarı nerede bulabilirim?
Anand Phadke

11
  • Windows için openSSL'i indirmek için 64bit ve 32bit'i burada bulabilirsiniz

  • indirilen dosyayı ayıkla

  • C sürücüsünde klasör adı openSSL oluştur
  • ayıklanan tüm öğeleri openSSL klasörüne kopyala (bin, include, lib, openssl.cnf)
  • android hata ayıklama anahtar deposunu alın, varsayılan konum

C: \ Users \ kullanıcı adı \ .android \ debug.keystore

  • şimdi komut isteminizi alın ve bu kodu yapıştırın

keytool -exportcert -alias androiddebugkey -keystore C: \ Kullanıcılar \ kullanıcıadı.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 - ikili | "C: \ openSSL \ bin \ openssl" base64

  • enter tuşuna basarsanız 28 haneli anahtar kodunu alırsınız

HAYIR şifre istiyor. yazmak android24 basamaklı bir karma averir ve yazmak 28 basamaklı bir karma verir. Neden olduğu hakkında bir fikrim yok!
sud007

Kötü bağlantılar! hiç keytool yok
KawaiKx

6

Android Sitesi'nde açıklanan prosedür gibi android için imzalı uygulamalar için keytool tarafından bir anahtar deposu oluşturmanız gerekir ve daha sonra cygwin'i yüklemeniz gerekir ve daha sonra google kodundan openssl'yi yüklemeniz ve ardından aşağıdaki komutu yürütmeniz gerekir. android için anahtar ve daha sonra bu karma anahtarı oluşturduğunuz facebook uygulamasına koyun. Ve sonra duvar uygulaması ("publish_stream") için Android Uygulaması üzerinden facebook uygulamasına erişebilirsiniz bir örnek olabilir.

$ keytool -exportcert -alias takma_adı -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

Yukarıdaki komutu cygwin'den yürütmeniz gerekiyor.


6

OpenSSL'i indir -> Yükle -> genellikle C: \ OpenSSL'ye yüklenir

sonra cmd'yi açın ve yazın

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

java (Enter)

dir (Enter)

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

jdk sürümünü kontrol etmek için C'ye gidin : / program files / 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)

Android olan şifre isteyecektir.


6
  1. Basitçe size Ana Etkinlik Dosyası açın ve aşağıda belirtilen fonksiyonu oluşturun:

         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 Size Uygulama çalıştırın, bu uygulamanız için bir Hash anahtarı oluşturur.

  1. Şimdi, log cat'ı açın ve "KeyHash" ile arama yapın ve hash anahtarını kopyalayın.

  2. Hash anahtarını oluşturduğunuzda bu işlevi kaldırabilirsiniz.


5

1) Başvurunuzu imzalamak için bir anahtar oluşturun ve takma adı hatırlayın.

2) OpenSSL'yi yükleyin.

3) OpenSSL'nin bin klasörünü yolunuza koyun.

4) FB-Android-SDK sayfasındaki "Tek Oturum Açma Kurulumu" altında belirtilen adımları izleyin ve Karma Anahtarınızı oluşturun. Doğru takma adı ve anahtar deposu dosya adını girdiğinizden emin olun.

5) Facebok üzerinde bir uygulama oluşturun ve Mobil Aygıtlar sekmesi altında bu Karma Anahtarını girin.


5

Facebook geliştirici sitesindeki Resmi Belgeler :

@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 Kodunuzu kullandım, bu komutla terminali kullandığım tam olarak aynı keyhash'i veriyor keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64ve hala anahtar karması alıyorum, depolanmış herhangi bir anahtar karmasıyla
eşleşmiyor

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

Bu benim için çalıştı ...

Adımlar:

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

Linux için

Terminali Aç:

Hata Ayıklama Derlemesi için

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

Eğer wil bulmak debug.keystore onu kopyalayıp masaüstünde yapıştırmak klasör ".android" dan ve komuta yukarıda koşmak

Sürüm Derlemesi için

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

NOT: Her iki durumda da parola istemesi gerektiğinden emin olun. Parola istemezse, komutta bir şeyler yanlış demektir.


Farklı takma ad ile farklı değerler alıyorum, hangisinin doğru olduğunu nasıl doğrularım?
Javal Nanda

hem takma adla şifre mi istiyor?
Biraj Zalavadia

ya ve ne şifre girersem gir bana bana karma anahtarı verilir .. benim app zaten oyun deposunda ve yerli fb şimdi çalışmıyor. Her nasılsa sürüm oluşturmak için kesin anahtar karma oluşturmak gerekir. Geliştiriciler, aşağıdaki gönderide onCreate içindeki kodu dahil etmeyi öneriyorlar, ancak playstore stackoverflow.com/questions/15021790/…
Javal Nanda

Evet, openssl ile dullarla ilgili bir sorun var. Bu yayında belirtilen kodla ulaşabilirsiniz.
Biraj Zalavadia

Play Store'da güncelleme yapmadan isterseniz. 1) Yeni android Demp uygulaması oluşturun. 2) Bu kod parçasını create üzerine koyun. 3) App Store'daki aynı anahtar deposuyla bu demo uygulamasını imzalayın 4) Sonra bu imzalı apk 5'i çalıştırın) Sonunda bu karma anahtarı kullanın
Biraj Zalavadia

4

Android uygulaması için

Bu kod, Facebook entegrasyonu için Android uygulamanızda karma anahtarını almak için kullanılır. Tüm cihazları test ettim ve çalışıyor. Yalnızca bu kodun paket adını değiştirin:

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

Şöyle cevap benzer bir konuda ben benim için çalışıyor gibi buldum:

  • Kopya apkname.apkEğer 'için karmasını bilmek istediğiniz dosyayı Java \ jdk1.7.0_79 \ bin ' klasöründe
  • Bu komutu çalıştır keytool -list -printcert -jarfile apkname.apk
  • SHA1Değeri kopyalayın ve bu siteyi kullanarak dönüştürün
  • Dönüştürülen Keyhash değerini kullanın ( ör. ZaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

En basit çözüm:

  1. Karma anahtarını eklemeyin, diğer her şeyi uygulayın
  2. Facebook giriş tuşuna basıldığında, "Geçersiz anahtar karması." Xxx "anahtar karması depolanan anahtarla eşleşmiyor."
  3. Facebook uygulama kontrol panelini açın ve "xxx =" karmasını ekleyin (+ "=" işaretinden "xxx" karmasını ekleyin)

3

Sürüm anahtarınızın karmasını oluşturmak için, sürüm anahtarı takma adınızı ve anahtar deponuzun yolunu kullanarak Mac veya Windows'ta aşağıdaki komutu çalıştırın.

Windows'ta şunları kullanın:

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

Bu komut 28 karakter dizesi oluşturmalıdır. Unutmayın KOPYA ve PASTA Facebook App ID Android ayarlarından içine bu Açma Anahtar Hash.

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

Şuradan başvurun: https://developers.facebook.com/docs/android/getting-started#release-key-hash ve http://note.taable.com


3

Kotlin'deki baskı anahtarı karması için bunu kullanın

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

Android Studio'da benimkini de çözdüm, ancak biraz farklı bir yaklaşımla.

Android Studio'da SHA-1 değerini almak için.

  1. Gradle'ı tıklayın
  2. İmzalama Raporu'nu tıklayın
  3. SHA-1'i kopyala

Android stüdyosunda işaretli paneli tıklayın

  1. SHA-1 değeri şu CD'ye benzer: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    ve SHA1 değerinizi base64'e dönüştürmek için http://tomeko.net/online_tools/hex_to_base64.php adresini açın . Bu Facebook oluşturulan karma "******************** =" gerektirir ve anahtar karma facebook uygulama konsoluna kopyalayın.

Bu cevabın bir kısmı buradan alınır Github Link


2

Karmaşık bir ve kolay olan iki yöntem vardır

Birinci Yöntem: (küçük Karmaşık)

öncelikle indirmek zorunda hepsinden SSL 64bit veya 32bitbuna göre içeren isimle dosya indirmek için hatırlamak esürüm kodu sonra openssl-0.9.8e_X64.zip VEYA openssl-0.9.8e_WIN32.zip değil ile kversiyon kodundan sonra,

ve AndroidStudio / jre / bin dizinine yerleştirin, nereye yerleştireceğinizi bilmiyorsanız, android stüdyo kısayoluna sağ tıklayarak bu dizini bulabilirsiniz:

resim açıklamasını buraya girin

şimdi bir yerde iki gerekli şeyi başardınız, ama yine de sizin için yolu bulmalısınız debug.keystore, bu her zaman "C:\Users\yourusernamehere\.android\debug.keystore",

NOT Uygulamanız zaten yayınlanmışsa veya yayınlanmak üzere ise, yalnızca ve hata ayıklama kullanabileceğinizden daha geliştirme modunda test ediyorsanız, yayınlama imzalama anahtar deponuzu kullanın

Her şey kurulduktan sonra, karma anahtar üretimi için yürütmek istediğiniz komutu düzenleyin ve komut şu base64 formatşekilde görünecektir

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

varsayılan olarak android olan debug.keystore için bir şifre girmenizi teşvik edecektir. kendi anahtarınızı kullanıyorsanız şifre de sizin olacaktır. her şey beklendiği gibi giderse çıktı bu şekilde görünecektir, umarım yardımcı olabilir

resim açıklamasını buraya girin

İkinci Yöntem (Oldukça kolay olan)

yukarıdaki tüm prosedürleri düşünmek istemiyorsanız, haskey'i kaydetmek için sadece aşağıdaki yöntemi kullanın:

 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());
        }
    }

çıktı:

resim açıklamasını buraya girin


1

En iyi yaklaşım aşağıdaki kodu kullanmaktır:

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();
    }
}

Ancak Facebook uygulaması için HashKey'i oluşturmak için basit bir araç olmadığı gerçeğiyle o kadar sinir bozucuydum. Her seferinde Openssl ve Keytool ile oynamak ya da hash imzasını almak için bir kod kullanmak zorunda kaldım ...

Bu yüzden sizin için işe yarayacak basit bir KeyGenTool yazdım: -> Google Play'de KeyGenTool <-

Zevk almak :)


1

Akılda tutulması gereken küçük bir hata yaptım. Anahtar deponuzu kullanıyorsanız androiddebugkey değil, diğer adınızı verin ...

Sorunumu çözdüm. Şimdi Facebook cihazımda yüklü ise, yine de uygulamam Facebook giriş entegrasyonu hakkında veri alıyor. Sadece hash anahtarınızı önemseyin.

Lütfen aşağıya bakın.

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

Sonra tuşuna basın Enter- sizden şifreyi soracak ve ardından Android yerine anahtar deposu şifrenizi girecektir.

Güzel.


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());
                }
            }
        });
    }



}

Bu kod benim için geçerli bir karma anahtarı oluşturmuyor. @ Jamshid'in yanıtı Mac OSX'te benim için çalışıyor.
Loolooii

0

Karma anahtarı almak için Kotlin kodu

 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());
    }
}

Lütfen hata ayıklama ve bırakma ortamında oluşturma ayarına göre değiştikleri için anahtarlar oluşturmayı unutmayın.


0

bunu dene :

  • Hash Anahtar Değeri almanın iki yolu

1) komut satırını kullanarak karma anahtarı alın (Resmi Doküman: https://developers.facebook.com/docs/android/getting-started )

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

VEYA

2) kodu kullanarak karma anahtarı alın

  @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());
            }
        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.