Klucz skrótu dla aplikacji Android-Facebook

229

Pracuję nad aplikacją na Androida, w której chcę zintegrować funkcję publikowania na Facebooku. Pobrałem pakiet Facebook-Android SDK i dostałem tam plik readme.md (plik tekstowy), w którym wspomniano o generowaniu skrótu klucza dla Androida. Jak to wygenerować?

Ravi Babu
źródło
2
możesz sprawdzić ten link javatechig.com/2012/12/10/…
Nilanchal
2
sprawdź to Dla tych, którzy nadal mają problem,
Chintan Khetiya,
Wygeneruj HashKey dla trybu debugowania i zwalniania za pomocą tego. stackoverflow.com/questions/7506392/…
Naeem Ibrahim
Aby zdobyć klucze, obejrzyj ten film
Wkrótce Santos

Odpowiedzi:

310

Oto kroki

  1. Pobierz openssl z kodu Google (jeśli masz maszynę 64-bitową, musisz pobrać openssl-0.9.8e X64 nie najnowszą wersję)

  2. Wyodrębnij to. utwórz folder - OpenSSL w C: / i skopiuj tutaj wypakowany kod.

  3. wykryj ścieżkę pliku debug.keystore. Jeśli nie znalazłeś, wykonaj wyszukiwanie w C: / i użyj ścieżki w poleceniu w następnym kroku.

  4. wykryj ścieżkę keytool.exe i przejdź do wiersza poleceń dir / in i uruchom to polecenie w 1 wierszu

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

    • poprosi o hasło, umieść Androida
    • to wszystko. dostaniesz skrót klucza

Aby uzyskać więcej informacji, odwiedź tutaj

Avisek Chakraborty
źródło
5
Ta odpowiedź prawie działała dla mnie na Win7 x64. Jednak wynikowy zakodowany certyfikat był niepoprawny. Poniższa odpowiedź Bryana Bedarda da prawidłową wartość certyfikatu. Zgaduję, że rurociągi w oknach są w jakiś sposób winowajcą.
Walt Armor,
10
Uwaga dla użytkowników 64-bitowych: działa to z wersją openssl-0.9.8e X64 nie należy używać tylko z openssl-0.9.8k X64
Nicola Peluchetti
Pobrałem openssl-0.9.8e X64 dla mojego systemu i rozpakowałem go. Nie zawiera on nic oprócz jednego pliku z pewnymi danymi. Pomóż mi dowiedzieć się więcej.
Ravikiran
2
polecenie należy wykonać w folderze bin Java w systemach Windows.
Antrromet
1
@HanishSharma Spróbuj pominąć $.
zakaz geoinżynierii
241

[EDIT 2020] -> Teraz całkowicie polecam odpowiedź tutaj , o wiele łatwiejsze w użyciu Android Studio, szybsze i nie ma potrzeby pisania kodu - ten poniżej był z powrotem za dni zaćmienia :) -.

Możesz użyć tego kodu w dowolnym działaniu. Będzie logował hashkey w logcat, który jest kluczem debugowania. Jest to łatwe i przynosi ulgę niż korzystanie z 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());
}

Możesz usunąć kod po znajomości klucza;)

Bassem Wissa
źródło
27
Chłopaki, uważajcie, po utworzeniu apka klucz skrótu został zmieniony! ponieważ za pomocą tego kodu dostajesz skrót debugowania magazynu kluczy, ale podczas tworzenia apka jest to inny skrót, musisz przechwycić go z dziennika po wypróbowaniu ur apk na emulatorze, a następnie usunąć kod i wyeksportować ponownie bez tego dziennika :) - wiem, że to kłopot: D, ale dla mnie było to łatwiejsze niż keytool, powodzenia;)
Bassem Wissa
4
Opensssl zawsze tworzy problemy. Ta metoda jest najlepsza. Wystarczy utworzyć pustą aplikację i wydrukować klucz, użyj go. Dzięki!!
AnhSirk Dasarp
1
To zdecydowanie najłatwiejsze rozwiązanie. Korzystając z keytoolpolecenia, otrzymywałem niewłaściwe skróty klawiszy (nie mam pojęcia, dlaczego, zdecydowałem, że nie dbam o to wystarczająco, by to zbadać). To działało i dosłownie zajęło 5 minut, aby uzyskać klucze do debugowania i zwalniania kluczy. +1
Chris Cirefice,
1
Tak, Sebastien, wystarczy zainstalować podpisaną aplikację na urządzeniu, podłączyć ją do studia Android i sprawdzić log log, lub możesz pokazać skrót w edytowanym tekście w interfejsie użytkownika i skopiować go, w każdym razie tak, skrót generowany przez ten kod działa z podpisany apk :)
Bassem Wissa
1
używanie keytoola to taki bałagan, to jest naprawdę proste
Tabish
135

Stworzyłem małe narzędzie dla systemu Windows i Mac OS X. Wystarczy wrzucić plik magazynu kluczy i uzyskać klucz skrótu.

Jeśli chcesz mieć domyślny plik debug.keystore, użyj domyślnego aliasu i hasła. W przeciwnym razie użyj własnego pliku kluczy i wartości.

Sprawdź to, pobierz wersję systemu Windows lub wersję Mac OS X (Dev-Host może czasami nie działać ... więc jeśli link jest zepsuty, wyślij mi wiadomość i naprawię go).

Mam nadzieję, że to wam pomoże ...

31 grudnia 2014 r. - EDYCJA: Zmiana gospodarza na AFH. Daj mi znać, jeśli linki są zepsute

21 listopada 2013 - EDYCJA:

Zgodnie z życzeniem użytkowników dodałem domyślną lokalizację magazynu kluczy i przycisk DONUJ. Czuć się swobodnie z niego korzystać jeśli pomogłem ci. :)

Zrzut ekranu Zrzut ekranu 2

Shahar
źródło
1
Najlepsza. Metoda. Zawsze. Gdzie jest przycisk darowizny?
Adam Varhegyi,
1
@ Shahar2k5 Naprawdę nie wiem, zaczął od nowa i działał jak urok. Przepraszamy
Anearion
1
Działa jak marzenie! Dzięki za udostępnienie :)
Vinayak
1
@Shahar Barsheshet Dziękujemy. masz rację. Pobrano z domeny Devhost i nie napotkano żadnego problemu.
MajorGeek,
1
Nie rozumiem czegoś: dlaczego twoje narzędzie daje inny klucz SHA, w porównaniu do korzystania z keytoolwiersza poleceń? Czy to nie powinno dawać identycznych wyników, jeśli zostanie zastosowane do tego samego pliku kluczy?
skorygowany nocą
64

Instrukcje zawarte w samouczku Androida na Facebooku nie działają dobrze w systemie Windows . Ich przykład pokazuje, jak potokować wyjście keytoola do openssl, ale jeśli spróbujesz tego w systemie Windows, wynik nie będzie prawidłowy z jakiegoś powodu. Odkryłem, że musiałem używać plików pośrednich, aby działał poprawnie. Oto kroki, które działały dla mnie:

Zacznij od pobrania openssl na Windows z 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

Po uruchomieniu tych poleceń poprawny skrót jest zapisywany w pliku base64.txt. Skopiuj i wklej to do ustawień swojej aplikacji na Facebooku.

Bryan Bedard
źródło
Działa idealnie, wszystko inne zawodziło.
Oliver Dixon
2
Co za PITA - ale Bryan ma rację! Polecenie wyświetli hash prawie bez względu na to, czy twoja ścieżka jest zła, hasło jest nieprawidłowe, czy potoki nie działają poprawnie - WCIĄŻ MASZ HASH, ale to nie zadziała. Tak więc (w systemie Windows) porzuciłem PowerShell i wypróbowałem Cygwin - wciąż nie działa. Dopiero po skopiowaniu pliku debug.keystore do działającego katalogu mogłem go uruchomić i działać !!
Bobby
2
Podsumowując, w systemie Windows albo użyj techniki Bryana, aby go rozdzielić, LUB użyj cygwin z plikiem kluczy w działającym katalogu: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Jeśli nie monituje o hasło, to nie znalazł poprawnie pliku kluczy.
Bobby
Działa dla mnie idealnie. Świetna odpowiedź.
Ron
Jeśli chcesz uniknąć haszowania niepoprawnych haseł, po prostu sprawdź plik mycert.bin przed kontynuowaniem openSSL. W przeciwnym razie haszowałbyś niepoprawny tekst błędu hasła :)
Vaiden
50

Oto, co podano na oficjalnej stronie Facebooka :

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

Pozwól mi rozbić to polecenie na fragmenty.

  1. Szukać "keytool.exe". Możesz to przeszukać na dysku C:. Możesz go znaleźć w "java jdk"lub "java jre". Jeśli zainstalowałeś wiele wersji, wybierz dowolną.

  2. Otwórz wiersz CMD i przejdź do powyższego katalogu, w którym znalazłeś "keytool.exe".

    Przytnij „exe” i wklej powyższe polecenie podane na stronie na Facebooku.

  3. Po wprowadzeniu tej informacji pojawi się błąd, że OpenSSL nie jest rozpoznawany jako polecenie polecenia wyjściowego. Rozwiązanie: Pobierz „openssl” z OpenSSL (jeśli masz komputer 64-bitowy, musisz pobrać openssl-0.9.8e X64 ). Wyodrębnij i zapisz w dowolnym miejscu ... Zapisałem go na dysku C: w OpenSSlfolderze

  4. Zamień openssl w powyższym poleceniu, w którym pojawiał się błąd OpenSSL, na „C: \ OpenSSL \ bin \ openssl” w obu miejscach po potoku „|”.

  5. Jeśli pojawi się monit o hasło, wprowadź android.

I dostaniesz swój klucz skrótu. Dalsze kroki można znaleźć ponownie na stronie na Facebooku.

DeltaCap019
źródło
32

Dodaj ten kod do onCreateswojej aktywności, wydrukuje skrót pod tagiem KeyHash w 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) {

}

Możesz dodać wiele skrótów do swojego konta, więc jeśli działasz w debugowaniu , nie zapomnij uruchomić go ponownie w trybie wydania .

Ilya Gazman
źródło
świetne rozwiązanie, myślę, że nie powinna być wykonywalnej wersji bez podpisu? niepodpisana wersja nie może zostać zainstalowana na żadnym urządzeniu. Te wersje debugowania są podpisane za pomocą magazynu kluczy debugowania :)
benleung,
26

Aby uzyskać kod skrótu klucza Androida, wykonaj następujące kroki:

  1. Pobierz OpenSSL dla Windows tutaj
  2. Teraz rozpakuj na dysk C.
  3. Otwórz monit CMD
  4. Rodzaj cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Następnie wpisz tylko keytool -export -alias myAlias -keystore C:\Users\swoją nazwę użytkownika\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Gotowe
noelyahan
źródło
2
Świetna odpowiedź. Dziękuję Ci bardzo.
Palani Kumar
1
Czy to dotyczy klucza debugowania czy klucza wydania?
IgorGanapolsky
@IgorGanapolsky zamiast ścieżki myKeyStorepodaj ścieżkę swojego klucza zwolnienia. Powyższy kod dotyczy klucza debugowania
Pallavi
17

Najprostsze rozwiązanie, jakie znalazłem, to:

  • Otwórz Log Cat
  • Spróbuj uzyskać dostęp do Facebooka za pomocą zestawu Android SDK
  • Poszukaj wiersza w dzienniku, który wygląda następująco:

    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
  • Skopiuj „abcdefgHIJKLMN + OPqrstuvwzyz” i wklej go w obszarze Facebook Key Hash.

Ron
źródło
jest to najprostszy i najskuteczniejszy sposób, wystarczy pobrać go z dzienników, nawet nawet openssl!
Luca C.,
to dla mnie jedyne sprawdzone rozwiązanie! Nie widzę dziennika tak jak ty, ale widzę to KeyHash: XWwXXXXX/5xxxxxxxxxxx=w dzienniku i pomógł mi!
Khang Dinh Hoang
14

Klucz skrótu można uzyskać od klucza SHA-1. To bardzo proste, musisz zdobyć klucz SHA-1 (podpisany APK) ze Sklepu Play, sprawdź poniższy obrazek.wprowadź opis zdjęcia tutaj

Teraz skopiuj ten klucz SHA-1 i wklej go na tej stronie http://tomeko.net również sprawdź poniższy obrazek, aby uzyskać skrót klucza.

wprowadź opis zdjęcia tutaj

Prashant Arvind
źródło
1
Dzięki. Próbowałem uzyskać klucz skrótu za pomocą OpenSSL. Zajęło mi to 1 minutę i było łatwo.
Zielony Y.
1
Wielkie dzięki! To było rozwiązanie, ponieważ Google podpisuje teraz moją aplikację (korzystam tylko z certyfikatu przesyłania / magazynu kluczy)
Harrison
13

Zrobiłem w ten sposób dla systemu operacyjnego Linux i Windows :

Linux:

  • Pobierz openssl
  • Otwórz terminal
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Prosimy o zmianę nazwy aliasu i magazynu kluczy z jego ścieżką jako wymaganiem.

Terminal poprosi o hasło do magazynu kluczy. Musisz podać hasło do tego samego magazynu kluczy .

Więc w końcu dostaniesz Hashkey wydania .

Windows:

Kroki do wydania Hashkey :

  • Pobierz openssl (pobierz stąd ), pobrałem na 64-bitowy system operacyjny, więcej informacji znajdziesz tutaj
  • Wyodrębnij pobrany plik zip tylko na dysk C: \
  • Otwórz wiersz polecenia
  • 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

Prosimy o zmianę nazwy aliasu i magazynu kluczy z jego ścieżką jako wymaganiem.

Uwaga:

Proszę podać swoje dane tam, gdzie zaznaczyłem między ** **.

Terminal poprosi o hasło do magazynu kluczy. Musisz podać hasło do tego samego magazynu kluczy .

Więc w końcu dostaniesz Hashkey wydania .

Gotowe

Hiren Patel
źródło
jakie jest tutaj hasło
Akash Bisariya
@AkashBisariya, hasło magazynu kluczy, które podałeś podczas tworzenia magazynu kluczy.
Hiren Patel
Gdzie mogę znaleźć klucz po pomyślnym wygenerowaniu?
Anand Phadke
11
  • pobierz openSSL dla Windows tutaj możesz znaleźć 64-bitowy i 32-bitowy tutaj

  • rozpakuj pobrany plik

  • utwórz nazwę folderu openSSL na dysku C.
  • skopiuj wszystkie wyodrębnione elementy do folderu openSSL (bin, include, lib, openssl.cnf)
  • pobierz magazyn kluczy Android debugowania, domyślną lokalizacją będzie

C: \ Users \ nazwa użytkownika \ .android \ debug.keystore

  • teraz uzyskaj wiersz polecenia i wklej ten kod

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ nazwa_użytkownika.android \ debug.keystore | „C: \ openSSL \ bin \ openssl” sha1 -binary | Base64 „C: \ openSSL \ bin \ openssl”

  • naciśnij Enter, a otrzymasz 28-cyfrowy kod
Ashana.Jackol
źródło
NIE, prosi o hasło. pisanie androiddaje 24-cyfrowy skrót, a pisanie adaje 28-cyfrowy skrót. Nie mam pojęcia dlaczego!
sud007
złe linki! w ogóle nie mają keytoola
KawaiKx
6

Musisz utworzyć magazyn kluczy przy pomocy keytool dla podpisanych aplikacji dla Androida, jak procedura opisana w witrynie Android, a następnie musisz zainstalować cygwin, a następnie musisz zainstalować openssl z kodu Google, a następnie po prostu wykonaj następujące polecenie, a otrzymasz skrót klucz dla Androida, a następnie włóż ten klucz skrótu do utworzonej aplikacji Facebook. A potem możesz uzyskać dostęp do aplikacji na Facebooku za pośrednictwem aplikacji na Androida do publikowania na ścianie („publ_stream”) może być przykładem.

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

Musisz wykonać powyższe polecenie z cygwina.

hossaindoula
źródło
6

Pobierz openSSL -> Zainstaluj -> zwykle instaluje się w C: \ OpenSSL

następnie otwórz cmd i wpisz

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

java (Enter)

dir (Enter)

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

aby sprawdzić wersję jdk, przejdź do C: / 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)

Poprosi Cię o hasło, które jest Androidem.

Maniya Joe
źródło
6
  1. Po prostu otwórz główny plik czynności i utwórz poniżej funkcję wzmianki:

         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 Uruchom aplikację, wygeneruje to klucz skrótu dla twojej aplikacji.

  1. Teraz otwórz dziennik kota i wyszukaj za pomocą „KeyHash” i skopiuj klucz skrótu.

  2. Po wygenerowaniu klucza skrótu możesz usunąć tę funkcję.

mohit sharma
źródło
5

1) Utwórz klucz do podpisania aplikacji i zapamiętaj alias.

2) Zainstaluj OpenSSL.

3) Umieść folder bin OpenSSL na swojej ścieżce.

4) Wykonaj czynności wymienione w punkcie „Konfiguracja jednokrotnego logowania” na FB-Android-SDK stronie , i wygenerować klucz Hash. Upewnij się, że podałeś poprawny alias i nazwę pliku kluczy.

5) Utwórz aplikację na Facebok i na karcie Urządzenia mobilne wprowadź ten klucz skrótu.

Abhinav Manchanda
źródło
5

Oficjalna dokumentacja w dniu stronie dewelopera Facebooka :

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

    }
Hardik Thaker
źródło
@WilliamKinaan: kiedykolwiek;;): P
Hardik Thaker
@HardikThaker Użyłem twojego kodu, daje mi dokładnie taką samą kombinację klawiszy, jaką otrzymałem za pomocą terminalu za pomocą tego polecenia keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64i wciąż otrzymuję skrót klucza nie pasuje do żadnego zapisanego skrótu klucza
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

To działało dla mnie ...

Kroki:

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
Pravin Mohol
źródło
4

Dla systemu Linux

Otwarty terminal:

Do kompilacji debugowania

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

znajdziesz debug.keystore z folderu „.android” skopiuj go i wklej na pulpicie i uruchom powyżej polecenia

Do wydania Kompilacja

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

UWAGA: Upewnij się, że w obu przypadkach musi poprosić o hasło. Jeśli nie prosi o hasło, oznacza to, że coś jest nie tak z poleceniem.

Biraj Zalavadia
źródło
Otrzymuję różne wartości o różnych nazwach aliasów, jak sprawdzić, która z nich jest poprawna?
Javal Nanda,
pyta o hasło zarówno z nazwą aliasu?
Biraj Zalavadia
ya i jakiekolwiek hasło, które wprowadzę, otrzyma mi klucz skrótu .. moja aplikacja jest już w sklepie z zabawkami, a natywny FB nie działa teraz. W każdym razie będę musiał wygenerować dokładny skrót klucza dla kompilacji wydania. Programiści sugerują umieszczenie kodu w onCreate w następnym poście, ale chcę, aby działał bez aktualizacji aplikacji na playstore stackoverflow.com/questions/15021790/…
Javal Nanda
tak, jest problem z wdowami z openssl. Możesz to osiągnąć za pomocą kodu określonego w tym poście.
Biraj Zalavadia
Jeśli chcesz zrobić bez aktualizacji w sklepie playstore. 1) Utwórz nową aplikację Android Demp. 2) Włóż ten fragment kodu do tworzenia. 3) podpisz tę aplikację demo przy użyciu tego samego magazynu kluczy aplikacji w sklepie z aplikacjami 4) Następnie uruchom ten podpisany apk 5) I w końcu użyj tego klucza skrótu
Biraj Zalavadia
4

Dla aplikacji na Androida

Ten kod służy do uzyskania klucza skrótu w aplikacji na Androida w celu integracji z Facebookiem. Przetestowałem wszystkie urządzenia i działa. Zmień tylko nazwę pakietu tego kodu:

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

    }
}
Ramkailash
źródło
4

W odpowiedzi na podobny problem stwierdziłem, że to działa dla mnie:

  • Skopiuj apkname.apkplik, dla którego chcesz znać skrót, do folderu „ Java \ jdk1.7.0_79 \ bin
  • Uruchom to polecenie keytool -list -printcert -jarfile apkname.apk
  • Skopiuj SHA1wartość i przekonwertuj ją za pomocą tej witryny
  • Użyj przekonwertowanej wartości Keyhash ( np. ZaHqo1xcaPv6CmvlWnJk3SaNRIQ = )
Muhammad Omar ElShourbagy
źródło
3

Najprostsze rozwiązanie:

  1. Nie dodawaj klucza skrótu, implementuj wszystko inne
  2. Po naciśnięciu przycisku logowania na Facebooku pojawi się komunikat „Nieprawidłowy skrót klucza. Skrót klucza„ xxx ”nie pasuje do żadnego zapisanego klucza. ...”
  3. Otwórz pulpit nawigacyjny aplikacji Facebook i dodaj skrót „xxx =” (skrót „xxx” od znaku błędu + „=”)
Singed
źródło
3

Aby wygenerować skrót klucza wydania, uruchom następujące polecenie w systemie Mac lub Windows, zastępując alias klucza wydania i ścieżkę do magazynu kluczy.

W systemie Windows użyj:

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

To polecenie powinno wygenerować 28 znaków charachera. Pamiętaj, że KOPIUJ i WKLEJ ten klucza dostępu do ustawień Androida swojego identyfikatora aplikacji Facebook.

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

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

Programista HTML5
źródło
3

Użyj tego do drukowania skrótu klucza w 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){

    }
Prashant Jajal
źródło
2

Rozwiązałem również moją w Android Studio, ale z nieco innym podejściem.

Aby uzyskać wartość SHA-1 w Android Studio.

  1. Kliknij Gradle
  2. Kliknij Raport podpisywania
  3. Skopiuj SHA-1

Kliknij zaznaczony panel w Android studio

  1. Wartość SHA-1 wygląda następująco: CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    i otwórz http://tomeko.net/online_tools/hex_to_base64.php, aby przekonwertować wartość SHA1 na base64. To właśnie Facebook wymaga, aby uzyskać wygenerowany skrót „******************** =” i skopiować skrót skrótu do konsoli aplikacji Facebook.

Część tej odpowiedzi pochodzi stąd Link Github

rycerz
źródło
2

Dostępne są dwie metody: skomplikowana i prosta

Metoda pierwsza: (mały kompleks)

po pierwsze musisz pobrać ssl 64bit lub 32bitodpowiednio, pamiętaj, aby pobrać plik o nazwie zawierającej ekod wersji po otwarciu openssl-0.9.8e_X64.zip LUB openssl-0.9.8e_WIN32.zip nie za pomocąk po kodzie wersji,

i umieść w katalogu AndroidStudio / jre / bin, jeśli nie wiesz, gdzie umieścić, możesz znaleźć ten katalog, klikając prawym przyciskiem myszy skrót do studia Android jako:

wprowadź opis zdjęcia tutaj

teraz poradziłeś sobie z dwoma wymaganymi rzeczami w jednym miejscu, ale wciąż musisz znaleźć dla siebie ścieżkę debug.keystore, którą zawsze można znaleźć w "C:\Users\yourusernamehere\.android\debug.keystore",

UWAGA Jeśli Twoja aplikacja została już opublikowana lub zamierza opublikować, użyj magazynu kluczy podpisu publikującego, jeśli i tylko jeśli testujesz w trybie programistycznym, możesz użyć debugowania, keyotre

Gdy wszystko jest skonfigurowane, pozwól ułożyć polecenie, które chcesz wykonać dla generowania klucza skrótu base64 format, a twoje polecenie będzie wyglądać tak

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

podpowie Ci, aby wprowadzić hasło do debug.keystore, który jest domyślnie Androidem. jeśli używasz własnego klucza, hasło będzie również twoje. wynik będzie wyglądał tak, jeśli wszystko pójdzie zgodnie z oczekiwaniami, mam nadzieję, że może to pomóc

wprowadź opis zdjęcia tutaj

Druga metoda (względnie łatwa)

jeśli nie chcesz przejść przez całą powyższą procedurę, po prostu użyj następującej metody, aby zarejestrować 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());
        }
    }

wynik:

wprowadź opis zdjęcia tutaj

Ali Tamoor
źródło
1

Najlepszym rozwiązaniem jest użycie następującego kodu:

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

Ale byłem tak frustrujący faktem, że nie ma prostego narzędzia do generowania HashKey dla aplikacji Facebook. Za każdym razem musiałem grać z openssl i Keytool lub użyć kodu, aby uzyskać skrót z podpisu ...

Więc napisałem prosty KeyGenTool, który zrobi to za Ciebie: -> KeyGenTool w Google Play <-

Cieszyć się :)

AivarsDa
źródło
1

Zrobiłem mały błąd, o którym należy pamiętać. Jeśli używasz magazynu kluczy, podaj swój alias, a nie androiddebugkey ...

Rozwiązałem mój problem. Teraz, jeśli w moim urządzeniu jest zainstalowany Facebook, nadal moja aplikacja otrzymuje dane na temat integracji logowania do Facebooka. Dbaj tylko o swój klucz skrótu.

Patrz poniżej.

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

Następnie naciśnij Enter- poprosi o hasło, a następnie wprowadź hasło do magazynu kluczy, a nie Androida.

Chłodny.

Pravin Mohol
źródło
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());
                }
            }
        });
    }



}
Patrząc w przyszłość
źródło
Ten kod nie generuje dla mnie prawidłowego klucza skrótu. Odpowiedź @ Jamshid działa dla mnie w systemie Mac OSX.
Loolooii,
0

Kod Kotlin, aby uzyskać klucz skrótu

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

Nie zapomnij wygenerować kluczy w środowisku debugowania i wydawania, ponieważ zmieniają się one zgodnie z ustawieniem kompilacji.

aniketpatil
źródło
0

Spróbuj tego :

  • dwa sposoby na uzyskanie wartości klucza skrótu

1) Uzyskaj klucz skrótu za pomocą wiersza polecenia (oficjalny dokument: https://developers.facebook.com/docs/android/getting-started )

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

LUB

2) Uzyskaj klucz skrótu za pomocą kodu

  @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());
            }
        }
Jaydeep Dobariya
źródło